Compare commits

...

1165 Commits

Author SHA1 Message Date
Colum Ferry 92f0fcf633 fix(module-federation): update default shared packages for Angular to include rxjs-interop
- Add @angular/core/primitives/signals, @angular/core/event-dispatch, and @angular/core/rxjs-interop to DEFAULT_ANGULAR_PACKAGES_TO_SHARE
- Add @angular/common/http and @angular/platform-browser to default shared packages
- Make eager loading packages consistent between webpack and rspack by removing useRspack conditional

This ensures that Angular packages like @angular/core/rxjs-interop are shared by default in module federation setups,
preventing runtime errors when remotes use these packages but hosts don't.

Fixes #32316
2025-10-18 21:24:00 -04:00
Craigory Coppola 3f7e152685 feat(dotnet): add initial draft of .NET plugin (#32869)
## Current Behavior
@nx-dotnet/core is recommended plugin for .NET

## Expected Behavior
@nx/dotnet is new .NET plugin

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Vijay Ramakrishnan <vramak@microsoft.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-18 01:46:46 -04:00
Craigory Coppola 6549d2a2d8 fix(core): avoid changing existing project name if a project.json file is added to a project (#33114)
## Current Behavior
When adding a `project.json` file to configure certain aspects of an
existing Nx project, that project's name will be changed. We had to fix
this for package-json based projects a while back, and as we expand
polyglot its coming up again.

## Expected Behavior
The "default name" behavior stamped into the project.json plugin doesn't
trample existing names. To do this, it had to be moved out of the
project.json plugin and into the validate + normalize flow

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 23:21:48 +00:00
Craigory Coppola 678619f4a8 fix(core): restore migrations used by nx repair (#33124)
## Current Behavior
Some migrations used by `nx repair` are missing

## Expected Behavior
Migrations used by `nx repair` are only removed when deemed applicable.

This reverts a portion of commit
a637f9eef9.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 15:34:36 -04:00
Jason Jean 6d8694560d chore(repo): update nx to 22.0.0-beta.7 (#33118)
Updating Nx from 22.0.0-beta.6 to 22.0.0-beta.7
2025-10-17 15:19:40 -04:00
Jack Hsu d8e2a6b8f0 docs(misc): fix an issue where devkit types are not pointed to the latest d.ts files but what's installed in root node_modules (#33125)
Use tsconfig path aliases to point devkit to the `dist/packages/nx`
folder rather than `node_modules/nx` (which is installed from NPM).

Closes DOC-188
2025-10-17 15:19:18 -04:00
Jack Hsu 2e4d5d3167 fix(core): allow prerelease versions of nx to be used with devkit (#33123)
This PR fixes an issue where due to the removal or `--legacy-peer-deps`
for NPM, you can no longer install prerelease versions of Nx. This also
means `npx create-nx-workspace@next` cannot be used with NPM.

For example, if you have this `package.json`:

```json
{
  "dependencies": {
    "nx": "22.0.0-beta.4",
    "@nx/devkit": "22.0.0-beta.4"
  },
  "license": "MIT"
}
```

And tried `npm install`, it will error out with:

```
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: undefined@undefined
npm error Found: nx@22.0.0-beta.1
npm error node_modules/nx
npm error   nx@"22.0.0-beta.1" from the root project
npm error
npm error Could not resolve dependency:
npm error peer nx@">= 21 <= 23" from @nx/devkit@22.0.0-beta.1
npm error node_modules/@nx/devkit
npm error   @nx/devkit@"22.0.0-beta.1" from the root project
```

By allowing prereleases via `^22.0.0-0` NPM can work again.

Note: pnpm and yarn are fine.
2025-10-17 14:51:20 -04:00
Juri deb10f2818 feat(storybook): add watch-deps and build-deps targets 2025-10-17 20:17:15 +02:00
Jack Hsu ace274d58b fix(graph): prevent content from overflowing in the PDV component (#33120)
This PR fixes and issue where content was overflowing in PDV when the
command is too long.

<img width="809" height="518" alt="image"
src="https://github.com/user-attachments/assets/113285fe-8d93-4ad2-bbac-b2992a065a4e"
/>


Fixes DOC-243
2025-10-17 14:12:49 -04:00
Caleb Ukle 5f72bf3f36 docs(repo): update CONTRIBUTING.md w/ new docs info (#33121)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-17 14:12:18 -04:00
Leosvel Pérez Espinosa c327a00b29 fix(core): format catalog definition files when appropriate in nx migrate (#33105)
Formats the `pnpm-workspace.yaml` when catalog definitions are updated
after running `nx migrate`. Like the rest of the Catalog feature, it's
agnostic to the package manager, allowing for an easier addition of
support for future package managers.
2025-10-17 12:17:27 -04:00
Jack Hsu 7d61470c15 docs(nx-dev): add package.json linking instructions to TypeScript tutorial (#33117)
The TypeScript packages tutorial shows how to import shared local
libraries but doesn't mention that users need to add dependencies to
package.json and run npm install.

This PR instructs users to link packages properly. Also fixes line
highlighting.

<img width="787" height="718" alt="image"
src="https://github.com/user-attachments/assets/03ec8cca-eab0-4514-8c07-c7d4d316a606"
/>
2025-10-17 11:23:47 -04:00
Leosvel Pérez Espinosa 3b69f0fccf fix(linter): install correct deps in eslint convert to flat config generator (#33078)
Installs the correct dependencies after converting to the ESLint Flat
configuration. This was highlighted after removing the npm
`--legacy-peer-deps` flag from default usage in Nx.

Additionally, it fixes nightly e2e failures:

- `e2e-esbuild`
- `e2e-eslint`
- `e2e-gradle`
- `e2e-js`
- `e2e-web`
- `e2e-webpack`

Nightly run where all pass:
https://github.com/nrwl/nx/actions/runs/18592750415
2025-10-17 10:16:59 -04:00
Juri c4a32560a0 docs(nx-cloud): update self-healing CI config instructions 2025-10-17 16:10:27 +02:00
Jack Hsu dce77c164d feat(nx-dev): add v22 to version picker (#33110)
In preparation for v22, add the new version to the docs header.
2025-10-17 10:06:59 -04:00
Craigory Coppola ebc46e3a7b fix(core): enhance tui summary output to fix misc issues (#33057)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Terminal output is all logged in one chunk, resulting in a somewhat
jarring experience for lots of output that can cause issues in the
extreme cases.

Task cache status is missing from the run-many outputs

Outputs are sometimes missing

## Expected Behavior
The above are fixed.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-17 09:44:27 -04:00
Colum Ferry 6bd1a1835f feat(vue): migrate @vitejs/plugin-vue to 6.0.1 (#33097)
## Current Behavior

- We currently install `@vitejs/plugin-vue` verion `^5` which only
supports `Vite 5 | 6`. This causes peerDep conflicts with `Vite 7`.
- Vue and Nuxt always install v7 version of TypeScript ESLint packages.
This causes peer dep conflicts when ESLint v9 is installed.

## Expected Behavior

- Migrate to `@vitejs/plugin-vue` version `^6` which supports `Vite 5 |
6 | 7`.
- Vue and Nuxt should install a version of the TypeScript ESLint
packages that works for the installed ESLint version.

Nightly run where the previously failing `e2e-vue` tests pass with these
changes:
https://github.com/nrwl/nx/actions/runs/18591984947/job/53009089023

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-10-17 15:33:55 +02:00
Colum Ferry ea63c79b52 chore(node): use nestjs/swagger@11 in e2e (#33108)
Update e2e to use `@nestjs/swagger@^11`
2025-10-17 12:37:57 +01:00
Jack Hsu 8c52f626bc chore(nx-dev): remove unused docs pages and scripts (#33101)
This PR removes `nx documentation` and old docs pages from the next.js
app. This improves CI times since we no longer need to check `nx
documentation`, and the next.js app is faster to build.

## Changes
- `.github/workflows/ci.yml` no longer runs `nx documentation`
- Remove `documentation` target from root `project.json` and
corresponding scripts in `scripts/documentation/generators`
- Remove old docs pages from next.js app (e.g.
`nx-dev/nx-dev/pages/[...segments].tsx`)
- Remove manifest JSON files for old docs
- Remove old `og:image` generator for docs (blog, and other pages handle
it differently, this was just for old docs).
- Update bad links in `docs/blog` and `docs/changelog` since we no
longer match them to their manifest JSON files -- the redirects were
already working so just pointed to the new Astro URL

## Notes
- There were some missing dependencies like `ai` for `nx-dev/nx-dev`
that worked previously due to hoisting, but was failing build in this PR
I fixed those.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-16 21:12:59 -04:00
Jack Hsu 849f356e65 docs(nx-dev): fix java og image url (#33103)
When we renamed the file earlier we did not update this page.
2025-10-16 16:28:24 -04:00
Juri Strumpflohner a20bbd5533 docs(nx-dev): update more blogs list rendering (#33071)
- **docs(nx-dev): show all blogs in the list below highlighted**
- **docs(nx-dev): adjust ai label on blog posts**
- **docs(nx-dev): adjust how labels are rendered on blog list**
- **docs(nx-dev): swap podcasts tag to ai tag**

Preview:
https://nx-dev-git-nxdev-update-blog-list-page-nrwl.vercel.app/blog
2025-10-16 21:19:04 +02:00
Leosvel Pérez Espinosa 4f31a03c52 fix(core): prioritize in-progress tasks section visibility in tui (#33053)
## Current Behavior

When a task is selected and its outputs are displayed in the terminal
pane, the TUI always tracks a task by name regardless of its status.

## Expected Behavior

- When a task is selected, its outputs are displayed in the terminal
pane, and the terminal pane is focused, we track the selected task by
name.
- When a task is in progress, the TUI should track it by name while in
progress.
- When it finishes, it should switch to track another in-progress task
at the same index or in a close index if there is none in progress at
the same index.
  - If it's the last task that finished, keep tracking it by name.
- When a task is pending or finished:
- When it's selected and its outputs are displayed in the terminal pane,
the TUI should track it by name.
- When it's selected and its outputs are not displayed in the terminal
pane, the TUI should track the index.

This allows the relevant in-progress section to be visible in more
scenarios than before. The TUI wouldn't blindly follow all tasks by
name.

Additionally, this PR updates the sorting of in-progress tasks to
prioritize start time first, followed by alphabetical order. This
stabilizes the section more (reduces extra movement due to alphabetical
sorting) and aligns with a similar sorting done for finished tasks
(based on the end time).
2025-10-16 15:12:40 -04:00
James Henry 449e396962 feat(release): allow ignoring nx.json release config with ReleaseClient (#33099) 2025-10-16 23:05:38 +04:00
James Henry c031db1721 feat(release): new replaceExistingContents CLI and API option for changelog (#33096) 2025-10-16 23:04:55 +04:00
Benjamin Cabanes 8aa2874452 docs(nx-dev): add what to expect video in contact sections (#33086)
Add new video explaining what to expect from Nx Enterprise, Nx Labs and
general Contact.
2025-10-16 12:52:15 -04:00
James Henry fd3c08724f feat(release): allow changelog.renderer to be set to an implementation directly (#33095) 2025-10-16 20:04:27 +04:00
Leosvel Pérez Espinosa 42b553cd2e fix(core): improve db connection initialization and error messages (#33054)
## Summary

Improved database initialization with better error handling, automatic
recovery from stale files, and cache preservation during error recovery.

## Changes Made

### 1. Iterative Retry Logic with Explicit State

Converted initialization from recursive calls to an iterative loop with
a state flag (`cleaned_up_stale_files`) that limits retries to 2
attempts. This makes retry conditions explicit and self-documenting
while preventing potential stack overflow.

### 2. Complete Auxiliary File Cleanup

Now removes all SQLite database files during cleanup (`.db`, `.db-wal`,
`.db-shm`) instead of just the main `.db` file. This prevents stale
Write-Ahead Logging auxiliary files from causing initialization failures
after version upgrades.

### 3. Smart Compatible Database Handling

Compatible databases (matching version) are now reconfigured based on
their current journal mode:

- **DELETE mode**: Attempts opportunistic upgrade to WAL for better
performance, cleans up any orphaned WAL files from previous runs
- **WAL mode**: Verifies WAL still works; if it fails, removes only
auxiliary files (preserving cache), retries, and falls back to DELETE
mode if still failing
- **Unknown/query failed**: Full reconfiguration with complete cleanup
on failure

This preserves cached build outputs when possible while recovering from
stale file issues automatically.

### 4. WSL1 Proactive Detection

Detects WSL1 environments by reading `/proc/version` and automatically
uses DELETE journal mode instead of attempting WAL (which WSL1 doesn't
support), preventing initialization failures.

### 5. Enhanced Error Messages

Replaced generic error messages with context-specific, platform-agnostic
guidance:

- Permission errors: Explains how to check file/directory permissions
and ownership without platform-specific commands
- Disk full: Suggests freeing space or moving workspace
- Missing directories: Explains unexpected condition with
troubleshooting steps
- All errors: Include debug instructions (`NX_NATIVE_LOGGING=trace`) and
reporting link

Error messages work consistently across Windows, macOS, and Linux
without suggesting commands that may not be available on the user's
platform.

### 6. Code Quality Improvements

Extracted helper functions to reduce duplication:

- `query_journal_mode()` - Query database's current journal mode
- `set_busy_handler()` - Configure connection-level busy handler
- `remove_wal_files()` - Remove only WAL auxiliary files
- `remove_all_database_files()` - Complete database cleanup
- `create_io_error()` / `create_db_error()` - Generate helpful error
messages

## Problems Solved

### Stale WAL Files After Version Upgrades

Leftover `.db-wal` and `.db-shm` files from previous versions no longer
cause initialization to fail. These files are now cleaned up
automatically during initialization.

### Cache Loss on Recoverable Errors

When WAL mode issues occur on otherwise healthy databases, only
auxiliary files are removed, preserving the main database and all cached
build outputs. Full wipes only happen for genuine corruption or version
mismatches.

### WSL1 Compatibility

WSL1 environments now work without initialization failures by
proactively detecting the environment and using DELETE mode instead of
attempting WAL.

### Performance Optimization

Databases in DELETE mode automatically attempt upgrading to WAL when the
environment supports it (e.g., after moving workspace from network drive
to local disk), providing better performance without manual
intervention.

### Poor Debugging Experience

Error messages now provide specific, actionable guidance based on the
error type, helping users resolve issues without needing to ask for
help.

## Impact

-  Users no longer need manual `nx reset` for stale file issues
-  Cache and build outputs preserved during error recovery
-  WSL1 works out of the box
-  Automatic performance improvements when environment changes
-  Better error messages reduce support burden

## Related Issue(s)

Fixes #28640 
Fixes #30856
Fixes #32894
2025-10-16 11:35:44 -04:00
Colum Ferry 45e420c55b fix(remix): ensure supported version of vite is used (#33089)
## Current Behavior
`@nx/remix` depends on `@nx/react` which depends on `@nx/vite`. 
`@nx/vite` has a `peerDependency` on `vite: 5 || 6 || 7`

This direct dependency chain causes an issue wherein vite 7 is installed
and causes a conflicting peer dependency between `@remix-run: 2`

## Expected Behavior
Remix should use `Vite 5 | 6`. Break the chain between `@nx/react` and
`@nx/vite` causing `Vite 7` to be installed.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-16 09:43:37 -04:00
Jason Jean 698e51b0d5 chore(repo): update nx to 22.0.0-beta.6 (#33087)
Updating Nx from 22.0.0-beta.4 to 22.0.0-beta.6
2025-10-16 09:32:36 -04:00
Leosvel Pérez Espinosa e8bd83e3e0 feat(core): add support for pnpm catalogs (#32978)
## Current Behavior

Pnpm Catalogs is not supported.

## Expected Behavior

Pnpm Catalogs should be supported.

## Related Issue(s)

Fixes #30035 
Fixes #29772
2025-10-15 18:54:16 -04:00
Benjamin Cabanes 3d1177fe06 docs(nx-dev): replace custom PlayButton with VideoPlayer integration (#33084)
Replaced legacy custom `PlayButton` with the `VideoPlayer` component for
a consistent video playback experience. Applied changes across multiple
components and integrations.
2025-10-15 17:06:40 -04:00
Jack Hsu f37c13b5a8 docs(nx-dev): add missing custom events back (#33082)
This PR adds 404 and header custom events back for docs. These were
previously in the Next.js docs pages, but were missing when we migrated
to Astro.

The `sendCustomEvent` and `sendPageEvent` functions did not account for
the way that Astro is configured via `window.__CONFIG` object, so this
PR fixes those too.

## Screenshots

I ran these in preview mode with the site built with
`COOKIEBOT_DISABlED=true`.

Custom page view on 404:

<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 10
05 PM"
src="https://github.com/user-attachments/assets/5bbe30fc-56cb-4427-b138-56edcf3bbc71"
/>

Header docs CTA event:
<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 13
02 PM"
src="https://github.com/user-attachments/assets/246cb99d-0a30-4d94-a4a3-8f8659062f23"
/>

Header `Try Cloud` CTA event:
<img width="2672" height="1527" alt="Screenshot 2025-10-15 at 3 10
10 PM"
src="https://github.com/user-attachments/assets/addd2645-cf3e-4c83-ae39-9f00a434a21d"
/>
2025-10-15 15:50:14 -04:00
Colum Ferry fde5908aa7 feat(module-federation): support TS Soln and Package Manager workspaces paradigms (#33056)
## Current Behavior
Using TS Soln Workspaces and/or Packaage Manager Workspaces, handling of
certain workflows and scenarios is not correct.

Detecting and Sharing Workspace Libraries relies entirely on TS Path
Aliases existing in the base TSConfig file.
All guidance also points towards adding Workspace Libraries as
dependencies or devDependencies within the consuming application's
package.json file.
This also does not allow correct configuration of sharing.

Meanwhile, TS Path Aliases are added for remote applications such that
TS can find them in consuming applications, while also being able to
provide Typing Support.
However, this has an increased build-time cost for TS compilation as it
will follow the path in source.

## Expected Behavior
Allow attaching Workspace Libraries as deps in the package.json of host
and remote applications.
Configure packages added in such a manner correctly for share scope in
Module Federation.

Attach Remote applications to Host applications via devDependencies in
package.json.
Configure the `exports` and `main, types` properties in the remote
application's package.json to point to the `src/remote-entry.ts` file
such that node resolution can correctly follow the paths.
Bundler will continue to strip this out of compilation and replace with
Module Federation Module Loading code.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-15 19:56:40 +01:00
Colum Ferry 762685ce88 fix(release): ensure multilines in breaking changes are rendered by changelog renderer (#33070)
## Current Behavior

When rendering changelogs for releases, breaking changes with multi-line
explanations
  are not formatted correctly:

1. Only the first line of a breaking change explanation is captured and
rendered
2. PR references (like `#33014`) are missing from breaking change
entries, making it
  difficult to trace back to the original PR
3. Multi-paragraph breaking changes lose their formatting and structure

  For example, a breaking change with this format:
  BREAKING CHANGE: The --legacy-peer-deps behavior is no longer forced.
  If you need it, configure your package manager to enforce it.

  Would only render the first line, and without the PR reference.

  ## Expected Behavior

  The changelog renderer should:

1. Capture and render all lines of a breaking change explanation, not
just the first
  line
  2. Include PR/commit references in the breaking change section (e.g.,
  `([#33014](url))`)
3. Properly indent multi-line and multi-paragraph breaking changes for
better
  readability
4. Maintain consistent formatting between the feature/fix entry and its
corresponding
  breaking change entry

  Example of correct output:
  ```markdown
  ### ⚠️  Breaking Changes

- **misc:** The `--legacy-peer-deps` behavior is no longer forced.
([#33014](url))

    If you need it, configure your package manager to enforce it.
```
2025-10-15 16:54:47 +01:00
Louie Weng ffe85e9a56 chore(gradle): add verbose logging flag specifically for gradle plguin (#33049)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

`NX_VERBOSE_LOGGING` turns on/off the debug logs for the gradle plugin

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

`NX_GRADLE_VERBOSE_LOGGING` turns on/off the debug logs for the gradle
plugin

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-15 09:31:27 -04:00
Juri Strumpflohner 9cefa648f2 docs(nx-dev): restore GA event tracking (#33074)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-15 09:23:57 -04:00
Craigory Coppola 82acc84b3c fix(core): ensure --help works properly with infix notation (#32662)
## Current Behavior
Running `nx run nx:test --help` and `nx test nx --help` behave
differently

## Expected Behavior
They are equivalent

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-14 17:17:50 -04:00
Craigory Coppola 60b353a54f fix(core): temporarily disable tui for run-one (#33048)
## Current Behavior
The tui is enabled even for a single task, and it currently doesn't
bring a lot of value for those single-task use cases

## Expected Behavior
The tui is disabled for single task runs.
2025-10-14 17:12:13 -04:00
Juri 807e2d2c24 docs(nx-dev): blog post about pr bottleneck problem 2025-10-14 18:46:43 +02:00
Leosvel Pérez Espinosa 8881e4233c fix(core): display bottom corner indicator of tui in progress section correctly (#32985)
## Current Behavior

The bottom corner indicator of the in-progress section in the TUI is not
displayed when there are more tasks in progress than the maximum
parallel capacity (this can occur when there are continuous tasks).

## Expected Behavior

The bottom corner indicator of the in-progress section in the TUI should
always be displayed at the end of the running tasks.
2025-10-14 11:45:20 -04:00
Leosvel Pérez Espinosa 6a104c520e fix(misc)!: don't set legacy-peer-deps by default (#33014)
## Current Behavior

The `--legacy-peer-deps` behavior is forced by Nx to try to account for
potential incompatible peer deps users might have.

## Expected Behavior

Nx shouldn't force the `--legacy-peer-deps` behavior. Users can easily
set this up by configuring the package manager they use.

## Related Issue(s)

Fixes #22066
Fixes #29537

BREAKING CHANGE: The `--legacy-peer-deps` behavior is no longer forced.
If you need it, configure your package manager to enforce it.
2025-10-14 11:42:57 -04:00
Caleb Ukle 61b2796257 fix(nx-dev): handle null github data (#33061)
technically the fix to plugin stats now showing up was expired GH token.
But refactored the plugin stats fetching to skip locally unless
NX_DOCS_PLUGIN_STATS env var is set to help speed up local serves/builds
since 99% of the time we're not concerned with the plugin-registry page.
along with trying to centralized the logic between 1st/3rd party plugins
since it was a little confusing from my initial impl.
2025-10-14 09:46:36 -05:00
Colum Ferry aac830971d fix(react): dynamic module federation should not initialize remoteUrlDefinitions to empty object (#33059)
## Current Behavior

The `remoteUrlDefinitions` variable in
`packages/react/mf/dynamic-federation.ts` is
  initialized as an empty object (`{}`), which causes:
1. The `resolveRemoteUrl` callback is never called because
`remoteUrlDefinitions` is
  always truthy
2. When `loadRemoteModule` is called before `setRemoteDefinitions`,
users get a cryptic
error "Cannot read properties of undefined (reading 'endsWith')" instead
of the
  helpful error message

  ## Expected Behavior

- `resolveRemoteUrl` should be called when provided and
`remoteUrlDefinitions` hasn't
  been set
- The helpful error message should be shown when `loadRemoteModule` is
called before
  setup

  ## Changes Made

Applied the same fix from PR #27927 (for Angular) to the React
implementation:
- Changed `remoteUrlDefinitions` initialization to be `undefined` by
default
- Added nullish coalescing operator (`??=`) in `setRemoteDefinition` to
initialize only
   when needed

  ## Related Issue(s)

  Fixes #33055

This follows the same pattern as PR #27927 which fixed #27793 and #27842
for Angular.
2025-10-14 15:04:16 +01:00
Juri a150d9fd4c docs(nx-dev): self-healing ci update blog post 2025-10-14 11:14:13 +02:00
Philip Fulcher c802c6f1e5 docs(nx-dev): fixes for recent posts (#33065)
- **docs(nx-dev): fix typo in webinar title**
- **docs(nx-dev): remove reference to right click context menu in
highlights article**
2025-10-13 17:11:00 -05:00
Philip Fulcher 14efeffb9d docs(nx-dev): add october 2025 webinar (#33064)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-13 17:03:29 -04:00
Rares Matei ddccfaa549 docs(nx-cloud): update release notes (#33043)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-13 16:54:22 +00:00
Philip Fulcher af74f824ff docs(nx-dev): add 21.6 changelog and october highlights article (#33036) 2025-10-13 11:27:01 -04:00
Caleb Ukle f425526fd2 fix(nx-dev): respect NX_DEV_URL in sitemap checker (#33058)
Sitemap in CI can have different `NX_DEV_URL` values which can make the
link checker work locally but not in CI
2025-10-13 09:52:07 -05:00
Rares Matei d37d8252e4 chore(repo): temporarily point repo to snapshot (#33046)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-13 13:03:55 +01:00
Rares Matei 31765c6995 docs(nx-cloud): remove note about saml license (#33034)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-13 11:15:10 +01:00
Caleb Ukle bfaa91bbc3 fix(nx-dev): update nextjs internal-link-checker to include astro urls (#33045)
blog and marketing pages will still link to astro docs, so depend on the
astro sitemap to check all links available to be used.
NOTE: the specific header links (url fragments) are skipped for pages
that come from astro docs (prefixed with /docs) due to not having a
simple way to create these lists without parsing all the build html
files out and that's not the part we really care about

confirmed working https://github.com/nrwl/nx/pull/33042 and
https://github.com/nrwl/nx/pull/33036 which are blocked until this
change merges

Fixes DOC-264
2025-10-10 14:25:43 -04:00
Caleb Ukle f85fdff1a9 docs(angular): update ng tutorial to match nx cloud templates (#33027)
fixes DOC-233
2025-10-10 13:28:52 -04:00
James Henry f35cfc1c82 fix(release): skip filtered out groups when processing (#33044) 2025-10-10 20:41:08 +04:00
Colum Ferry 0ba5f2d9de feat(release)!: refactor releaseTag* properties to a releaseTag object (#33020)
## Current Behavior

The Nx release configuration currently uses 5 separate flat properties
for release tag
  configuration:
  - `releaseTagPattern`
  - `releaseTagPatternCheckAllBranchesWhen`
  - `releaseTagPatternRequireSemver`
  - `releaseTagPatternPreferDockerVersion`
  - `releaseTagPatternStrictPreid`

This flat structure makes the configuration verbose and harder to
organize, especially
  as more release tag options are added.

  Example of current configuration:
  ```json
  {
    "release": {
      "releaseTagPattern": "{projectName}@{version}",
      "releaseTagPatternRequireSemver": true,
      "releaseTagPatternStrictPreid": false
    }
  }
```

## Expected Behavior

  After this PR, all release tag-related configuration is consolidated into a single
  nested releaseTag object with the following structure:
  - releaseTag.pattern (was releaseTagPattern)
  - releaseTag.checkAllBranchesWhen (was releaseTagPatternCheckAllBranchesWhen)
  - releaseTag.requireSemver (was releaseTagPatternRequireSemver)
  - releaseTag.preferDockerVersion (was releaseTagPatternPreferDockerVersion)
  - releaseTag.strictPreid (was releaseTagPatternStrictPreid)

  Example of new configuration:
```
  {
    "release": {
      "releaseTag": {
        "pattern": "{projectName}@{version}",
        "requireSemver": true,
        "strictPreid": false
      }
    }
  }
```

  Migration & Backward Compatibility:
  - An automatic migration transforms old configurations to the new structure
  - Old flat properties are deprecated but still supported during the migration period
  - The deprecated properties will be removed in Nx 23
  - All internal code has been updated to use the new nested structure

BREAKING CHANGE: This is a breaking change in the preferred configuration structure. Existing configurations will continue to work through the migration period, but users should update to the new nested format.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-10 14:11:56 +01:00
Colum Ferry 6c024a2207 feat(release)!: set updateDependents to always by default (#33029)
## Current Behavior

When versioning independent projects in Nx release, the updateDependents
configuration
defaults to 'auto'. This means that dependents are updated (with a patch
version bump)
when a dependency is versioned, as long as a group or projects filter is
not applied
  that does not include them.

With 'auto', if you apply a filter that excludes dependents, they won't
be updated even
   though their dependencies have been versioned.

## Expected Behavior

The updateDependents configuration now defaults to 'always'. This means
that dependents
will always be updated (with a patch version bump) when a dependency is
versioned,
  even if they are not included in the group or projects filter.

This provides more predictable behavior and ensures that versioned
dependencies don't
cause version mismatches with their dependents, which could lead to
broken builds or
  runtime issues.

BREAKING CHANGE: Users who relied on the previous 'auto' behavior can
explicitly set `updateDependents: 'auto'` in their nx.json:
```json
  {
    "release": {
      "version": {
        "updateDependents": "auto"
      }
    }
  }
```
2025-10-10 14:11:35 +01:00
MaxKless 0050a811ab feat(core): expose registerProjectGraphRecomputationListener from daemon client (#33005) 2025-10-10 12:40:05 +02:00
Miroslav Jonaš a8c266f5b8 docs(nx-dev): improve stop-agents-on-failure info (#32969)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The current `stop-agents-on-failure` description is confusing customers
as they are expecting agents to be shut down after the first failure

## Expected Behavior
The `stop-agents-on-failure` description clearly distincts between task
and command failure.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-10 12:23:15 +02:00
Caleb Ukle 451572afd3 docs(nx-cloud): update docs for conformance v4 (#32988)
update docs to include information over conformance v4 including new
testing guide
fixes DOC-226
fixes DOC-182
2025-10-09 23:57:15 -05:00
Victor Savkin e2eb44ca40 chore(repo): auto apply more fixes (#33039)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-09 21:36:37 -04:00
Jack Hsu d6a4caa9b5 docs(linter): show options for module boundary rule in flat config (#33038)
Show the same options for flat config as we do for legacy config.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-09 18:05:42 -04:00
Caleb Ukle 475e7277f6 docs(nx-dev): update merge-reports guide to account for stricter tsconfigs (#33037)
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-09 17:05:25 -05:00
Jack Hsu 4a62cbecd2 docs(misc): allow embeddings to generate from new docs (#33035)
This PR adds support for generating embeddings using docs in the
`astro-docs` folder. The embeddings are used for `docs_search` MCP tool,
and we currently do not populate new content into it.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-09 17:51:18 -04:00
Jason Jean 3417e78460 chore(repo): update nx to 22.0.0-beta.4 (#33016)
Updating Nx from 22.0.0-beta.2 to 22.0.0-beta.4
2025-10-08 16:50:52 -04:00
Colum Ferry 05ab516eb7 chore(release): move workspace specific tests to own file (#33006)
Add additional e2e tests for Nx Release to ensure functionality with
both workspace-enabled repos and non-workspce enabled repos.
2025-10-08 17:56:44 +01:00
Jack Hsu 412a55d012 docs(nx-dev): skip check for NEXT_PUBLIC_ASTRO_URL during graph creation just in case (#33019)
This PR skips check for the required env var during graph creation.
Although it only happens when `NODE_ENV === 'production'` it is possible
that this is set as such, which would cause an error.
2025-10-08 12:49:46 -04:00
Jack Hsu ea1f1cb4d0 fix(testing): show warning instead of error when no blob outputs found during merge (#33022)
The blob outputs could be missing because CI or user ran `affected -t
e2e-ci` and the changeset did not affect e2e tests, thus no reports
generated. In this case, intead of erroring we should just log out a
warning so users know what happened.
<img width="1252" height="212" alt="image"
src="https://github.com/user-attachments/assets/a90f1f93-0d49-4976-8fa6-a40d2a46161a"
/>
2025-10-08 12:49:36 -04:00
Caleb Ukle c24a76bc3e docs(nx-cloud): fix invalid use of yaml anchors (#33017)
cannot use yaml anchors in merging arrays, only objects
init-steps is an array of steps therefore cannot use the `<<*` syntax

Fixes DOC-262
2025-10-08 10:23:18 -05:00
Jack Hsu 6cf618efaf docs(misc): update Tailwind CSS guides for React and Angular to not mention the generator (#33015)
The generator `setup-tailwind` is outdated and not necessary. You can
easily set up Tailwind yourself in 1 minute. Keep the pages around
because people do search for tailwind in our docs.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-08 11:12:49 -04:00
Craigory Coppola b7a291f8c1 chore(repo): add dotnet commit scope (#32975)
## Current Behavior
The PR to add the .NET plugin is failing because it uses the scope
`dotnet`, and that has to be present in master since the pr-title-checks
workflow validates against scopes in master.

## Expected Behavior
The scope is in master

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-08 11:08:39 -04:00
Shai Reznik 82b26adb8a feat(vite): add buildable libs support for vitest (#32973)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
In the vite nxTsConfigPaths plugin, when using `buildLibsFromSource:
false`, it has no effect when running vitest.

This is an issue especially in large nx projects when running vitest
browser mode because it has a potential to load all the files from the
entire project using the vite dev server (if no modules mocking is being
used).

This increases the amount of time vitest runs substantially.

Plus, there is no way for vite plugin authors to reuse the same
generated tsconfig file (the one generated by nx that points to the
`dist/` folder path) and reuse this information to configure TypeScript
for example.

One example that comes to mind is analog's angular-vite-plugin, meaning
even if nx supported it, that plugin wouldn't be able to know where is
the generated tsconfig is.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

I expect to be able to use `buildLibsFromSource: false` in my vitest
browser mode tests and reduce the amount of time it takes to run those
tests in large scale projects.

In one of my benchmarks I managed to reduce tests from over 1 minute to
9 seconds (!) with this option enabled.

In order to share the generated tsconfig path I've added another
environment variable called `process.env.NX_GENERATED_TSCONFIG_PATH`

Please let me know if this should be added to the documentation
somewhere and if so where, and I'll add it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
2025-10-08 15:35:17 +01:00
James Henry 55c0ce2685 feat(release)!: release graph aware filtering, updateDependents can now be "always" (#32971)
When release groups changed to become more flexible and powerful, with
`updateDependents` tracing across any number of transitive release
groups, the logic for filtering (e.g. `--projects` and `--groups` on the
CLI) was never updated to reflect this new dynamism and complexity.

Now in this PR, release graph construction has been fully separated out
from the release-group-processor. It now lives in the new
`ReleaseGraph`. This is also now where filtering takes place so that the
filters can be fully graph aware.

There is additionally a new `always` option available for
`updateDependents` in addition to `auto` and `never` which are
unchanged. `always` means that a project's dependents will be updated
wherever they may live in the graph, regardless of whether or not they
were directly included within a project or graph filter. We feel that
this is what people want most of the time so this is also going to
become the default in a follow up breaking change PR. In order to be
easier to review, and to increase confidence in this refactor, this PR
does not yet make that change to leave as many tests as possible
untouched (other than utilities changing).

BREAKING CHANGE: The signature of `init()` on `VersionActions` has
changed, it no longer accepts a second argument. Validation of the
manifest files, if any, now takes place via a separate method
(`validate()`) call after construction of the new `ReleaseGraph`. For
the most part, users do not need custom `VersionActions` so only a small
percentage of consumers should be impacted.

Fixes https://github.com/nrwl/nx/issues/31273
2025-10-08 18:22:30 +04:00
Juri 897e2ea6f6 docs(nx-cloud): de-emphasize console because it is not a requirement 2025-10-08 14:09:48 +02:00
Colum Ferry fd0a1f65af fix(release): ensure schema for release.groups is correct (#33007)
## Current Behavior
Currently the `nx-schema.json` is enforcing a `groups: properites` type
when it should be `groups: Record<string, properties>`

## Expected Behavior
Update `nx-schema.json` to have `release.groups: Record<string,
propeties>`
2025-10-08 12:42:37 +01:00
Colum Ferry 58b666aa55 feat(release): add releaseTagPatternPreferDockerVersion to specify version to use for git tag #32900 (#32972) 2025-10-08 14:31:35 +04:00
Colum Ferry 90f908579e feat(nest): ensure dependencies are added to project's package.json #32548 (#32986)
## Current Behavior
NestJS dependencies are not added to the project's package.json leading
to issues when pruning lockfile for dockerfiles.

## Expected Behavior
Ensure NestJS dependencies are added to the project's package.json.

## Related Issue(s)

Fixes #32548
2025-10-08 10:30:36 +01:00
Nikola Kalinov 8f8f804823 fix(vite): enable build watch mode by default for preview (#31604) (#31623)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
`nx preview <app>` does not enable watch mode on the build.
This used to be the case until (I think)
https://github.com/nrwl/nx/pull/20367

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
`nx preview <app>` should also enable watch mode and rebuild on files
change.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

FYI: I also had to apply [this config
change](https://github.com/vitejs/vite/issues/19410#issuecomment-2655507784)
for Vite 6 to unstuck from "Rebuilding project...". Maybe it's just my
project, not sure but in any case those are 2 separate issues.

Fixes #31604
2025-10-08 09:32:22 +01:00
MaxKless 95fee9f718 feat(core): add --check=all flag to configure-ai-agents (#32968) 2025-10-08 09:17:24 +02:00
Jack Hsu 895d7da162 docs(nx-dev): remove NEXT_PUBLIC_ASTRO_URL environment variable checks (#32999)
The codebase contains conditional logic based on `NEXT_PUBLIC_ASTRO_URL`
environment variable to support both old Next.js docs and new Astro docs
paths.

Since the migration to Astro is complete, the checks aren't needed.

Also add support for different `NX_DEV_URL` avalues for the Astro docs
so canary docs don't point to prod website, for example. (`footer.tsx`
and `Header.astro`).

Note: The changes are largely just removing the var check. Some files of
interest are:
- astro-docs/src/components/layout/Header.astro
- nx-dev/ui-common/src/lib/footer.tsx
- nx-dev/nx-dev/next.config.js
- nx-dev/nx-dev/redirect-rules.js

Also note that plugin registry and doc viewer should no longer be used.
Once we don't need the Next.js app anymore, we can just delete the
project rather than removing it right now. For now, just set `noindex`.

Closes DOC-161, DOC-230

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-07 20:51:12 -04:00
Louie Weng 48f24566c2 feat(nx-cloud): update description on nx login and logout (#31344)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Fixed the description of the commands to not have raw markdown when
running `npx nx login help`. Also updated the description such that we
don't specifically mention `cloud.nx.app` as not all users will be using
this environment by default.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 22:02:42 +00:00
Leosvel Pérez Espinosa bcaeed7b3a fix(core): remove duplicated "Running" string from tui title (#32991)
## Current Behavior

The TUI title displays `Running Running ...` in its title.

## Expected Behavior

The TUI title should not display `Running` duplicated in its title.
2025-10-07 16:34:57 -04:00
Jason Jean 01d5f3fe42 fix(repo): fix pr releases to not depend on a broken range (#32993)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

PR releases are being released with a range of `-1 - 1` which is
incorrect

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

PR releases have a peer dependency on just that PR release.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 19:25:25 +00:00
Craigory Coppola b96cfd325a feat(core)!: remove CreateNodes v1 types for Nx 22 (#32951)
Remove the old CreateNodes v1 signature and related types from the
public API.
This standardizes on CreateNodesV2 as the primary interface.

Related to Nx 22 createNodes v2 compatibility work.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com><!-- Please make sure you
have read the submission guidelines before posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-07 15:22:47 -04:00
Juri 91f517e819 chore(repo): enable astro-docs validate-links to be autofixed 2025-10-07 21:19:29 +02:00
Jason Jean 756a538775 fix(core): remove requirement to be in a package manager workspace (#32992)
## Current Behavior
<!-- This is the behavior we have today -->

Workspaces that did not use package manager workspaces lost some
dependencies with the other fix.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Workspaces that do not use package manager workspaces will still get the
correct dependencies.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-07 15:14:27 -04:00
Colum Ferry ef563d80a6 fix(vite): ensure tsconfig file is resolved from workspaceRoot #31987 (#32990)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
When resolving the tsconfig file, project root is always used,
regardless of cwd.
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Prepend workspaceRoot to force absolute path resolution 

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31987
2025-10-07 18:03:23 +01:00
Rares Matei 24a703e4b8 chore(repo): run hanging e2e tests serially (#32982)
- **chore(repo): split remaining long e2e tests (#32948)**
- **chore(repo): run hanging tests serially**
- **chore(repo): bust cache to test changes**

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

https://linear.app/nxdev/issue/CLOUD-3753/hanging-tests

Fixes CLOUD-3753
2025-10-07 12:26:37 -04:00
Caleb Ukle 08b0dfd9c1 docs(testing): add generic guide over feature based testing (#32979)
- add feature based testing guide
- add option to show all nodes w/ affected styles
2025-10-07 11:35:49 -04:00
MaxKless 7ed71e58bc fix(core): repair repo root on setupAiAgents in nx init (#32984) 2025-10-07 14:39:09 +02:00
Colum Ferry ff4426205f feat(release)!: set preserveMatchingDependencyRanges to true by default (#32983) 2025-10-07 16:16:14 +04:00
Caleb Ukle 7d19ba7027 docs(nx-plugin): add callout for local plugin name (#32976)
Clarify which name should be used when calling a local plugin

Fixes DOC-232

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-06 15:29:29 -05:00
Jack Hsu 738b06b30a feat(bundling): add excludeFromExternal option to esbuild executor (#32980)
This PR adds an option to allow users to include certain third-party
deps in the bundle by specifying the `excludeFromExternal` option. There
is an existing `thirdParty: true` option that Nx Console uses to bundle
_all_ third-party deps in the bundle, but the new option is more
granular.

## Current Behavior
Nx automatically detects certain dependencies (like optional peer
dependencies) and marks them as external. Users have no way to override
this behavior when they want to bundle these packages instead.

## Expected Behavior
Users can specify an `excludeFromExternal` option to exclude specific
packages from the external list, allowing them to be bundled even if Nx
automatically detected them as external.

## Related Issue(s)
Closes #NXC-2532

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-06 20:12:48 +00:00
Rares Matei e642155ac5 chore(repo): split remaining long e2e tests (#32948)
e2e-react: 19m 44s → 11m 04s | -8m 40s (43.9% faster)
e2e-workspace-create: 9m 36s → 6m 27s | -3m 9s (32.8% faster)
e2e-esbuild: 7m 48s → 4m 34s | -3m 14s (41.5% faster)
2025-10-06 19:29:03 +01:00
Colum Ferry 8f2220036d fix(nextjs): update entrypoints for buildable library with vite to include server entry #31457 (#32977)
## Current Behavior
When creating a buildable library for Next w/ Vite, we do not configure
an additional entry point for server components.

## Expected Behavior
Ensure additional server entry point is configured.

## Related Issue(s)

Fixes #31457
2025-10-06 18:19:41 +01:00
Colum Ferry 975c4c387c feat(release)!: switch defaults for fixed release group tag pattern, preserve matching dependency ranges and strictPreid (#32878)
Behaviour changes introduced:
- `preserveMatchingDependencyRanges` set to `true` by default
- `releaseTagPatternStrictPreid` set to `true` by default
- `releaseTagPattern` for fixed release groups set to
`{releaseGroupName}-v{version}`

BREAKING CHANGE
2025-10-06 16:20:27 +01:00
nx-cloud[bot] 0149fac877 fix(nx-cloud): update broken documentation links to AI features 2025-10-06 16:37:15 +02:00
Juri 1e0bfc698e docs(nx-cloud): refactor nx-cloud ai concept page 2025-10-06 16:37:15 +02:00
Juri e77293876b docs(nx-cloud): update various AI docs pages 2025-10-06 16:37:15 +02:00
Juri 6e137262ea docs(core): update AI setup instructions 2025-10-06 16:37:15 +02:00
Colum Ferry 48e17bc53c fix(angular-rspack): do not parse json with babel #32690 (#32966)
## Current Behavior
JSON files are not being filtered from transform with the
JavascriptTransformer.

## Expected Behavior
Only handle JS/TS files with the JavascriptTransformer.

## Related Issue(s)

Fixes #32690
2025-10-06 13:02:40 +01:00
Colum Ferry a09bb0020e chore(release): cleanup leftovers after removing legacy versioning (#32964) 2025-10-06 14:45:06 +04:00
Terry Mun-Andersen 9ca711fb85 fix(core): upgrade axios to 1.12.0 to address CVE-2025-58754 (#32712)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Nx is currently using a vulnerable version of axios (<1.12.0) which has
a reported high-level vulnerability
[CVE-2025-58754](https://www.cve.org/CVERecord?id=CVE-2025-58754). This
is being flagged by GitHub Advanced Security on a Nx-powered monorepo:

<img width="1260" height="712" alt="Screenshot 2025-09-12 at 09 42 56"
src="https://github.com/user-attachments/assets/251b47c7-07d1-4c21-aafb-0811554d8861"
/>

## Expected Behavior
Nx should be using a patched version of axios (≥1.12.0) that addresses
said vulnerability.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-10-06 11:20:34 +01:00
Mischa Fischer 8670f2df97 fix(remix): @nx/remix/package.json export typo fixed #32810 (#32940)
## Current Behavior
Error on install in node_modules folder.
[ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in
/Volumes/ssd/user/Dev/project/node_modules/@nx/remix/package.json
      at exportsNotFound (node:internal/modules/esm/resolve:313:10)

## Expected Behavior
Can install without error.

## Related Issue(s)
* [@nx/remix package.json is broken due to export
misspelling](https://github.com/nrwl/nx/issues/32810)

Fixes #32810
2025-10-06 10:32:17 +01:00
Jack Hsu 844bbb213d docs(linter): show flat config in docs (#32953)
We show legacy eslintrc format that's been deprecated and shouldn't be
used anymore. We still want to document the legacy format in case users
haven't switched yet.

---------

Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-10-04 01:19:31 +00:00
Juri 1d687c4994 fix(nextjs): remove whitespace for newly generated server component 2025-10-03 19:25:39 +02:00
Colum Ferry 6f1086f1ec feat(release)!: remove deprecated legacy versioning (#32888)
Remove deprecated legacy versioning support

BREAKING CHANGE

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-03 12:01:01 -04:00
Jack Hsu 836034172c chore(repo): disable duplicated typecheck targets if the project already uses tsc to build (#32926)
This PR removes redundant `typecheck` targets from projects already
building with `tsc`.

- Add `addTypecheckTarget: false` to projects using `tsc` as
`build-base`.
- Exclude `e2e` and `nx-dev` projects from having `tsc` build inferred
but leave the `typecheck` target

Note: angular-rspack and angular-rspack-compiler has an issue where
`@nx/vite/plugin` is inferring the typecheck target. We may want to
check `addTypecheckTarget` for that plugin as well.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->
Closes NXC-3208
2025-10-03 11:38:05 -04:00
Colum Ferry a520306949 feat(release)!: match nx affected behavior to determine relevant conventional commits (#32915)
## Current Behavior
Nx Release currently only checks for commits with affected files changed
under the root of projects configured for release.
However, changes to other files may affect and invalidate these projects
also.

## Expected Behavior
Reuse Nx's affected logic to determine when commits contain changes that
affect the projects configured for release.

BREAKING CHANGE: More files are now being used to determine relevant
commits, meaning there is higher chance for projects to receive version
bumps

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-03 16:01:48 +01:00
Jack Hsu fcf01c9579 docs(core): align remote cache docs with implementation (#32945)
Fix docs so it aligns with remote cache implementation.
## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32870
2025-10-03 10:28:49 -04:00
Jack Hsu edec724e5d docs(nx-dev): add missing redirect (#32941)
Add a redirect that we missed.

Closes #32532
2025-10-03 09:07:11 -04:00
Jason Jean c7e9941b4f chore(repo): fix task inputs for nx:build (#32939)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The inputs for nx:build did not have transitive true for it's node
inputs

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The inputs for nx:build did not have transitive true for it's node
inputs

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-03 08:13:21 -04:00
Jack Hsu 57d9ca98c7 chore(repo): prevent conflicts when more than one process runs npx playwright install (#32934)
The install command will fail on Linux machines due to `apt` command
only allowing one invocation at a time. This PR solves this by writing
lock and status files to coordinate between potentially many tests on
the same machine.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-02 21:13:55 -04:00
Jonathan Cammisuli c99ac81d39 chore(misc): do not ai fix "check-commit" tasks (#32925) 2025-10-02 17:45:39 -04:00
Jason Jean 2f55bcb70b chore(repo): update nx to 22.0.0-beta.2 (#32936)
Updating Nx from 22.0.0-beta.1 to 22.0.0-beta.2
2025-10-02 16:21:44 -04:00
Jack Hsu 3bac12451e docs(misc): add search tracking to replace Algolia analytics (#32937)
Set up search analytics for docs.
## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Closes DOC-220

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-10-02 16:20:26 -04:00
Zoran Kokeza 07e3166ab6 fix(bundling): postcss-cli-resources should handle relative deploy url #32714 (#32762)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Relative deploy URL is not being handled correctly in the
postcss-cli-resources Plugins for Webpack and Rspack after switching to
use WHATWG URL in favour of the url.resolve() method.

## Expected Behavior
Ensure the relative deploy URL is properly resolved when using relative
paths

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #32714
2025-10-02 16:55:05 +01:00
Rares Matei 15e3ed53f5 chore(repo): split slow e2e tests (#32893)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-02 09:17:09 -04:00
Leosvel Pérez Espinosa f198e9218a fix(core): ensure nx is published with the correct dependency version for the native packages (#32928)
## Current Behavior

The `nx` package is being published with the native package dependencies
using an invalid version range `"*"`.

## Expected Behavior

The `nx` package should be published with the native package
dependencies pointing to the same version as the `nx` package.

A recent change to `nx release` requires workspace packages to be
identified as such when deciding to replace the version.

## Related Issue(s)

Fixes #32898
2025-10-02 08:54:10 -04:00
MaxKless 359f08d6af fix(core): tweak configure-ai-agents prompt (#32914)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-10-02 13:15:46 +02:00
Leosvel Pérez Espinosa f303577805 chore(repo): update binary versions in lockfile (#32927)
Update the outdated binary versions in the lockfile.
2025-10-02 09:03:03 +00:00
Jason Jean 385a62a918 chore(repo): update nx to 22.0.0-beta.0 (#32918)
Updating Nx from 21.6.1-rc.0 to 22.0.0-beta.0
2025-10-02 08:31:24 +02:00
Jason Jean e28a97aaeb cleanup(core): clean up file change type for affected (#32920)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

These fields were not being used and it takes time to calculate.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The fields are removed.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 16:03:57 -04:00
Jack Hsu 58231a5a1a docs(misc): improve conformance documentation discoverability (#32922)
This PR updates our module boundary feature/rule pages such that:
- It is clear that the feature is for both JS/TS projects (ESLint) and
any language (conformance)
- Update links to the ESLint rule from feature page to the actual ESLint
rule page (since feature covers both ESLint and Conformance now)
- Add a "Why" section to the conformance overview page

The conformance page (`docs/enterprise/powerpack/conformance`) is meant
to be the main landing page that we send to users. Also updates the
Enterprise page so link to the overview page.

<img width="1024" height="459" alt="image"
src="https://github.com/user-attachments/assets/c24f110d-cc44-41c8-b448-56d4a246a7b6"
/>

## Updated Pages

- /docs/features/enforce-module-boundaries
- /docs/enterprise/powerpack/conformance
-
/docs/technologies/eslint/eslint-plugin/guides/enforce-module-boundaries
- /docs/reference/powerpack/conformance/overview
- /docs/enterprise/polygraph#conformance
- /enterprise

## Notes
The `/docs/enterprise/powerpack/conformance` and
`/docs/reference/powerpack/conformance/overview` have some overlaps,
where the latter documents all the API options. We should look at
cleaning both the conformance and owners reference pages such that they
are just API docs.

## Related Issue(s)
Closes DOC-206

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-01 15:50:30 -04:00
Jason Jean f04ac29215 cleanup(devkit): move the ignore object creation to nx (#32907)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Devkit creates the ignore object using the `ignore` package. Nx also
creates the ignore object.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Only `nx` creates the ignore object using the `ignore` package. Devkit
utilizes a util from nx.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 14:32:21 -04:00
Jason Jean e5ac4a8024 fix(core): optimize task hashing with BFS and performance logging (#32911)
## Summary

Optimizes `get_dep_output` by replacing recursive traversal with BFS +
parallel processing.

**Key optimization**: The old recursive implementation processed the
same task multiple times when it appeared in multiple dependency paths
(diamond dependencies). The new implementation:
- Uses BFS with a visited HashSet to process each task exactly once
- Collects all tasks first, then processes them in parallel with Rayon
- Returns task references directly, eliminating redundant HashMap
lookups

This deduplicates work and leverages parallelism, significantly
improving performance on large task graphs.

**Note**: Only processes regular dependencies, not
continuous_dependencies, since continuous tasks (like watch/serve) don't
produce outputs that need to be hashed.

The same test on my machine without these changes takes many minutes
before crashing my editor. Now it takes <3ms.

## Test plan

-  All Rust tests passing
-  Native module builds successfully  
-  Added 4 unit tests covering direct dependencies, transitive
dependencies, diamond deduplication, and task output filtering
-  Added performance test verifying large graphs (depth 30 = 90 tasks)
complete in <10ms
2025-10-01 13:27:28 -04:00
Jason Jean ac711feeaa chore(misc): remove committed tsbuildinfo files and add to gitignore (#32921)
## Current Behavior

TypeScript build info files (*.tsbuildinfo) are currently committed to
git in several e2e test directories:
- e2e/release/tsconfig.tsbuildinfo
- e2e/remix/tsconfig.tsbuildinfo
- e2e/rollup/tsconfig.tsbuildinfo
- e2e/storybook/tsconfig.tsbuildinfo

These are generated build artifacts that should not be tracked in
version control.

## Expected Behavior

Build info files should be ignored by git and not committed to the
repository.

## Related Issue(s)

N/A - General housekeeping to clean up committed build artifacts
2025-10-01 13:06:51 -04:00
MaxKless b863bc1686 fix(core): improve provenance error with custom registry information (#32903)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The provenance error pops up frequently for custom registries and it can
be confusing.

## Expected Behavior
With an updated error message, it's clearer what's going on and how to
fix it. This is what it looks like for a custom registry:
``` 
NX   The migrate command failed.


NX   An error occurred while checking the provenance of nx@21.10.5-provenance.
This might be due to a custom registry configuration (http://localhost:4874/). Please check whether provenance is correctly configured for your registry. 
To disable this check at your own risk, you can set the NX_SKIP_PROVENANCE_CHECK environment variable to true.
 ```
2025-10-01 12:23:53 -04:00
Leosvel Pérez Espinosa c7400eb08c fix(js): temporarily hash all external dependencies for tasks inferred by the @nx/js/typescript plugin (#32912)
## Current Behavior

Tasks inferred by the `@nx/js/typescript` plugin can result in a cache
hit when the public API (`.d.ts` files) of external deps changes. This
is incorrect.

Those tasks correctly have an input `dependentTasksOutputFiles:
'**/*.d.ts'`, but that only covers local workspace dependencies, not
external dependencies.

## Expected Behavior

Tasks inferred by the `@nx/js/typescript` plugin should result in a
cache miss when the public API (`.d.ts` files) of external deps changes.
The `tsc -b` command would invalidate its own cache when any dependency
(local or external) `.d.ts` files change, and the Nx cache should do the
same.

This is a temporary workaround that will more aggressively invalidate
the cache, but it's safer than having false positives. We'll work on a
proper solution that will only hash `.d.ts` files from external
dependencies. Once we have it, we'll revert this change so that the
inputs are as surgical as possible while still being safe.
2025-10-01 16:22:43 +00:00
Caleb Ukle ecfc503532 fix(nx-dev): update credit pricing link to new docs page (#32899)
fix bad link to the credit pricing page from next site -> astro docs

Fixes DOC-245
2025-10-01 12:19:33 -04:00
Caleb Ukle 443b714095 fix(nx-dev): watch for theme changes for project/task graph components (#32885)
markdoc graph components were not updating the theme if the user changed
their theme preference causing contrast issues with graph content.
now the graph components will update the selected them when the system
theme or pages theme changes

also do not render title bar if no title is provided

fixes: DOC-237
2025-10-01 12:19:20 -04:00
Caleb Ukle a9b7ea5cd5 fix(nx-dev): provide message to check previous docs w/ empty migrations (#32919)
Since Nx only keeps the last 2 majors listed in a plugins
migration.json, it's possible migrations can be defined and a valid
link, but a new nx version will removed those migrations now causing the
page to 404 a link that previously worked.

instead of 404-ing when plugin migrations delete old versions of
migrations we provide a message stating that there are no migrations,
but you can check the previous versions of the docs to check if the
migration you need is listed here.

We still will not include the migrations link in the sidebar when the
migration.json does not contain any migrations.

Example:
<img width="780" height="425" alt="image"
src="https://github.com/user-attachments/assets/de27c4f7-1442-44e6-9005-970450cabe1e"
/>


Fixes DOC-251

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-10-01 14:34:26 +00:00
Colum Ferry 783380c801 chore(release): cleanup parseGitCommit to separate version plan commit into parseVersionPlanCommit (#32902)
Split `parseGitCommit` version plan functionality into
`parseVersionPlanCommit`
2025-10-01 15:18:13 +01:00
Caleb Ukle ae37f0bc39 fix(nx-dev): improve default zoom level of graph nodes in docs (#32910)
- remove side_by_side and the usage of cards grid for graph views
- re-center project/task graphs on render to better fit into view
- also updating the height of a few usages of the graph for when there
was a tall stack of nodes to better fit
- NOTE: we can still apply custom node styles if we want, but since the
complaint was just the default render size bc zoom level, I decided to
just resize the view for the elements.

before: 

![wm_2025-09-30T16-49-08@2x](https://github.com/user-attachments/assets/fb740063-6cff-4892-b164-e0a5cc168a8a)


after: 

![wm_2025-09-30T16-48-41@2x](https://github.com/user-attachments/assets/c2d54dd2-13bf-45bb-b8c0-153fb277526a)


fixes: DOC-248
2025-10-01 09:01:47 -05:00
Jack Hsu 0ef9be8295 feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32917)
This reverts commit 5f4a0fe852.

The previous PR was erroneously merged into `master` for 21.6.x, so we
had to revert it. This PR brings it back for 22.
2025-10-01 09:54:56 -04:00
Jason Jean 54dc25978d feat(misc): remove migrations prior to v20 (#32904)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

There are migrations for v19.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Migrations prior to v20 (v19 and below) are cleaned up. Users migrating
from Nx 19 will have to do it piece meal by going to Nx 20 first, then
they will be able to go straight to Nx 22.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-10-01 09:45:21 -04:00
Leosvel Pérez Espinosa 22c57e465c feat(misc)!: remove deprecated decorate-cli script and stop sorting tsconfig paths by default (#32781)
- Remove the deprecated `decorate-cli` script.
- Stop sorting TypeScript path mappings by default in `nx format` and
generators.

BREAKING CHANGE: The long-deprecated `decorate-cli` script has been
removed.
BREAKING CHANGE: The `nx format` command and generators no longer
default to sorting TypeScript path mappings. To keep the previous
behavior, pass the `--sort-root-tsconfig-paths` flag to the command or
set `NX_FORMAT_SORT_TSCONFIG_PATHS=true`.
2025-10-01 06:40:58 +00:00
Caleb Ukle 1bea9138b7 docs(nx-dev): require description for doc pages (#32908)
add description to all docs and make required to make index views not
render differently

<img width="804" height="669" alt="image"
src="https://github.com/user-attachments/assets/4ecf6a24-13b7-4223-bcd3-c3db50007740"
/>


closes: DOC-246
2025-09-30 16:48:13 -05:00
Leosvel Pérez Espinosa e14440857a feat(core)!: remove NX_DISABLE_DB environment variable (#32887) 2025-09-30 15:53:43 -04:00
Benjamin Cabanes 726594c286 docs(nx-dev): integrate Calendly forms with Hubspot forms (#32906)
Added support for Calendly form integration within Hubspot forms across
multiple components.
2025-09-30 19:43:03 +00:00
FrozenPandaz 6b86c33c30 feat(devkit): bump compatibility to Nx 21 - 23 2025-09-30 13:50:10 -04:00
MaxKless d651d17a06 feat(core): prompt for ai agent files on nx init (#32889) 2025-09-30 17:46:47 +00:00
Benjamin Cabanes 9a038e9b8e chore(nx-dev): update team (#32896)
Update the team.
2025-09-30 10:30:38 -04:00
Jack Hsu 9660df4352 docs(testing): update task splitting docs to be more generic rather t…han just for e2e tasks (#32897)
Update language on task splitting docs. Fix broken anchor link for
Java/Gradle test distribution.
2025-09-30 14:25:10 +00:00
Jack Hsu bcfdd01e85 docs(nx-dev): add missing redirects (#32895)
This PR adds redirects that we missed when we did the
technologies/core-api reorg, so now they're not redirecting correctly to
astro docs.
2025-09-30 10:02:14 -04:00
Colum Ferry a24f4167b7 chore(core): update workspace snapshot tests to be correct (#32890)
Fix snapshots
2025-09-30 12:17:53 +01:00
Leosvel Pérez Espinosa a9a17be0e0 feat(js)!: remove the experimental and deprecated inlining feature from the tsc and swc executors (#32783)
## Current Behavior

The experimental inlining feature in the `@nx/js:tsc` and `@nx/js:swc`
executors is deprecated.

## Expected Behavior

The experimental inlining feature in the `@nx/js:tsc` and `@nx/js:swc`
executors should be removed.

BREAKING CHANGE: The experimental inlining feature in the `@nx/js:tsc`
and `@nx/js:swc` executors was removed. A migration will remove the
related options (`external` and `externalBuildTargets`). Still, if you
use or rely on the feature, you need to make your dependencies buildable
or use a different build tool with bundling capabilities.
2025-09-29 18:24:57 -04:00
Colum Ferry 264593b46b fix(bundling): ensure tsconfig options are respected with rollup-typescript-plugin (#32816)
## Current Behavior
The configuration of the `@rollup/typescript-plugin` is incorrect and
overrides options provided by tsconfig.
It also doesn't respect options from the tsconfig file.

## Expected Behavior
Ensure tsconfig options are respected and not implicitly overriden.
2025-09-29 18:24:57 -04:00
Jack Hsu 4f9eeb4fb1 feat(webpack)!: remove deprecated deleteOutputPath and sassImplementation options (#32828)
The webpack package contains deprecated options that were marked with
TODO(v22) comments for removal:
- deleteOutputPath option
- sassImplementation option

These deprecated options were still being referenced in the codebase and
schema files, potentially causing confusion for users.

Remove the deprecated options from the webpack package to clean up the
API for v22:
- Remove deleteOutputPath option from the webpack executor and related
configurations (use Webpack's output.clean option instead)
- Remove sassImplementation option from the webpack executor and related
configurations (sass-embedded is now the default)
- Add a migration to automatically update existing workspaces that use
these deprecated options

Closes NXC-3108

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Colum Ferry 92ab08882c feat(rspack)!: remove deprecated deleteOutputPath and sassImplementation options (#32756)
## Current Behavior

The rspack package contains deprecated options that were marked with
TODO(v22) comments for
  removal:
- deleteOutputPath option in the rspack executor schema (Line 79 in
models.ts)
- sassImplementation option in the rspack executor schema (Line 164 in
models.ts)

These deprecated options were still being referenced in the codebase and
schema files,
  potentially causing confusion for users.

 ## Expected Behavior

Remove the deprecated options from the rspack package to clean up the
API for v22:
- Remove deleteOutputPath option from the rspack executor and related
configurations
- Remove sassImplementation option from the rspack executor and related
configurations
- Add a migration to automatically update existing workspaces that use
these deprecated options

##  Related Issue(s)
Resolves NXC-3112

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Jack Hsu 45681f30ba feat(react): keep deprecated @nx/react/bundle-rollup module since there is not a replacement when using @nx/rollup:rollup executor (#32821)
There isn't a replacement for `bundle-rollup` since the rollup executor
does not support isolated configs. This module ensures that existing
projects will continue to work.
2025-09-29 18:24:57 -04:00
Jack Hsu 29707d6e79 feat(react): remove support for non-isolated webpack config in ponentTestingPreset (#32787)
This PR removes an unnecessary logic for React component testing via
Cypress. We've made it not possible to have optional webpack configs a
while back (i.e. non-isolated config support). This means that even
legacy users _must_ have a webpack config using `composePlugin(...)`.
Thus, pass the options to that plugin function and things will continue
to work as usual for those users.
2025-09-29 18:24:57 -04:00
Colum Ferry 1b4b64d1d3 feat(rspack)!: remove application generator in favour of framework-specific options (#32755)
Remove the Rspack Application Generator in favour of generators from
`@nx/react`, `@nx/angular` and other plugins with app generators.

Resolves NXC-3109
2025-09-29 18:24:57 -04:00
Colum Ferry ccd33ba5c7 feat(bundling)!: change default useLegacyTypescriptPlugin to false for v22 (#32754)
The default TypeScript plugin for Rollup has changed from
rollup-plugin-typescript2 to @rollup/plugin-typescript. To continue
using the legacy plugin, explicitly set useLegacyTypescriptPlugin: true
in your configuration.

Resolves NXC-3094

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-29 18:24:57 -04:00
Jack Hsu 856d7d2b46 fix(core)!: remove deprecated simpleName option from library generators (#32716)
The deprecated simpleName option has been removed from the library
generators for Angular, React, Nest, and JS packages. Use the --name
option to provide the exact name for the library.

BREAKING CHANGE: simpleName option is no longer supported in library
generators

Closes NXC-3107, NXC-3098, NXC-3093, NXC-3111
2025-09-29 18:24:57 -04:00
Jack Hsu 5f4a0fe852 Revert "feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32843) (#32882)
This reverts commit 2e9b5430bb. This is
meant for v22 not 21.6.
2025-09-29 16:35:12 -04:00
Jack Hsu 405d91d977 docs(misc): fix graph/pdv tags to not conflict with other code blocks (#32881)
This PR fixes an issue with new docs where graph or PDV tag with inner
JSON content will cause formatting issues with other code blocks on the
page.

Rather than using `<slot/>` to render the inner code fence, which seems
to not play well with the rest of the page, we instead skip rendering
the inner content altogether, and pass the data as `astroRawData` to the
underlying React component. This removes the need to handle
HTML/attribute parsing, so it is much cleaner in addition to resolving
conflicts.

Note: Also fixed some of the previous JSON content as they were invalid.
2025-09-29 15:43:05 -04:00
Jason Jean a8373f1a74 chore(repo): update nx to 21.6.1-rc.0 (#32873)
Updating Nx from 21.6.1-beta.4 to 21.6.1-rc.0
2025-09-29 13:54:37 -04:00
Jack Hsu 2e9b5430bb feat(webpack)!: remove SVGR option and provide withSvgr composable function (#32843)
BREAKING CHANGE: The svgr option has been removed from withReact,
NxReactWebpackPlugin, and withNx (for Next.js). Projects that need SVGR
support should now use the new withSvgr composable function from
@nx/react.

For React webpack projects:
- Import withSvgr from '@nx/react'
- Add withSvgr() to your composePlugins chain after withReact()

For Next.js projects:
- Add SVGR webpack configuration directly to your next.config.js

Migrations have been provided to automatically update existing
configurations.

Closes NXC-3106

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-29 13:48:58 -04:00
Jason Jean 8887ae0e08 fix(core): spinner shows correct plugin count during project graph creation (#32871)
## Current Behavior

The spinners shown during project graph creation display incorrect
plugin counts. They show the total number of registered plugins instead
of the actual number of plugins being processed for each specific phase.

For example, if there are 10 total plugins but only 3 have
`createDependencies`, the spinner would incorrectly show "Creating
project graph dependencies with 10 plugins" instead of "Creating project
graph dependencies with 3 plugins".

## Expected Behavior

Spinners should show accurate counts reflecting the actual number of
plugins being executed for each phase of project graph creation.

## Related Issue(s)

This fixes a misleading user experience where users see progress
indicators that don't match the actual work being performed.

## Changes Made

### 1. Dependencies Phase
- Use `createDependencyPlugins.length` instead of `plugins.length` for
spinner count

### 2. Metadata Phase  
- Filter plugins once for `createMetadata` capability
- Use filtered count for spinner
- Eliminate double filtering by using filtered array directly in
processing

### 3. Create Nodes Phase
- Filter plugins once for `createNodes[0]` pattern existence
- Use filtered count for spinner
- Eliminate redundant pattern check in loop

## Benefits

- **Accurate Progress**: Users see correct plugin counts during each
phase
- **Better Performance**: Eliminated redundant filtering operations
- **Consistent Code**: All three phases now follow the same pattern of
filter-once-use-everywhere
2025-09-29 13:47:07 -04:00
MaxKless cd32388903 fix(core): tweak messaging if vscode / cursor aren't installed (#32877)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The messaging can be confusing if vscode/cursor are installed but not
added to PATH.

## Expected Behavior
The messaging is clearer.
2025-09-29 13:46:54 -04:00
Caleb Ukle d09b519d7a docs(nx-dev): cleanup nx-cloud cli ref doc (#32866)
- fix usage of asides mdoc syntax
- updated codeblock frames
- added assignment-rules arg
2025-09-29 10:10:16 -05:00
Colum Ferry 5be7b38619 fix(rspack): mark svgr support as deprecated (#32861)
## Current Behavior
`svgr` support has been deprecated in `webpack` for some time, but it
was never marked as deprecated for `rspack`.

## Expected Behavior
Mark `svgr` support as deprecated with aim for removal in v23
2025-09-29 14:15:38 +01:00
Jason Jean 7f4a8eaf86 fix(repo): remove duplicate permissions block in publish workflow (#32868)
## Current Behavior

The publish workflow has a duplicate `permissions` block incorrectly
nested under a GitHub script action step, which causes a syntax error in
the GitHub Actions workflow.

## Expected Behavior

The workflow should run without syntax errors. The `permissions` block
should only be defined at the job level, not within individual steps.

## Related Issue(s)

This fixes a GitHub Actions workflow syntax issue where permissions were
incorrectly nested under a step action.

The `pull-requests: write` permission is already correctly defined at
the job level (lines 510-513), so the duplicated permissions block under
the step was unnecessary and causing errors.

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-09-26 15:38:38 -04:00
Colum Ferry ad032add38 fix(core): project graph creation processes project dependencies correctly (#32784)
## Current Behavior

The project graph build process incorrectly handles dependencies when
workspace projects have
different versions or are referenced via specific version ranges. This
causes several issues:

1. NPM lockfile parser crashes when encountering symlinked nested
dependencies in workspaces
  (which don't have versions)
2. Package.json dependencies that reference workspace projects with
specific versions (e.g.,
"proj4": "1.0.0" when workspace has "version": "2.0.0") incorrectly
resolve to the workspace
  project instead of the installed npm package
3. Version ranges and file references to workspace projects are not
properly validated

 ## Expected Behavior

  The dependency resolution should:
- Handle symlinked workspace packages in npm lockfiles without crashing
- Correctly differentiate between workspace projects and npm packages
when specific versions are
   referenced
- Properly validate version ranges against workspace package versions
using semver
- Support file references (e.g., "file:../proj6") for workspace
dependencies
- Only resolve to workspace projects when the version constraint is
satisfied or when using
  wildcards

## Notes
This has inadvertently caused issues when calculating which manifest
files need to be updated in the JSVersionActions / Nx Release for Npm
Packages

## Related Issues

Fixes #31454

---------

Co-authored-by: FrozenPandaz <jasonjean1993@gmail.com>
2025-09-26 14:13:11 -04:00
Colum Ferry 5d953a42c2 fix(nest): setup tsconfig to use decorators #30749 (#32859)
## Current Behavior
NestJS libraries using decorators in constructor, or otherwise, are
causing TS errors due to missing configuration for decorators.

## Expected Behavior
Ensure decorator config settings are set in `tsconfig.lib.json`.

## Related Issue(s)

Fixes #30749
2025-09-26 14:10:28 -04:00
Jack Hsu e2a79862a6 chore(repo): restore PR release functionality (#32839)
This PR brings back PR releases.

---------

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-26 17:30:24 +00:00
MaxKless c54727dd53 feat(core): add configure-ai-agents command (#32825)
This pull request introduces support for configuring specific AI agents
in Nx workspaces, allowing users to select which agents to set up and
generating only the relevant configuration files for those agents. It
also updates documentation, schemas, and tests to reflect this new, more
flexible approach.

The most important changes are:

**Agent Selection and Configuration:**
* Added the ability to specify which AI agents to configure via an
`agents` array, both in the setup schema (`schema.json`) and the
`CreateWorkspaceOptions` type. The supported agents are: `claude`,
`gemini`, `codex`, `cursor`, and `copilot`. The generator only creates
configuration files for the selected agents, rather than all by default.
[[1]](diffhunk://#diff-f4d0a6778d70986b54028fb1a5a9338ad4db252edd6db4066e7ee87e8d7f28a5R22-R30)
[[2]](diffhunk://#diff-8141dbb37440f99a460b1e23d0c7229cd16338984832faf528d0ff23de179766R40-R50)
[[3]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R89-R121)

* Implemented prompt logic for selecting AI agents interactively during
workspace creation, and exposed available agent types for use in prompts
and configuration.
[[1]](diffhunk://#diff-672af9097acda13d133130b660df34e6ddf6a61a74f9a6d66832255123e8f9b9R16)
[[2]](diffhunk://#diff-672af9097acda13d133130b660df34e6ddf6a61a74f9a6d66832255123e8f9b9R75-R119)

**File Generation Logic:**
* Refactored the `setupAiAgentsGenerator` implementation to generate
only the files relevant to the specified agents (e.g., `CLAUDE.md`,
`.mcp.json` for Claude; `.gemini/settings.json` for Gemini; `AGENTS.md`
for others), and to append to existing files rather than overwrite them.
[[1]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R1-R45)
[[2]](diffhunk://#diff-ed4e3e85dbc5d3358491bcef52a8f403a9607df8c874ec9dadef7cd2a1eba6c7R89-R121)

* Added new utility functions for determining config file paths and
reading agent-specific configuration, improving maintainability and
clarity of file handling logic.
2025-09-26 13:17:43 -04:00
Miroslav Jonaš 05227d73c5 feat(core): add id, start and end time to lifecycle hooks (#32583)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Pre and post hooks lack corellation Id which might make it difficult to
culculate stats for task using pre and post hooks.
Additionally, post hook does not expose the duration or time span for
the task. Using pre/post hook might not be precise enough.

## Expected Behavior
Hooks expose the unique taskId so we can corellate pre hook of a task to
the post hook of the same task. Post hook should expose start and end
time of the task run.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Resolves discussion
[31076](https://github.com/nrwl/nx/discussions/31076)
2025-09-26 17:55:51 +02:00
Benjamin Cabanes 65a216bfe2 feat(nx-dev): enhance UI animations & statistics display (#32863)
Refactored multiple components to integrate `motion` animations for a
smoother UI experience. Implemented `AnimateValue` for animated
statistic values across various sections and improved readability by
replacing `JSX.Element` with `ReactElement` where applicable.
2025-09-26 11:03:48 -04:00
Miroslav Jonaš 65fab5bb4c feat(core): improve split target to support Gradle format (#32766)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-26 14:55:49 +00:00
Colum Ferry 3bcf014cb3 chore(web): ensure readme is published (#32858)
## Current Behavior
The `README.md` file for `@nx/web` is currently not copied into the
publish directory for release.

## Expected Behavior
Ensure the `README.md` file is copied into the publish directory.

## Related Issue(s)

Fixes NXC-3055
2025-09-26 14:54:20 +01:00
Leosvel Pérez Espinosa 6c109d2c20 fix(core): add env var to disable fetching migration metadata from registry (#32850)
Add a new `NX_MIGRATE_SKIP_REGISTRY_FETCH` environment variable to opt
out of fetching package versions and migrations metadata from the
registry and instead, use package installation to get the information.
2025-09-26 14:10:57 +02:00
Jonathan Gelin 5ea2e47acf fix(core): display prettier valid errors (#32771)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When running `nx format:check`, if there is an error, it is considered
as files not formatted correctly
But if Prettier is throwing a real error, it is not diplayed. We just
see an empty result without information

For example:

Format check failing with empty result
```
nx format:check


```

But when running the command, we can see the error:
```
node "/node_modules/prettier/bin/prettier.cjs" --list-different "packages/lib/.spec.swcrc" 
packages/lib/.spec.swcrc
[error] No parser could be inferred for file "/packages/lib/.spec.swcrc".
```

## Expected Behavior
I should see the prettier error to understand why it is failing

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-25 21:38:32 -04:00
Jack Hsu b6d5f38691 fix(gradle): skip targets on Netlify since the Java version is too old (#32852)
Building on Netlify fails.

```
3:03:48 PM: FAILURE: Build failed with an exception.
3:03:48 PM: * What went wrong:
3:03:48 PM: A problem occurred configuring root project 'nx'.
3:03:48 PM: > Could not resolve all artifacts for configuration 'classpath'.
3:03:48 PM:    > Could not resolve dev.nx.gradle:project-graph:0.1.7.
3:03:48 PM:      Required by:
3:03:48 PM:          root project : > dev.nx.gradle.project-graph:dev.nx.gradle.project-graph.gradle.plugin:0.1.7
3:03:48 PM:       > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.
3:03:48 PM:    > Could not resolve com.ncorti.ktfmt.gradle:plugin:0.24.0.
3:03:48 PM:      Required by:
3:03:48 PM:          root project : > com.ncorti.ktfmt.gradle:com.ncorti.ktfmt.gradle.gradle.plugin:0.24.0
3:03:48 PM:       > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.
3:03:48 PM: * Try:
3:03:48 PM: > Run this build using a Java 17 or newer JVM.
3:03:48 PM: > Run with --stacktrace option to get the stack trace.
3:03:48 PM: > Run with --debug option to get more log output.
3:03:48 PM: > Run with --scan to get full insights.
3:03:48 PM: > Get more help at https://help.gradle.org.
3:03:48 PM: BUILD FAILED in 30s
```

## Current Behavior
Gradle plugin needs Java 17, but Netlify uses 8.

## Expected Behavior
Skip targets on Netlify just like on Vercel.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #NXC-3175
2025-09-25 16:30:35 -04:00
Jason Jean 6480d3d6d1 chore(repo): update nx to 21.6.1-beta.4 (#32848)
Updating Nx from 21.6.1-beta.3 to 21.6.1-beta.4
2025-09-25 15:01:48 -04:00
Philip Fulcher a6755caff8 chore(nx-dev): remove September webinar notifiers (#32846) 2025-09-25 13:38:43 -05:00
Caleb Ukle 2a6bb23701 docs(nx-dev): explain how to correctly re-run jobs with manual DTE (#32844)
fixes: DOC-201
2025-09-25 10:34:37 -05:00
Caleb Ukle c0ad4843d1 docs(nx-dev): small docs cleanup (#32822)
- add prettier overrides for mdoc files to be treaded as markdown (along
with running format)
- update links to nx-commands refs to use correct header links
- fix link on quickstart page to point to CI feature overview
2025-09-24 15:39:08 -05:00
Louie Weng 5856e01a2c chore(repo): update publish pipelines with java (#32795)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

- Bump version of gradle plugin to V2
- Add java to publish pipelines so that we can build the gradle plugin.
- Removed files from freeBSD VM to prevent disk storage limit issues
- Bumped up the kotlin version of gradle projects such that kotlin can
build on freeBSD

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-24 13:07:16 -07:00
Jack Hsu bd1b689b06 docs(misc): minor styling fixes (#32840)
This PR fixes a few styling issues

## Anchor links colors being consistent inside asides:

https://github.com/user-attachments/assets/13ba7892-50ee-4429-b9f5-8587f65869de

## Mobile login border color on light theme (make it lighter and same as
other border colors):
<img width="325" height="279" alt="Screenshot 2025-09-24 at 10 34 56 AM"
src="https://github.com/user-attachments/assets/b2ca3246-5a11-491c-8240-68a0e4430c81"
/>

## Decrease font size for tabs:
<img width="676" height="319" alt="Screenshot 2025-09-24 at 10 38 38 AM"
src="https://github.com/user-attachments/assets/5a7dc828-f049-4b25-9b28-144969fd810f"
/>

## Remove extra margin-bottom for code lines in asides:
Before:

<img width="743" height="387" alt="image"
src="https://github.com/user-attachments/assets/55312f0a-acc5-48e2-bcb2-3370d00ed05f"
/>

After:
<img width="828" height="467" alt="image"
src="https://github.com/user-attachments/assets/537f688a-61cf-444a-a512-84c611b80c43"
/>


Closes #DOC-227 #DOC-225
2025-09-24 15:21:22 -04:00
Leosvel Pérez Espinosa c9aa288d11 fix(core): prevent terminal pane scrolling on tasks list events (#32818)
## Current Behavior

The TUI had two distinct scrolling issues:

1. **Tasks List Events Scrolling**: Any tasks list event (scrolling,
arrow keys, task status changes) would cause the terminal pane to scroll
down exactly 8 lines in two batches of 4 - one immediately and another
after ~200ms delay.

2. **New Task Initial Positioning**: When navigating to a task for the
first time, the task output would render 4 lines above the bottom
position, then automatically scroll to the correct bottom position after
a short delay.

## Expected Behavior

1. Tasks list navigation and events should not cause any scrolling in
the terminal pane
2. Task output should appear correctly positioned at the bottom from the
first render without any delayed scroll adjustments

---

## Technical Details

### Root Cause

**Issue 1 - Tasks List Events Scrolling (8 lines)**

- Task list events triggered `debounce_pty_resize()` calls
- This caused immediate resize + 200ms delayed resize
- Each resize applied 4-line scroll adjustments due to dimension
recalculations
- Result: 8 lines total scroll (4 immediate + 4 delayed)

**Issue 2 - New Task Initial Positioning (4 lines)**

- New PTY instances created with default dimensions (24×80)
- Terminal panes had different calculated dimensions (e.g., 22×137)
- Viewport height mismatch caused content to appear 4 lines up from
bottom
- Delayed resize would correct positioning, causing visible
scroll-to-bottom

### Solution

**Architectural Improvement**: Migrated from individual dimension fields
to shared dimensions using `Arc<RwLock<(u16, u16)>>` to ensure
consistency across all PTY references.

**Issue 1 Fix**: Removed redundant `debounce_pty_resize()` calls during
task navigation events, eliminating the double-resize pattern.

**Issue 2 Fix**: Added immediate dimension correction in
`render_terminal_pane_internal()` to ensure correct positioning from
first render.

### Changes Made

- **pty.rs**: Replaced individual `rows`/`cols` fields with shared
`dimensions: Arc<RwLock<(u16, u16)>>`
- **app.rs**: Added immediate resize in
`render_terminal_pane_internal()` for correct initial positioning
- **app.rs**: Removed redundant `debounce_pty_resize()` calls during
task navigation events
- Improved error handling and eliminated potential deadlock risks in
resize operations

### Performance Impact

- Eliminated double-resize pattern during navigation (~67% reduction in
resize operations)
- No more visible scrolling delays or positioning issues
- Maintained all layout change functionality while removing unnecessary
operations
2025-09-24 16:55:05 +00:00
Leosvel Pérez Espinosa 72dd9fe0b6 fix(core): do not add cache_outputs foreign key to task_details when NX_DISABLE_DB=true (#32824)
## Current Behavior

The `cache_outputs` table is always created with a foreign key to the
`task_details` table. When `NX_DISABLE_DB=true` is set, the
`task_details` table is not created, and this results in an error when
trying to insert any records in the `cache_outputs` table.

## Expected Behavior

When `NX_DISABLE_DB=true` is set, the `cache_outputs` table should not
have a foreign key to the non-existent `task_details` table.

## Related Issue(s)

Fixes #32208
2025-09-24 10:12:26 -04:00
Leosvel Pérez Espinosa a0e0e1ce1f fix(core): do not show placeholder parallel entries in tui when filtering (#32837) 2025-09-24 09:44:33 -04:00
MaxKless c915527eee fix(core): move from execFile to exec for windows support (#32836)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
provenance checks fail on latest on windows because `npm.cmd` is only
executable with a shell. That removes the entire security aspect of
using `execFile` so we just go back to `exec`.

## Expected Behavior
provenance checks shouldn't fail on windows.

## Related Issue(s)

Fixes #32713
2025-09-24 09:34:48 -04:00
Caleb Ukle 57c5c6acd2 docs(nx-dev): document playwright output merging w/ atomizer (#32830)
fixes: DOC-208

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-24 07:04:26 -05:00
Benjamin Cabanes 146f57748c chore(nx-dev): update active contributors (#32831)
Increased the maximum number of active contributors mentioned in the
pricing description from 30 to 50 in the `Pricing` component
(`nx-dev/ui-cloud/src/lib/pricing.tsx`).
2025-09-23 15:27:48 -04:00
Chau Tran 19fff53cd2 fix(graph): update graph package (#32829)
- update project list control to have checkbox style
- remove selection animation
2025-09-23 14:19:23 -05:00
Caleb Ukle 9e47fed9c9 docs(nx-dev): mention saml is ent feature in google auth doc (#32823)
fixes: DOC-228
2025-09-23 12:44:03 -05:00
Juri 5e0bcae9ef feat(nx-dev): change login button to try nx cloud 2025-09-23 18:09:37 +02:00
Juri 7fa83cd416 chore(repo): enable auto-apply fixes for self-healing 2025-09-23 16:44:40 +02:00
Colum Ferry e4ec3b3c97 fix(react): only add react router plugin when using react router #32525 (#32814)
## Current Behavior

The React init generator unconditionally adds the
@nx/react/router-plugin to the nx.json plugins
array whenever addPlugin is true. This causes the React Router plugin to
be added even for
React applications that don't use React Router, which is unnecessary and
can lead to unwanted
  behavior.

## Expected Behavior

  The React Router plugin should only be added to nx.json when:
1. The React application is actually using React Router (specifically
for SSR/RSC scenarios)
  2. The addPlugin option is true

  This ensures that:
  - Applications without React Router don't get the plugin unnecessarily
- Applications with React Router for SSR/RSC get the plugin
automatically when created with the
  --useReactRouter flag
  - Libraries never get the React Router plugin as they don't need it

## Related Issue(s)

  Fixes #32525
2025-09-23 14:17:01 +01:00
Leosvel Pérez Espinosa 79ac44d078 fix(misc): remove unnecessary bust property from plugin hashes (#32807)
Remove the manually maintained and unnecessary `bust` property from
plugin hashes.
2025-09-23 09:31:09 +02:00
Philip Fulcher ec07bfb843 docs(core): add changelogs for 21.4 and 21.5 (#32774)
https://nx-dev-git-philip-september-changelogs-nrwl.vercel.app/changelog
2025-09-22 20:49:07 -04:00
Caleb Ukle dbcafa0e8b docs(nx-dev): sync content from docs/ into astro docs (#32812)
- add missing NxModuleFederationPlugin page
2025-09-22 14:07:04 -05:00
Jack Hsu 4c17346bdb docs(misc): mark docs pages as noindex when using Astro docs (#32811)
If new docs are enabled, then mark the old ones as `noindex`. They
should already be redirected to new docs as well, but this helps
anything missed.
2025-09-22 14:06:18 -04:00
Jason Jean 5964b4a04c chore(repo): update nx to 21.6.1-beta.3 (#32799)
Updating Nx from 21.6.1-beta.2 to 21.6.1-beta.3

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-22 11:37:29 -04:00
Caleb Ukle ee6de8fae7 docs(nx-dev): initial round of search improvements (#32768)
update pagefind config to improve search hits
add weight and filter properties for docs to control individual pages

filter` allows selecting "type" of docs being searched

![wm_2025-09-18T16-48-23@2x](https://github.com/user-attachments/assets/13bc38b8-a52f-4efc-8eaf-3aef792357aa)

where weight can set the given pages search weight
unfortunately this will set the weight of the whole page content instead
which can make performance worse so important to use it sparingly.
current set values are trial and error based. and subject to change over
time really just depends on feedback over time of the search
performance.


fixes DOC-159
2025-09-22 13:38:24 +00:00
Juri f1b00ca610 fix(nx-dev): fix client-side redirect issue for OSS cloud plan form 2025-09-22 14:46:17 +02:00
MaxKless 6cf1d7a34d chore(repo): set up AGENTS.md with recommended rules (#32782)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
only claude has dedicated setup in the nx repo.

## Expected Behavior
Claude, Gemini and things that use AGENTS.md have dedicated setup in the
nx repo.
2025-09-19 22:27:46 -04:00
Miroslav Jonaš e3df4d2d86 chore(repo): add missing tsx (#32785)
## Current Behavior
The `tsx` package is missing causing TUI to hang in interactive mode.

## Expected Behavior
The `tsx` package is installed so commands running `npx tsx` don't need
to ask for a permission to install it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-19 22:27:22 -04:00
Louie Weng 816fa2b9a9 chore(repo): revert gradle v2 plugin (#32797)
Reverting gradle v2 plugin from Nx due to issues with publish pipelines
not being able to handle the new changes. Will re-apply once the kinks
in publish are ironed out.
2025-09-19 23:04:31 +00:00
James Henry bd6d5c8e66 fix(core): update tui title text structure (#32793) 2025-09-19 18:12:57 -04:00
Jack Hsu 369f162474 docs(nx-dev): fix AI chat streaming parse error by pinning ai package to v3.0.19 (#32792)
The AI chat on nx.dev shows an error 'Failed to parse stream string. No
separator found.' after successfully receiving a response from the API.

The AI chat should work without showing streaming parse errors after
successful responses.

Also fixed tailwind pruning by including `feature-ai` in the globs to
check.



https://github.com/user-attachments/assets/2517d856-7a45-48f4-b71b-885f3714fb44



Fixes DOC-216
2025-09-19 15:39:30 -04:00
Jack Hsu 133730b276 docs(nx-dev): add Algolia search to blog index when Astro docs are enabled (#32794)
When NEXT_PUBLIC_ASTRO_URL is set, the blog index now includes a
dedicated search box that filters results to only blog posts. This
ensures blog search functionality is maintained when the main docs
search is moved to the Astro site.

Blog index page has no search functionality when Astro docs are enabled,
making it difficult to find specific blog posts.

Blog index page displays a search box that searches only within blog
posts (using Algolia facet filter for 'Nx | Blog') when Astro docs are
enabled, preserving the ability to search blog content.

Without astro docs:

<img width="1162" height="733" alt="Screenshot 2025-09-19 at 2 26 34 PM"
src="https://github.com/user-attachments/assets/a499fb03-ecc6-4a4f-9303-2198e32f9a77"
/>

With astro docs:

<img width="1143" height="784" alt="Screenshot 2025-09-19 at 2 27 42 PM"
src="https://github.com/user-attachments/assets/4d0bfa7e-0ca6-4694-bba0-fc5e63d1b140"
/>


https://github.com/user-attachments/assets/fe96bc49-dafe-4bc6-9b89-578f29f93cf7



Fixes DOC-221
2025-09-19 15:39:20 -04:00
Jack Hsu 4d57e62ce8 chore(repo): disable pnpm install cache resolve-required-data job (#32791)
Fix publish pipeline by running `pnpm install` when using `setup-node`.
2025-09-19 17:30:25 +00:00
Louie Weng 55a16e625f chore(gradle): move all dependencies into version catalog and update gradle plugin (#32773)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

We were managing disparate versions across all gradle projects.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Centralize all plugins and dependencies into one location for easier
maintenance.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-19 12:39:27 -04:00
Jack Hsu 575e6a0534 feat(nx-dev): disable Algolia search on non-docs pages when Astro docs are enabled (#32789)
Algolia search appears on all nx-dev pages, including non-documentation
pages like AI chat and changelog, even when the new Astro documentation
site is enabled. This creates confusion as search should only be
available on documentation pages.

- When NEXT_PUBLIC_ASTRO_URL is set (indicating new docs are enabled),
Algolia search is disabled on all nx-dev pages
- Non-documentation pages (AI chat, changelog) use the non-documentation
header without search
- Documentation header only shows search when Astro docs are not enabled
- Clean up existing styling issues and ensure consistent header usage
across the site

- Updated documentation-header.tsx to conditionally hide search when
NEXT_PUBLIC_ASTRO_URL is set
- Updated header.tsx to pass showSearch prop based on
NEXT_PUBLIC_ASTRO_URL
- Modified AI chat page to use non-documentation header and fixed
styling issues
- Modified changelog page to use non-documentation header-
- Fixed astro header such that `Office Hours` and `Live Streams` are
replaced with `Nx Live` (already done on Next.js side)
- Fixed astro sidebar reference updater middleware formatting

## Examples

Non-docs headers (for homepage, blog, cloud, enterprise, etc.):

<img width="1349" height="103" alt="Screenshot 2025-09-19 at 11 49
06 AM"
src="https://github.com/user-attachments/assets/5a9e6355-43b9-4142-9c76-b30ccc4982b1"
/>

Changelog (with astro docs):

<img width="1467" height="1401" alt="Screenshot 2025-09-19 at 11 48
36 AM"
src="https://github.com/user-attachments/assets/8e135ca7-fe36-4b44-b181-633d3dc5890d"
/>

AI Chat (with astro docs):

<img width="1246" height="952" alt="Screenshot 2025-09-19 at 11 48
24 AM"
src="https://github.com/user-attachments/assets/866c7e4d-8eac-40ab-9c77-5d125135d4e9"
/>


Changelog (without astro docs);

<img width="1180" height="1132" alt="image"
src="https://github.com/user-attachments/assets/eccdeb17-08fc-4f90-949d-5c7879abe3d3"
/>

AI Chat (without astro docs):

<img width="1172" height="1407" alt="image"
src="https://github.com/user-attachments/assets/2ad6b797-32bc-498b-93cb-29cc368030f1"
/>


Astro docs header with updated `Nx Live` link:

<img width="685" height="434" alt="Screenshot 2025-09-19 at 11 48 51 AM"
src="https://github.com/user-attachments/assets/48facc87-2c90-4195-97c7-024b11112001"
/>




Fixes DOC-219

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-19 12:26:46 -04:00
Leosvel Pérez Espinosa af7ebee21e cleanup(graph): remove non-existent prop causing typecheck/build issues (#32780) 2025-09-19 09:10:56 -05:00
Jack Hsu fa5a1bf781 docs(misc): fix JSON parsing for project details with escaped quotes (#32778)
Fixed the `parseAstroHtmlWrappedJson` function used by PDV and graph tag
components to render code fence properly.

The problem was that inner HTML with code fence caused escaped
double-quotes (`\"`) to be improperly handled. By the time we read the
HTML via React props, the escape character is already done (`\`). Thus,
use code fence to let Starlight render the full block, and then parse
out the JSON object from the `[data-code]` attribute on the div.

For example, previously this would fail:

```
{% project_details %}
{ "foo": "\"bar\"" }
{% /project_details %}
```

That doesn't work because the HTML is just ""bar"", which is invalid.
But changing the above to this works:

````
{% project_details %}
```json
{ "foo": "\"bar\"" }
```
{% /project_details %}
````

This works because you get something like `data-code="&quot;foo&quot;:
&quot;\&quot;bar\&quot;&quot;"` set on the `div`. So we can use regexp
to match everything within that attribute and parse it out as JSON once
we convert some entities.

Check the
[`nx-dev/ui-markdoc/src/lib/utils/parse-astro-html-wrapped-json.ts`](https://github.com/nrwl/nx/pull/32778/files#diff-c3d8e90b624e30217beaa44c46a16b9053533cf9a8542a4f7301ccaf3dbdab58)
file for the full logic.

Also added JSON code fences to all graph tags in mdoc files to ensure
proper parsing.

<img width="709" height="866" alt="Screenshot 2025-09-18 at 3 41 26 PM"
src="https://github.com/user-attachments/assets/fdae86a6-929a-4a1f-82fe-7d4052de5db5"
/>

Closes #DOC-217
2025-09-19 09:01:48 -04:00
Caleb Ukle af12d6c1ee docs(nx-dev): fix broken blog/img links (#32777)
fixes DOC-218
2025-09-18 18:04:52 +00:00
Chau Tran c8ae15f08c feat(graph): unified graph UI and controls (#32724)
This PR migrates to the unified `@nx/graph` with UI and persisted url
graph state.
- new UI components 
- remove obsolete state machines code
- remove obsolete URL query parameters handling
2025-09-18 12:44:52 -05:00
Caleb Ukle befc6243b8 docs(nx-dev): small clean up items for styling and content (#32760)
remove duplicate installation tabs
<img width="826" height="598" alt="image"
src="https://github.com/user-attachments/assets/b3cef8e8-bb7e-4c5f-a734-fb7b3376dedc"
/>
add description to nx cloud getting started page
<img width="794" height="329" alt="image"
src="https://github.com/user-attachments/assets/6ea1ceeb-ab33-4a11-85b8-3073668d8bec"
/>
add spacing for graph component

![wm_2025-09-17T08-54-55@2x](https://github.com/user-attachments/assets/99aab88f-9dbc-4d29-8df2-dc42eb489b0e)
fix footer to link to correct site when astro url is configured

![wm_2025-09-17T08-58-47@2x](https://github.com/user-attachments/assets/3038d701-3bed-494a-9f8e-63d687b8fd7f)


Fixes DOC-211
Fixes DOC-214
Fixes DOC-212
2025-09-18 12:06:59 -05:00
Caleb Ukle 1542d9c822 docs(nx-dev): remove duplicated gh button (#32769)
![wm_2025-09-17T16-41-13@2x](https://github.com/user-attachments/assets/5e7cdd34-13b9-465b-92bc-ed5a577e86ba)


fixes DOC-215
2025-09-18 12:06:22 -05:00
Leosvel Pérez Espinosa dd5daeae0c fix(misc): add typescript output to the eslint ignore when needed (#32775)
## Current Behavior

When generating workspaces or projects with ESLint and using the TS
solution setup, the generated `out-tsc` directory for TS output is not
ignored in the ESLint configuration. This results in the lint task
processing and potentially reporting errors from that directory.

## Expected Behavior

When generating workspaces or projects with ESLint and using the TS
solution setup, the generated `out-tsc` directory for TS output should
be ignored in the ESLint configuration.
2025-09-18 16:57:21 +00:00
Leosvel Pérez Espinosa c73b2aada9 feat(testing): forward e2e-ci task options to their atomized tasks (#32765)
## Current Behavior

Options configured in the `e2e-ci` tasks are not forwarded to their
atomized tasks.

## Expected Behavior

Options configured in the `e2e-ci` tasks can be forwarded to their
atomized tasks.

The `@nx/cypress/plugin` and `@nx/playwright/plugin` plugins will infer
their `e2e-ci` dependencies to atomized tasks with `"options":
"forward"`.
2025-09-18 16:54:00 +00:00
Leosvel Pérez Espinosa 14e2bec60a fix(core): fix misc db-related issues (#32745)
This resolves multiple database-related race conditions that cause
"database is locked" errors and `BorrowMutError` panics during task
cleanup and service initialization.

## Issues Fixed

1. **Task cleanup race condition**: Exit handlers and cleanup methods in
the task orchestrator simultaneously attempted to remove the same task
record, causing SQLite lock contention
2. **Missing database retry logic**: Native operations bypassed the
existing retry mechanism, making them vulnerable to concurrent access
failures
3. **SQLite connection borrowing conflicts**: Direct connection access
in `NxTaskHistory::setup()` violated Rust's borrowing rules when other
services held concurrent borrows

## Solution

### Application-level coordination
- Added atomic check-and-remove pattern using `Map.delete()` return
value
- Only the process that successfully removes from the task map performs
the database operation
- Eliminates duplicate database calls entirely

### Database-level robustness
- Fixed `RunningTasksService` methods to use retry-enabled database
operations
- Replaced `prepare() + stmt.execute()` pattern with direct
`db.execute()` calls
- Ensures all operations benefit from exponential backoff retry logic
(up to 20 attempts)

### Connection access safety
- Moved `array::load_module` from service setup to centralized database
connection opening
- Removed direct `.conn` access that bypassed safe wrapper patterns
- Load array module once per connection instead of per service
instantiation

## Files Changed
- `packages/nx/src/tasks-runner/task-orchestrator.ts` - Race condition
prevention
- `packages/nx/src/native/tasks/running_tasks_service.rs` - Retry logic
fixes
- `packages/nx/src/native/db/initialize.rs` - Centralized array module
loading
- `packages/nx/src/native/tasks/task_history.rs` - Removed unsafe
connection access

Provides comprehensive concurrency safety through defense-in-depth:
prevents race conditions at the application level while ensuring
database operations are resilient to concurrent access.
2025-09-18 11:31:21 -04:00
Louie Weng 9d004a2783 fix(gradle): support custom test targets (#32728)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Currently we do not support overwriting the default test target since
with custom tests from Gradle. This means you cannot use a test suite
other than the default `test`.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

- We can now detect custom test suites via the Gradle API, which
receives the test tasks via the task type rather than the test name.
- We can atomize against test targets without having to set these
targets in the gradle plugin configuration
- Setting a custom test target that conflicts with a defined test suite
in Gradle now throws an error
- Check-ci correctly depends on all atomized targets of test targets

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #NXC-2962
2025-09-18 07:35:40 -07:00
Colum Ferry 36741d08d2 fix(angular-rspack): ensure assets extracted from stylesheets correctly #32487 (#32759)
## Current Behavior

When Angular components reference assets in their stylesheets using
`url()` (e.g., `background-image: url('../assets/test-pattern.svg')`),
the Nx Angular Rspack plugin processes the CSS but fails to extract and
copy the referenced asset files to the output directory. This results
in:

- CSS is processed and URLs may be rewritten to reference output paths
(e.g., `url('./media/test-pattern.svg')`)
- The actual asset files are never copied to the output directory
- Browser shows 404 errors for missing asset files when the application
runs
- No `media` directory is created in the build output

## Expected Behavior

With this fix, assets referenced in component stylesheets are now
properly extracted and emitted to the output directory:

- Asset files referenced in component stylesheets are extracted and
copied to the output directory
- CSS URLs are correctly rewritten to point to the copied assets
- No 404 errors occur for asset files
- A `media` directory is created in the output with the extracted assets
- Both inline and external component styles properly handle asset
extraction

## Related Issue(s)

Fixes #32487

## Changes Made

### Core Fix
- Modified the Angular Rspack plugin to properly collect and emit
stylesheet assets during the compilation process
- Added asset collection during both bundle file and inline style
processing in `setup-compilation.ts` and
`setup-with-angular-compilation.ts`
- Implemented asset emission in the `processAssets` hook of the Angular
Rspack plugin

### Test Coverage
- Added comprehensive example application
(`examples/angular-rspack/csr-css-assets`) that demonstrates:
  - External component stylesheets with asset references
  - Inline component styles with asset references
  - Various asset types (SVG, images)
  - Proper asset extraction and URL rewriting

### Technical Details
The fix addresses the gap between Angular's `ComponentStylesheetBundler`
which correctly processes assets and generates `outputFiles`, and the Nx
Angular Rspack plugin which now properly emits these files using
`compilation.emitAsset()` during the build process.
2025-09-18 11:19:36 +01:00
Jason Jean 63b5baae3a fix(core): do not shutdown daemon for project graph errors (#32764)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

All errors.. even Project Graph errors cause the daemon to shutdown.
This meant that showing partial graphs in the graph application no
longer worked.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Shutting down the daemon won't help for project graph errors. In this
case, we should not shutdown the daemon. And showing partial project
graphs will work again.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-17 16:33:55 -04:00
Philip Fulcher 6eab2d0c71 docs(nx-dev): add biome plugin creation article (#32742) 2025-09-17 16:09:40 -04:00
Jason Jean 93fcc48344 chore(repo): update nx to 21.6.1-beta.2 (#32753)
Updating Nx from 21.6.1-beta.1 to 21.6.1-beta.2
2025-09-17 10:23:57 -04:00
Leosvel Pérez Espinosa e5a7460e65 cleanup(core): do not detect the terminal theme unnecessarily when running native tests (#32757)
## Current Behavior

When running `pnpm nx test-native nx`, OSC (Operating System Command)
escape sequences appear after the test completes, displaying as random
characters like `10;rgb:f8f8/f8f8/f2f2` and `11;rgb:0000/2b2b/3636`.

## Expected Behavior

Test execution should complete cleanly without any escape sequences
appearing in the terminal.

## Root Cause

The issue occurs because:
1. Tests in `tasks_list.rs` create `TasksList` components for testing UI
functionality
2. `TasksList` accesses the `THEME` static for styling (e.g.,
`THEME.secondary_fg`)
3. `THEME` is a `LazyLock` that initializes by calling `is_dark_mode()`
4. `is_dark_mode()` uses `terminal_colorsaurus::color_scheme()` which
sends OSC queries to detect terminal colors
5. The test process often exits before the terminal responds, leaving
orphaned responses that appear as escape sequences

## Solution

Added compile-time conditional compilation to skip terminal color
detection during tests:
- `#[cfg(test)]`: Returns `true` (dark mode) without sending OSC
queries. Tests run in virtual buffers and don't need the terminal theme.
It's also less deterministic to have tests relying on the terminal
theme.
- `#[cfg(not(test))]`: Performs normal terminal detection for production
use

This approach:
-  Eliminates OSC sequences during test execution
-  Preserves normal color detection in production
-  Provides deterministic test behavior regardless of terminal theme
-  Improves test performance by avoiding I/O operations
2025-09-17 10:23:42 -04:00
Colum Ferry e4f1d267fb fix(angular-rspack): show correct file sizes in build stats for i18n builds (#32758)
When i18n localization is enabled, rspack generates assets with locale
prefixes
(e.g., 'fr/main.abc123.js'), but chunk.files array is empty. This caused
the
stats reporting to show 0 bytes for all files.

Updated the asset filtering logic in stats.ts to:
- Try exact match first (preserves existing behavior for non-i18n
builds)
- Match assets by chunk names when chunk.files is empty (i18n builds)
- Handle assets with locale prefixes and hash values in filenames

Fixes #32277
2025-09-17 14:14:55 +01:00
Jack Hsu d345362bd6 docs(misc): strip Markdoc tags when processing API docs/examples (#32747)
Raw Markdoc tags ({% tabs %}, {% callout %}, {% graph %}) appear in
rendered Astro documentation pages, breaking the display.

Markdoc tags are transformed to Starlight-compatible syntax:
- {% tabs %} blocks converted to headers with content
- {% callout %} blocks converted to Starlight asides
- {% graph %} blocks removed entirely

Also fixed four example `.md` files that did not have closing `{% /tabs
%}` tag, which led to issues when stripping them.

## Callout example (swapped with aside)

BEFORE:
<img width="962" height="453" alt="Screenshot 2025-09-16 at 2 21 20 PM"
src="https://github.com/user-attachments/assets/12013b51-42dd-47f7-8290-cfa792532392"
/>

AFTER:
<img width="707" height="495" alt="Screenshot 2025-09-16 at 2 21 34 PM"
src="https://github.com/user-attachments/assets/f0d21811-e6cb-4189-b65d-43a0851fbf0f"
/>


## Tab example (inlined)

BEFORE:
<img width="971" height="464" alt="Screenshot 2025-09-16 at 2 20 15 PM"
src="https://github.com/user-attachments/assets/dcbc1491-762a-431d-891a-488b54bc7c36"
/>

AFTER:
<img width="681" height="1000" alt="Screenshot 2025-09-16 at 2 19 41 PM"
src="https://github.com/user-attachments/assets/898fff61-a553-420c-aa1e-4cfa46bfbd57"
/>

Fixes DOC-102
2025-09-17 08:42:13 -04:00
Jack Hsu 3334c9aa60 docs(misc): update header menu items per Linear task DOC-209 (#32749)
This PR fixes the header links so they don't point to old Next.js docs.
Also cleaned up outdated links.

<img width="805" height="671" alt="Screenshot 2025-09-16 at 4 06 11 PM"
src="https://github.com/user-attachments/assets/78123e6b-3421-4a0d-b114-0e43bc70356e"
/>


The sidebar is also updated to include links to Changelog and Plugin
Registry.
<img width="2672" height="1527" alt="Screenshot 2025-09-16 at 4 06
03 PM"
src="https://github.com/user-attachments/assets/dd097a40-666c-49d6-8a9b-9cf63523eb2f"
/>


## Related Issue(s)
Fixes DOC-209
2025-09-17 08:24:49 -04:00
Louie Weng 88f192827a chore(gradle): bump gradle plugin version to 0.1.8 (#32752)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Bump version of gradle plugin to 0.1.8

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 21:56:59 +00:00
Jason Jean a429972481 Revert "feat(core): add NX_PROJECT_ROOT environment variable to runti… (#32736)
…me cache inputs (#31428)"

This reverts commit 5679b3ea

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This commit caused a major perf regression.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This commit is reverted for now.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 15:10:27 -04:00
Caleb Ukle 08dcd682b8 docs(nx-dev): make sure ToC doesn't overflow page and is scrollable (#32746)
Fix pages with long ToC that overflow without scrolling and overlap with
footer

desktop:

https://github.com/user-attachments/assets/55065c70-dc16-4b72-be7d-e9dd919987c9

mobile:



https://github.com/user-attachments/assets/3fd225e8-c4f9-4caa-92a8-250c10736caa



Fixes DOC-191
2025-09-16 12:33:25 -05:00
Louie Weng 688ff139dd chore(gradle): bump version to 0.1.8 (#32741)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Gradle plugin is at version 0.1.7

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Bump version to 0.1.8

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-16 09:51:36 -07:00
Jack Hsu f87001cb66 docs(nx-dev): respect NEXT_PUBLIC_NO_INDEX variable for app router (#32667)
We already have `NEXT_PUBLIC_NO_INDEX` supported in pages router, so
canary.nx.dev does not get indexed. However, we missed this in the app
router, so `/blog` is not setting `noindex` in preview environments.
2025-09-16 11:46:47 -04:00
Leosvel Pérez Espinosa 5d7ba935d6 fix(core): kill child process correctly when run-script executor process is killed and not using pseudoterminal (#32699)
## Current Behavior

When running an npm script through nx and not using the PseudoTerminal,
child processes might not be killed when the `nx:run-script` executor is
killed.

## Expected Behavior

When running an npm script through nx and not using the PseudoTerminal,
child processes should be killed when the `nx:run-script` executor is
killed.
2025-09-16 09:44:32 -04:00
Leosvel Pérez Espinosa 040d7d7746 fix(angular): install a compatible version of jest for angular (#32744)
## Current Behavior

Generating Angular projects with Jest results in Jest v30 being used,
which is not supported by Angular and causes peer dependency errors.

## Expected Behavior

Generating Angular projects with Jest should install a compatible
version of Jest (Angular currently supports `^29.5.0`).
2025-09-16 14:50:29 +02:00
MaxKless 7ba9a24809 feat(core): generate AI files in create-nx-workspace (#32442) 2025-09-16 09:34:31 +00:00
Jack Hsu 98c47f004f docs(misc): add API docs for nx, workspace, web, plugin (#32739)
This PR adds the missing API docs for nx, workspace, web, and plugin.

## What's changed

- Added missing plugins to `astro-docs/src/pages/references/`
- Update sidebar with new API docs
- Hide deprecated docs from sidebar (these should not be shown)
- Redirects are updated with the new API docs

<img width="1379" height="1210" alt="image"
src="https://github.com/user-attachments/assets/e590a74a-d427-4c6c-b253-a96af9d2c7b3"
/>


<img width="1382" height="1207" alt="image"
src="https://github.com/user-attachments/assets/3c607cd3-9acd-4461-8c8f-9395228951d3"
/>

<img width="1363" height="1205" alt="image"
src="https://github.com/user-attachments/assets/4de36af2-9e58-4579-bca1-4e2a792ab79b"
/>


Closes #DOC-205
2025-09-15 19:24:36 +00:00
Jack Hsu afe5d17c9f chore(repo): fix slack notifcation to use mention_users (#32738)
It was incorrectly using `mention_groups` but should be `mention_users`.
2025-09-15 14:53:21 -04:00
Jack Hsu 86b3285b02 docs(misc): add missing guides and fix all redirects (#32735)
Add missing Nx Cloud documentation pages.

Files added:
- astro-docs/src/content/docs/reference/Nx Cloud/config.mdoc
- astro-docs/src/content/docs/reference/Nx Cloud/release-notes.mdoc
- astro-docs/src/content/docs/guides/Nx Cloud/optimize-your-ttg.mdoc

Redirects fixed:
- 8 CI/concepts pages now point to correct locations

Closes DOC-204

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-15 14:33:11 -04:00
Caleb Ukle 81010ac16a docs(nx-dev): update self-healing ci supported vcs providers (#32722)
clarify gh vcs required right now, with other providers coming soon.
2025-09-15 12:44:14 -04:00
Leosvel Pérez Espinosa 27b14a75c3 feat(testing): support inferring atomized tasks for cypress component tests (#32733)
## Current Behavior

There's no way to distribute Cypress Component Tests.

## Expected Behavior

Cypress Component Tests can be distributed.

Users can choose to infer individual tasks per Cypress Component Test
files that can be distributed across Nx Agents using DTE, by setting the
`ciComponentTestingTargetName` option for the `@nx/cypress/plugin`:

```json
// nx.json
{
  ...
  "plugins": [
    {
      "plugin": "@nx/cypress/plugin",
      "options": {
        ...
        "componentTestingTargetName": "component-test",
        "ciComponentTestingTargetName": "component-test-ci"
      }
    },
    ...
  ]
}
```
2025-09-15 11:57:23 -04:00
MaxKless 537bb4258c fix(gradle): use project configurations to determine project dependencies (#32704)
## Current Behavior
gradle dependencies are hardcoded to included builds & subprojects

## Expected Behavior
we use project configurations to determine dependencies like the tooling
api does

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: lourw <56288712+lourw@users.noreply.github.com>
2025-09-15 10:42:20 -04:00
Rares Matei 910ea7cc44 docs(nx-cloud): add release notes (#32731)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-15 15:36:09 +01:00
Leosvel Pérez Espinosa e574baf2aa feat(angular): support angular v20.3.0 (#32730)
## Current Behavior

Angular v20.3.0 is not supported.

## Expected Behavior

Angular v20.3.0 should be supported.
2025-09-15 10:07:43 -04:00
MaxKless 44fdc7ae6e fix(core): add missing view command to npm (#32729) 2025-09-15 08:56:12 +00:00
Caleb Ukle e3fcad3f30 docs(nx-dev): clean up duplicate docs for react and MF (#32710)
remove remix and react-native guides and redirect to their intro pages
since they functionally covered the same content already

remove the Module federation concepts since those were already
removed/redirected in the main nx.dev and didn't need to be copied over
to astro site.

fixes: DOC-183
2025-09-12 15:21:09 -05:00
Jack Hsu 99d3d2aebf docs(misc): fix tab alignment on mobile devices (#32720)
Tabs were not aligning properly on mobile, causing visual
inconsistencies. Added align-items: end to tablist elements to ensure
proper vertical alignment.

<img width="528" height="614" alt="image"
src="https://github.com/user-attachments/assets/b9a1d9b3-c051-43ac-9454-21b16c7f21b5"
/>


Fixes DOC-168

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-12 14:08:37 -04:00
Colum Ferry 67f60e729f feat(release): new option preserveMatchingDependencyRanges to not update matching version ranges (#32556)
## Current Behavior
When updating manifests, Nx Release will replace explicit peerDependency
ranges with the new version that is being created.
i.e.

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 21.6.0`

```json
"peerDependencies": {
  "nx": "21.6.0"
}
```

## Expected Behavior
When processing dependency updates, check for
`preserveMatchingDependencyRanges`.
If this is set to `true` or an array with explicit `dependencyTypes`
check if a valid range is set.
If so, do not update the range.

i.e.
`preserveMatchingDependencyRanges: true`

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 21.6.0`

```json
"peerDependencies": {
  "nx": ">= 20 <= 22"
}
```

If the new version breaks the range, throw an error asking user to
update the range.

i.e.

```json
"optionalDependencies": {
  "nx": ">= 20 <= 22"
}
```

`nx release version 23.2.0`

```
The version "23.2.0" is not a valid range for optionalDependencies "nx" in manifest "dist/packages/devkit/package.json". Please update to a valid range.
```

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-09-12 18:07:25 +01:00
Jack Hsu c193928f41 fix(nx-dev): implement client-side routing for documentation URLs (#32708)
Update all documentation links in nx-dev UI components to conditionally
use the new /docs
structure when NEXT_PUBLIC_ASTRO_URL is set. This prevents landing on
the old docs page due to the lack of redirect support in Next.js'
`<Link>` when used with pages router.

Note: Blog pages are not updated in `docs/blog` because blog is using
app router which supports redirects. For example, on
https://canary.nx.dev/blog/nx-self-healing-ci the link at the end for
`Nx AI Docs` point to https://canary.nx.dev/features/enhance-AI and is
correctly redirected to https://canary.nx.dev/docs/features/enhance-ai.

## Logic

- When NEXT_PUBLIC_ASTRO_URL is set: links point to /docs/* URLs
- When NEXT_PUBLIC_ASTRO_URL is not set: links use legacy URLs (current
production behavior)

## Pages and components updated

### Pages router pages and components

These are critical since pages router does not support redirects in next
config.

  - Homepage (/) components
  - AI Page (/ai) components
  - Enterprise Page (/enterprise) components
  - NX Cloud (/nx-cloud) components
  - Pricing (/pricing) components
  - Community (/community) components
  - Contact (/contact) components
  - Powerpack (/powerpack) components
  - Gradle pages components
  - Common UI components (footer, headers, sidebar)
  - Solution pages (engineering, leadership, management)
  - Changelog (/changelog)

### App router pages

These pages would have worked regardless since app router supports
redirects in next config.

  - React Page (/react):
    - ui-react/src/lib/hero.tsx - 1 link
    - ui-react/src/lib/features.tsx - 4 links
    - ui-react/src/lib/feature-sections.tsx - 3 links
  - Powerpack Page (/powerpack):
    - ui-powerpack/src/lib/powerpack-features.tsx - 2 links
  - Remote Cache Page (/remote-cache):
    - ui-remote-cache/src/lib/remote-cache-solutions.tsx - 2 links
    - ui-remote-cache/src/lib/faq.tsx - 1 link

---

Verified with NEXT_PUBLIC_ASTRO_URL=https://canary.nx.dev:
- All links now point to /docs URLs (no 308 redirects)
- Old URLs still redirect for backward compatibility
- Pages load successfully with updated links

Fixes DOC-184
2025-09-12 12:26:35 -04:00
Colum Ferry bb6f60b7c5 docs(module-federation): update outdated module federation docs (#32624)
## Current Behavior
The Module Federation docs had out of date code snippets

## Expected Behavior
Bring the Module Federation docs in line with recent developments
2025-09-12 17:20:45 +01:00
Colum Ferry 459dc88b4e feat(docker): ensure docker:build dependsOn build (#32697)
## Current Behavior
The inferred `docker:build` target does not depend on the build target.
Given that most `docker build` commands rely on the initial application
itself to be built first, it makes sense to depend on the build target.

## Expected Behavior
`docker:build` dependsOn `build`
2025-09-12 12:20:14 -04:00
Jack Hsu e1fb42327d docs(misc): mobile menu icon respects theme color (#32717)
The mobile menu icon (hamburger menu) in astro-docs does not properly
respect the theme color, making it hard to see in dark mode.

The mobile menu icon should be visible in both light and dark themes
with appropriate colors, transparent background, and no box shadow.

<img width="633" height="431" alt="image"
src="https://github.com/user-attachments/assets/30e170d7-4eac-4933-84ab-7f3150747721"
/>

<img width="632" height="375" alt="image"
src="https://github.com/user-attachments/assets/ad095dc9-8c9c-4b26-b13a-8cfabdd9ba99"
/>
<img width="597" height="430" alt="image"
src="https://github.com/user-attachments/assets/25caf367-aa10-4ddb-b08a-5ebaa662addc"
/>
<img width="596" height="391" alt="image"
src="https://github.com/user-attachments/assets/6dc566b7-3559-45a6-a4a8-c21a8121143e"
/>


Fixes DOC-169
2025-09-12 12:16:33 -04:00
MaxKless d02b7f46b0 fix(core): improve error messages for provenance checks (#32680) 2025-09-12 16:38:31 +02:00
Caleb Ukle 12b472548a docs(nx-dev): add astro sitemap to nx.dev (#32709)
see new entry here:
https://nx-dev-git-cu-doc-155-sitemaps-nrwl.vercel.app/sitemap.xml as
exmaple
Fixes DOC-155
2025-09-12 07:47:23 -05:00
Jack Hsu b9c9054903 chore(repo): add Slack notifications for canary publish status (#32707)
This PR adds notification through Slack when the canary release fails,
so that we are alerted to errors earlier.

Closes NXC-3131
2025-09-12 08:20:44 -04:00
Caleb Ukle 3dda99e4a6 fix(nx-dev): correctly link to url fragments for devkit (#32565)
switch to making typedoc to the rendering and then pull in the generated
file contents instead of manually parsing the reflection metadata.

Fixes: DOC-63

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-12 08:09:02 -04:00
Jason Jean cfc03a2a9c chore(repo): update nx to 21.6.1-beta.1 (#32702)
Updating Nx from 21.5.1-beta.5 to 21.6.1-beta.1

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-11 14:04:44 -04:00
Jack Hsu c90fee04e0 docs(misc): add sidebar icons for Technologies section (#32698)
Add SVG icons to the Technologies section sidebar items to improve
visual hierarchy and navigation. Icons are displayed next to technology
labels like TypeScript, Angular, React, Vue, Node.js, Java, etc.

`Sidebar` is now using a custom `SidebarSublist` that uses `data-icon`
(if it exists) to render the SVG images. A middleware is used since
`attrs` cannot be set on sidebar items with children. Alternatively, we
could cast the sidebar config to avoid type errors.

<img width="746" height="410" alt="image"
src="https://github.com/user-attachments/assets/4da0385b-e38b-4a58-b83f-19c517c79bac"
/>

<img width="529" height="509" alt="image"
src="https://github.com/user-attachments/assets/f9c00af7-5ed6-40dc-b99c-6ef78ebdd5ba"
/>


Closes #DOC-197
2025-09-11 13:32:03 -04:00
Jack Hsu 3695fc9067 docs(misc): add CTA buttons to header matching Next.js implementation (#32687)
The astro-docs header lacks the CTA buttons (Contact and Login) that are
present in the Next.js version, missing important navigation elements
for user engagement.

Added Contact and Login buttons to the astro-docs header with responsive
design:
- Desktop (≥1280px): CTA buttons visible in header
- Mobile (<1280px): CTA buttons appear in mobile menu at bottom
- Proper element priority to prevent overflow: Theme switcher (always
visible) > CTAs > Social icons
- Visual ordering: CTA buttons, social icons, divider, theme switcher


https://www.loom.com/share/34feb737d11342b19f3ef2df0174a5dc?fromJoinRequest=true

Closes DOC-142
2025-09-11 13:07:02 -04:00
Caleb Ukle 111a94304a docs(nx-dev): update CTA variants (#32670)
add `simple` variant to CTA markdoc component and make CTA in tutorials
to the point.
2025-09-11 17:03:06 +00:00
Craigory Coppola d81861d4aa fix(repo): move codeql to yml based config s.t. it runs properly on forks (#32659)
## Current Behavior
We are using the default codeql setup, which refuses to run on PRs from
forks

## Expected Behavior
We use the yml based codeql setup, which should run correctly

> [!IMPORTANT]  
> This is only the first half of this effort. After this is merged, PRs
will need to be rebased and the repo will need a settings update from
@FrozenPandaz
2025-09-11 12:45:53 -04:00
Philip Fulcher 7534d1dafb docs(nx-dev): add september webinar (#32694) 2025-09-11 10:54:50 -04:00
Philip Fulcher b86f9afb93 fix(nx-dev): correct courses page og image (#32700) 2025-09-11 10:53:29 -04:00
Leosvel Pérez Espinosa 555c69caf4 fix(core): exit fork process and children when ipc connection closes (#32681)
Fixes orphaned `fork.js` processes that occur when the parent Rust
PseudoTerminal process terminates faster than the fork process can
complete its cleanup, causing the fork to hang during Node.js socket
cleanup.
2025-09-11 10:00:19 -04:00
Omer dc901917bb feat(rspack): respect deleteOutputPath option in rspack executor (#32609)
- Add deleteOutputPath option to rspack executor schema
- Modify rspack executor to only clean output directory when
deleteOutputPath is not explicitly set to false
- This aligns rspack executor behavior with webpack executor and allows
users to control output cleaning
- Fixes issue where rspack.output.clean configuration was being bypassed

Fixes #32015

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-09-11 08:58:45 -04:00
Colum Ferry 980573a515 feat(docker): add env var for providing docker registry (#32676)
## Current Behavior
There is no method for overriding the repo config for Container Registry
and Repository Name per environment.

## Expected Behavior
Allow an environment variable `NX_DOCKER_IMAGE_REF` to be set to modify
the full image reference

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-11 08:07:38 -04:00
MaxKless 7b9b42b3c3 fix(core): detect vscode insiders as separate editor (#32679) 2025-09-11 09:00:47 +00:00
Jason Jean dea784f343 fix(core): move git utilities to fix WASM build (#32695)
## Summary
- Moved git utilities that depend on `ignore-files` crate from
`utils/git.rs` to `watch/git_utils.rs`
- Made `find_git_root` and `collect_workspace_gitignores` functions
private since they're only used internally
- Fixed WASM build failure caused by `ignore-files` dependency not being
available for WASM targets

## Test plan
- [x] Verified `pnpm build:wasm` now succeeds
- [x] Verified regular `nx build nx` still works
- [x] Confirmed watch functionality remains intact

The `ignore-files` crate is conditionally excluded from WASM builds in
Cargo.toml, but the git utilities were trying to import it
unconditionally. Moving these utilities to the watch module (which is
already excluded from WASM) provides a cleaner solution than conditional
compilation.
2025-09-11 03:49:18 +00:00
Jason Jean cf7cf8bac5 chore(core): remove unused import (#32691)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Import is unused

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Import is removed

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-10 22:51:57 +00:00
Craigory Coppola c51d247cc9 chore(repo): fixup rust setup action after pinning (#32692)
This pull request makes minor updates to the GitHub Actions workflow
configuration for Rust toolchain installation. The main change is the
addition of an explicit (empty) `rustflags` parameter to the
`actions-rust-lang/setup-rust-toolchain` steps in both the CI and
publish workflows, and a correction of the `targets` parameter to
`target` in the publish workflow.

* CI workflow updates:
* Added `rustflags: ''` to the Rust toolchain setup steps in
`.github/workflows/ci.yml` to ensure no custom Rust flags are set during
installation.
[[1]](diffhunk://#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03fR72-R73)
[[2]](diffhunk://#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03fR277-R278)

* Publish workflow updates:
* Changed `targets` to `target` and added `rustflags: ''` for the Rust
toolchain setup in `.github/workflows/publish.yml` to fix parameter
usage and clarify Rust flags.
2025-09-10 22:45:54 +00:00
Jason Jean bc35921690 fix(core): filter task duration estimation by successful tasks only (#32688)
## Current Behavior

Task duration estimation includes all task runs regardless of their
status (success, failure, cancelled), which can lead to inaccurate
timing predictions.

## Expected Behavior

Task duration estimation should only consider successful task runs to
provide more accurate timing estimates for future task execution
planning.

## Related Issue(s)

Fixes inaccurate task duration estimation by filtering out
failed/cancelled tasks from the calculation.

## Changes Made

- Modified SQL query in `get_estimated_task_timings` to filter by
`status = 'success'`
- Added database index on `status` column to improve query performance
- Updated both the WHERE clause condition and table schema
initialization
2025-09-10 21:20:31 +00:00
Jason Jean 3d6e304580 chore(core): remove unused import (#32689)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

The import is unused

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The import is removed 
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-10 21:07:37 +00:00
Craigory Coppola b582e1f761 chore(repo): turn off pm cache from setup-node in pr-title-validation (#32684)
This pull request updates the workflow configuration for PR title
validation to simplify the setup and improve caching behavior.

Workflow configuration updates:

* Removed the explicit installation step for `pnpm` using
`pnpm/action-setup`, as this workflow doesn't install packages
* Updated the Node.js setup step to disable package manager caching by
setting `package-manager-cache: false`, which replaces the previous
`cache: 'pnpm'` option.…. as this workflow doesn't install packages
2025-09-10 16:13:52 +00:00
Leosvel Pérez Espinosa 0805d4eb1e feat(testing): infer task to merge reports from playwright atomized tasks (#31615)
## Current Behavior

When using Atomizer with Playwright, test reports are generated per
atomized tasks, and Nx doesn't offer a way to merge them into a single
report. This requires the user to handle multiple reports for a single
test file or run a manual/custom aggregation.

## Expected Behavior

When using Atomizer with Playwright, Nx offers an extra target that can
be run separately to merge/aggregate the Atomized task reports.

The "blob" reporter must be configured in the Playwright configuration
so that it can be generated and used to merge and generate a unified
report. For that purpose, the Nx Playwright preset includes the blob
reporter by default when in CI. An option called `generateBlobReports`
can be used to opt out.

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvelperez@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-10 17:27:42 +02:00
Leosvel Pérez Espinosa 1782e8c746 feat(core): replace the pagination from the tui tasks list with scrolling (#32560)
## Current Behavior

The TUI tasks list uses pagination when it has many tasks that don't fit
in the viewport.

## Expected Behavior

The TUI tasks list should be scrollable and not use pagination.

Additionally, this PR includes a fix so that when a task is selected in
the task list, it's always ensured that the task is visible if resizing
the terminal or when the task is moved due to a different status.
2025-09-10 16:59:54 +02:00
Craigory Coppola 44b0c61a29 chore(repo): add CI check to prevent tracked files being listed in .gitignore (#32460)
> [!NOTE]
> CI is failing on this PR right now, its expected. We don't currently
adhere to this advice, and its causing issues. This PR should represent
a sync of this, and future protection


## Current Behavior

Previously, we had no automated check to detect when files tracked by
Git were inadvertently listed in `.gitignore`. This could lead to
inconsistent behavior in Nx's caching system.

## Expected Behavior

With this PR, the CI pipeline now includes a check
(`check-git-ignored-tracked-files`) that identifies tracked files that
would be ignored by Git if they weren't already being tracked. This
ensures consistency in Nx's cache hash calculation.

## Why This Matters for Nx

This check is critical for Nx's caching system because:

**Hash Calculation Consistency**: Nx calculates cache hashes based on
the files that Git tracks. When a file is both tracked by Git and listed
in `.gitignore`, it creates an inconsistency where:
- Git includes the file in operations (and Nx hash calculations)  
- `.gitignore` indicates the file should be ignored
- This can lead to different hash calculations depending on timing and
environment

**Impact on Cache Performance**:
- **Cache Misses**: Valid cache entries may be missed due to hash
discrepancies
- **Unreliable Builds**: Tasks may not re-run when they should, or may
re-run unnecessarily
- **Cross-Environment Issues**: Different developers or CI environments
may calculate different hashes for identical code

**The Solution**: The new script identifies these problematic files and
provides clear remediation steps:
- For files that shouldn't be tracked: `git rm --cached <file>`
- For files that should be tracked: Update `.gitignore` to be more
specific

This ensures that Nx's intelligent caching system works as designed,
providing fast, reliable builds across the entire development workflow.

## Related Issue(s)

Fixes the inconsistency between Git tracking and ignore patterns that
can affect Nx cache hash calculations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 10:42:27 -04:00
Jack Hsu 3a4b2752f2 chore(repo): update Node e2e test to be less flaky (#32678)
This PR updates a test such that it doesn't just wait 1 second for
output, but waits until the expected output either prints or times out.
2025-09-10 10:17:09 -04:00
MaxKless 25c2001caf fix(core): handle uninstalled nx console case in autoinstall logic (#32673) 2025-09-10 16:13:59 +02:00
MaxKless 1ff26dde52 fix(core): check nx packages for provenance config before running nx migrate (#32557) 2025-09-10 10:56:41 +02:00
Jason Jean 27cfc7efa1 fix(core): resolve watcher infinite loops from missing parent gitignore support (#32604)
## Current Behavior

Nx watcher ignores parent `.gitignore` files, causing infinite loops
when `.nx` folders are ignored only by parent gitignores outside
workspace root. Tasks hang indefinitely with no error messages.

## Expected Behavior

Watcher respects parent `.gitignore` files up to git repository
boundaries, preventing infinite loops.

## Changes Made

- **Fixed watcher**: Now traverses parent directories and respects
`.gitignore` files up to git root
- **Centralized logic**: New `git.rs` module eliminates duplicate, buggy
implementations
- **Path handling**: Fixed absolute vs relative path issues causing
filter failures
- **Git boundaries**: Added proper git root detection for traversal
limits

## Files Modified

- `packages/nx/src/native/utils/git.rs` - New module with git utilities
- `packages/nx/src/native/utils/mod.rs` - Export git module  
- `packages/nx/src/native/walker.rs` - Use shared utilities
- `packages/nx/src/native/watch/utils.rs` - Remove duplicate functions
- `packages/nx/src/native/watch/watch_filterer.rs` - Use centralized
functions

## Related Issue(s)

Fixes #30313

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-09 14:57:08 -04:00
Copilot c586749a93 fix(core): add bold styling to terminal pane title when focused (#32462)
## Current Behavior

Terminal panes in the TUI show focus state through color changes only -
focused panes display the task name in primary foreground color while
unfocused panes use secondary foreground color.

## Expected Behavior

Terminal panes should provide stronger visual feedback when focused by
making the title bold in addition to the existing color change,
consistent with other TUI components like the dependency view.

## Related Issue(s)

This enhancement improves the visual hierarchy and makes it easier for
users to identify which terminal pane currently has focus, especially in
multi-pane layouts.

## Changes Made

- Modified the title styling logic in `TerminalPane::render()` to
conditionally apply `Modifier::BOLD` when the pane is focused
- Added a test to verify the focus state behavior is correctly
implemented
- The change follows the existing pattern used in other components and
maintains backward compatibility

The implementation uses a conditional modifier that applies bold styling
only when `state.is_focused` is true, leaving unfocused panes unchanged.
This provides consistent visual feedback across the TUI while preserving
existing functionality.

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AgentEnder <6933928+AgentEnder@users.noreply.github.com>
2025-09-09 18:51:43 +00:00
Jack Hsu 4299d82b9b docs(misc): update links on plugin-registry to point to intro pages when they exist (#32611)
This PR updates the the plugin registry links to point to intro since
the API docs aren't useful as a discovery page.

Since we use the API path to build generator, executor, etc. links I
added a new `introPath` property instead.
2025-09-09 14:43:14 -04:00
Jack Hsu 6eb1d21384 chore(repo): pin actions to shas (#32657)
This PR pins our publish actions to specific SHAs, and removes unused
logic tied to the previous PR release support.

Note: `dtolnay/rust-toolchain` cannot be pinned since will treat the SHA
as the Rust version. e.g. `@abc` will try to install Rust version `abc`,
which is invalid.
2025-09-09 14:10:47 -04:00
Jack Hsu 8fe7b0b066 feat(misc): add Cookiebot global scripts to astro-docs (#32660)
Adds cookie consent management and analytics tracking to the astro-docs
project:
- Cookiebot consent script integration with COOKIEBOT_ID environment
variable
- GlobalScripts React component reused from nx-dev for consistency
- Head.astro component override to integrate scripts into Starlight
- Cookie consent categories: statistics (GA, GTM) and marketing
(HubSpot, Apollo, Hotjar, Twitter)
- Production-only script loading with COOKIEBOT_DISABLE bypass option

Fixes DOC-95

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-09 08:30:21 -04:00
Jack Hsu ec78ef1928 docs(misc): add opengraph image support for astro docs (#32636)
This PR adds `og:image` meta tags to documentation pages for the new
docs.

The images are provided for pages under `docs` and `plugin-docs`
collections, with a fallback for pages not in those collections. We can
add more in the future as well if needed.

Examples:

<img width="1200" height="630" alt="releases"
src="https://github.com/user-attachments/assets/52322296-6048-4f40-8a78-7878406aa053"
/>

<img width="1200" height="630" alt="generators"
src="https://github.com/user-attachments/assets/cb238f9f-28c6-4c3d-83aa-ee231d99d72e"
/>

---

Closes #DOC-1164
2025-09-09 08:30:05 -04:00
Miguel 383f3aa8ce fix(release): optimize release version internals (#32534)
ReleaseGroupProcessor already iterates through all release groups, and
sometimes change is anyways not propagated.

## Current Behavior

All release groups are iterated in a way that, if group A depends on
group B:
- A will
[propagate](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L832)
changes to B
- B will
[check](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L894)
if it should be bumped by its dependencies

This means there is redundant double-checking in the code.

However, propagation doesn't always work. The linked
[snippet](https://github.com/nrwl/nx/blob/53bb276a39a2de09938ed1161fadbbe92a96e596/packages/nx/src/command-line/release/version/release-group-processor.ts#L1626-L1661)
selects a random project of group *A*, and if that project doesn't have
dependencies to projects in group *B*, it doesn't consider *B* as
bumped.

## Expected Behavior

### Ideally
There would be no double loops. 

### Otherwise 
If there are, they should consider all projects when deciding what to
bump. For instance, with something like:
```typescript
      const hasDependencyInChangedGroupV2 = Array.from(releaseGroupFilteredProjects).some(
        (project) => {
          const dependencies = this.projectGraph.dependencies[project] || [];
          return dependencies.some(
            (dep) =>
              this.getReleaseGroupNameForProject(dep.target) ===
              changedDependencyGroup
          )
      })
```

## Notes

- I know it's a bold move to simply delete code. I wanted to highlight
that, if tests pass, we are either missing tests or we are doing
unnecessary work. I would like to replicate locally with a bit more
confidence, but `jest` tests seem to be flaky
- I would need to pick @JamesHenry 's brain about what's the intention
with this "double" propagation in order to have the full context here
2025-09-09 14:38:56 +04:00
Craigory Coppola fdc3e39899 fix(core): check if daemon process is actually alive before trying to kill it (#32661)
## Current Behavior
If the daemon shuts down, and the user tries to run `nx reset`, an ESRCH
error is thrown since the pid in server-process.json doesn't match up to
a process

## Expected Behavior
We check if the process is alive before terminating it

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 19:39:52 -04:00
Colum Ferry 95e7b49967 fix(bundling): postcss-cli-resources should handle relative urls #32582 (#32658)
## Current Behavior
Relative urls are not being handled correctly in the
`postcss-cli-resources` Plugins for Webpack and Rspack after switching
to use WHATWG URL in favour of the deprecated `url.parse()` method.

## Expected Behavior
Ensure relatives are handled appropriately by resolving them based on
the context of the current resource being loaded.

## Related Issue(s)

Fixes #32582
2025-09-08 15:34:47 -04:00
Leosvel Pérez Espinosa 5011ecd0a1 fix(core): invalidate project graph when external nodes change (#32626)
## Current Behavior

When external nodes change, the project graph cache is not invalidated.
This can sometimes lead to missing dependencies due to reusing cached
dependencies for nodes that no longer exist.

## Expected Behavior

When external nodes change, the project graph cache should be
invalidated.
2025-09-08 15:33:06 -04:00
Copilot f91420d7c5 fix(repo): update broken CI documentation link in README (#32633)
## Current Behavior

The README.md file contains a broken link to the CI documentation that
points to `/ci/intro`, which no longer exists.

## Expected Behavior

The README.md file should contain the correct link to the CI
documentation pointing to `/ci/getting-started/intro`.

## Related Issue(s)

Fixes #32549

Credits to @MeAkib for originally identifying and addressing this issue.

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a
$200 gift card! Click
[here](https://survey3.medallia.com/?EAHeSx-AP01bZqG0Ld9QLQ) to start
the survey.

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: FrozenPandaz <8104246+FrozenPandaz@users.noreply.github.com>
2025-09-08 11:44:23 -04:00
Colum Ferry ceaa58e36c fix(core): ensure only supported bundlers are used for angular fallback to default (#32655)
## Current Behavior
If an invalid bundler is provided to `create-nx-workspace` for the
`angular-monorepo` preset, it defaults to `webpack`.

## Expected Behavior
Invalid bundler option should default to the default provided within in
the angular app generator
2025-09-08 16:39:11 +01:00
Miroslav Jonaš 46c26280e6 fix(vite): handle config server properly for libs (#32608)
## Current Behavior
The `Vite`'s `resolveConfig` always adds default server settings to the
config:

```
server: {
    preTransformRequests: true,
    sourcemapIgnoreList: [Function: isInNodeModules$1],
    middlewareMode: false,
    fs: {
      strict: true,
      allow: [Array],
      deny: [Array],
      cachedChecks: undefined
    }
  },
```

This leads to `libs` always ending up with serve targets even if we
don't define `serve` configuration

## Expected Behavior
The serve targets should only exist if we explicitly set port or host.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 16:39:28 +02:00
Miroslav Jonaš 727d431ef5 chore(repo): update core team in readme (#32585)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-08 16:30:56 +02:00
Jason Jean 9bccff918d chore(repo): update nx to 21.5.1-beta.5 (#32631)
Updating Nx from 21.5.1-beta.3 to 21.5.1-beta.5
2025-09-05 22:38:37 +00:00
Louie Weng b12d4218ea chore(gradle): migrate plugin to 0.1.7 (#32638)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Migrate gradle project graph plugin to 0.1.7

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-05 16:44:23 -04:00
Louie Weng 0c90f2c38a Revert "fix(gradle): allow test target name to be configured from nx.json" (#32637)
Reverts nrwl/nx#32416

Picking up tests via test name is fragile and breaks workspaces where
nx-expected task names do not have exact named counterparts.
2025-09-05 20:27:53 +00:00
Jason Jean 43d2c712a4 Revert "fix(core): exclude non-cacheable tasks from flaky detection (… (#32635)
…#32435)"

This reverts commit 2c678a1d51.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This causes a regression in Nx Cloud

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

There is no regression in Nx Cloud.. gotta find a different way.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-05 18:59:28 +00:00
Juri 02580f626e docs(nx-dev): add article about s1ngularity 2025-09-05 20:03:06 +02:00
Jack Hsu 106cc65269 docs(core): add Node 24 to compat matrix (#32630)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Closes #32526
2025-09-05 12:51:37 -04:00
Rares Matei 13367dee2e fix(nx-cloud): forward --help to nx-cloud aliases (#32627)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

`--help` behaviour is defined in the Nx alias entrypoints, and doesn't
show the correct output:

```
npx nx start-ci-run --help
nx start-ci-run [options]

Starts a new CI run for distributed task execution. This command is an alias for [`nx-cloud start-ci-run`](/ci/reference/nx-cloud-cli#npx-nxcloud-start-ci-run).

Options:
  --help     Show help                                                                                                                                                                                                                   [boolean]
  --version  Show version number                                                                                                                                                                                                         [boolean]
  --verbose  Prints additional information about the commands (e.g., stack traces).   
```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

When running `npx nx start-ci-run --help` the help from the file in the
NxCloud repo should be displayed:

```
npx nx start-ci-run --help
Usage: npx nx-cloud start-ci-run [options]

Starts an Nx Cloud CI Pipeline Execution and configures distribution.

Options:
  --distribute-on <config>        Configure how to distribute with Nx Agents. Accepts:
                                  - "<count> <launchTemplate>" (e.g., "8 linux-medium-js")
                                  - path to a .yaml/.yml file for dynamic changesets
                                  - "manual" to disable the warning for legacy DTE setups
  --stop-agents-after <targets>   Comma-separated targets that signal agents can stop.
                                  Include configuration when needed, e.g., "build:locale-en".
  --require-explicit-completion   Require explicitly completing the CI run with
                                  "npx nx-cloud complete-ci-run".
  --stop-agents-on-failure        Stop all agents when a command fails (default: true).
  --with-env-vars <CSV>           Extra env vars to forward to agents in addition to NX_* (e.g., "VAR1,VAR2").
  --use-dte-by-default            Use this to disable auto-distribution of Nx tasks (default: true)
  --no-distribution               Disable distribution for this run
  --assignment-rules <file>       YAML file with assignment rules (for manual DTE only, see docs)
  --fix-tasks <csv>               Task names to auto fix
  --force                         Force start a CIPE even when a CI environment is not detected.
  --help, -h                      Show this help and exit.

Notes:
  - Do not run this command locally. If run accidentally, clean up with "npx nx-cloud cleanup".
  - For legacy manual DTE setups, you can pass "--distribute-on=manual".

Examples:
  npx nx-cloud start-ci-run --distribute-on="8 linux-medium-js" --stop-agents-after=lint,test,build
  npx nx-cloud start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml" --stop-agents-after=e2e
  npx nx-cloud start-ci-run --distribute-on="manual" --stop-agents-after=e2e
  npx nx affected -t lint,test,build

Docs:
  https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
  https://nx.dev/ci/reference/assignment-rules
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #CLOUD-3580
2025-09-05 16:28:35 +03:00
Jason Jean 27e8ce0771 fix(core): reduce CPU usage by adding 20ms interval to daemon process check (#32618)
## Current Behavior

The daemon process check in `startServer()` was running continuously
without any interval, causing excessive CPU usage. The `setInterval()`
call was missing the timing parameter, making it run as fast as
possible.

## Expected Behavior

With this change, the daemon process check runs every 20ms,
significantly reducing CPU overhead while maintaining responsive daemon
process monitoring.

## Related Issue(s)

This change optimizes CPU usage in the Nx daemon server by preventing a
continuous polling loop.

## Changes Made

- Added `20` as the interval parameter to the `setInterval()` call in
`packages/nx/src/daemon/server/server.ts:572`
- The daemon process ID check now runs every 20ms instead of
continuously
- Maintains the same functionality while dramatically reducing CPU
consumption
2025-09-04 20:28:26 -04:00
Leosvel Pérez Espinosa 37b806a8bd fix(devkit): remove nx as direct dependency (#32614)
## Current Behavior

The `@nx/devkit` package has `nx` as a direct dependency.

## Expected Behavior

The `@nx/devkit` package should not have `nx` as a direct dependency.
2025-09-04 23:54:36 +00:00
Leosvel Pérez Espinosa 636c6ecf3c feat(angular-rspack): do not rely on postinstall >20.2 (#32613)
Update `postinstall` script to only be needed for Angular versions lower
than v20.2.0, for which the relevant entry points are patched to expose
needed functionality.
2025-09-04 23:35:52 +00:00
Jason Jean 41887866bd Revert "chore(core): support node 24 (#31934)" (#32619)
This reverts commit f3bc2b207a.

# Testing

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Many CI runs are running out of memory causing Agents to get OOM killed.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This change is reverted and CI runs.. only sometimes run out memory
😅

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 23:03:34 +00:00
Craigory Coppola 1a2582e477 chore(repo): install cargo deps separately from first access (#32617)
## Current Behavior
Cargo deps get fetched on first usage, which is when graph computes +
cargo metadata runs under @monodon/rust

## Expected Behavior
Cargo deps are fetched separately.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 16:37:36 -04:00
Craigory Coppola 5679b3ea8c feat(core): add NX_PROJECT_ROOT environment variable to runtime cache inputs (#31428)
Add NX_PROJECT_ROOT environment variable to runtime cache inputs

## Current Behavior

Runtime cache input commands do not have access to project-specific
context, making it impossible to create project-aware runtime inputs.

## Expected Behavior

Runtime cache input commands can access `$NX_PROJECT_ROOT` environment
variable containing the project's root directory path.

## Related Issue(s)

Fixes #20949

Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-09-04 16:04:55 -04:00
Jason Jean 2c678a1d51 fix(core): exclude non-cacheable tasks from flaky detection (#32435)
## Current Behavior

Currently, the flaky task detection considers ALL tasks that have mixed
success/failure results as "flaky", including non-cacheable tasks like
development servers (`nx serve`) which are expected to have inconsistent
behavior.

## Expected Behavior

With this PR, only explicitly cacheable tasks (`cache: true`) are
considered for flaky detection. Non-cacheable tasks with mixed results
will no longer trigger flaky warnings.

## Related Issue(s)

This addresses the issue where non-cacheable tasks like development
servers were incorrectly being flagged as flaky, creating noise in the
flaky task detection system.

## Implementation Details

### Changes Made

1. **Database Schema Updates**
   - Added `cache` column to `task_details` table 
   - Updated `HashedTask` struct to include `cache: Option<bool>` field

2. **Query Logic Enhancement**
- Modified flaky task detection query to JOIN with `task_details` table
- Added filter condition `AND task_details.cache = 1` to exclude
non-cacheable tasks
   - Added clear comments explaining the query logic

3. **Data Flow Updates**
- Updated TypeScript code in `hash-task.ts` to pass `cache` information
from Task objects to native layer
- Both batch and individual task detail recording now include cache
property

4. **Comprehensive Testing**
   - Updated existing tests to include cache information
- Added new test "should not consider non-cacheable tasks as flaky" that
verifies:
     - Tasks with `cache: false` are NOT marked as flaky
     - Tasks with `cache: undefined` are NOT marked as flaky  
- Only explicitly cacheable tasks with mixed results are marked as flaky

### Test Results
- **Rust tests**: 202 passed 
- **TypeScript tests**: 4 passed  (all NxTaskHistory tests)

## Benefits

- **Improved Accuracy**: Flaky detection now focuses only on tasks where
consistency is expected
- **Reduced Noise**: Development servers and other non-cacheable tasks
no longer create false positives
- **Better Developer Experience**: More relevant and actionable flaky
task warnings

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-04 15:57:11 -04:00
Jack Hsu 27769450b8 fix(nx-dev): remove self-referencing redirects causing infinite loops (#32615)
When NEXT_PUBLIC_ASTRO_URL is set and nx-dev serves docs through Astro,
certain URLs cause infinite redirect loops due to self-referencing
redirect rules. Specifically:
- /docs/guides/nx-cloud/setup-ci redirected to itself
- /docs/reference/devkit redirected to itself

There is also a missing redirect from `/docs` to
`/docs/getting-started/intro` in the Next.js app, leading to a
client-side redirect from Astro website. Plus, `/getting-started/:path*`
was being redirected to the intro page instead of the the more specific
pages.

URLs should either redirect to their proper destinations or serve
content without infinite loops. Removed the two self-referencing
redirect rules that were causing the problem.

`/docs` redirects on server-side not client-side, and `/getting-started`
URLs are redirected to specific pages e.g.
/getting-started/start-new-project ->
/docs/getting-started/start-new-project

Fixes DOC-196
2025-09-04 14:26:50 -04:00
Jason Jean 246b5c808d chore(gradle): add dynamic clean and testClasses tasks for CodeQL compatibility (#32593)
## Current Behavior

CodeQL analysis fails for Java projects in Gradle workspaces because the
required build tasks (clean and testClasses) are not available for
included builds.

## Expected Behavior

CodeQL can successfully analyze Java code by having access to the
necessary Gradle build tasks for all included builds in the workspace.

## Related Issue(s)

This change ensures CodeQL compatibility for Java projects by
dynamically adding clean and testClasses tasks to all included builds.

Fixes #
2025-09-04 12:47:25 -04:00
Jonathan Cammisuli 2f1dae2154 chore(repo): include fix-ci command in the workflow (#32326)
Co-authored-by: James Henry <james@henry.sc>
2025-09-04 12:31:26 -04:00
Craigory Coppola a1b25894f8 fix(core): use more reasonable scroll speed on trackpads (#32603)
## Current Behavior
Scrolling via trackpad is way too fast in comparison with scrolling via
arrow keys / mouse wheel

## Expected Behavior
Scrolling via trackpad is analogous to mouse / arrow keys. Additionally,
home + end can jump to the beginning / end of terminal outputs.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-04 12:02:59 -04:00
Jason Jean 4bc5540a65 chore(repo): update nx to 21.5.1-beta.3 (#32601)
Updating Nx from 21.5.0-beta.2 to 21.5.1-beta.3
2025-09-04 12:02:06 -04:00
MaxKless 5ecf4cbea7 fix(graph): repair theme detection for nx console components (#32607)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Themes are not picked up correctly from Nx Console
<img width="1128" height="637" alt="image"
src="https://github.com/user-attachments/assets/8dad4935-6d98-49f3-95a9-34f4880e2551"
/>


## Expected Behavior
Theme is applied
<img width="856" height="543" alt="image"
src="https://github.com/user-attachments/assets/aa7e21ae-a243-4399-b351-a85be339fd4b"
/>
2025-09-04 11:56:24 -04:00
Nicholas Cunningham f3bc2b207a chore(core): support node 24 (#31934)
### Changes
- Fix builtin module test to avoid duplicate `node:` prefixes

### Testing
- Update ci pipeline to use node v24
- Update agents to use node v24

### MISC
Requires: https://github.com/nrwl/nx/pull/32223

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-09-04 08:54:18 -04:00
Caleb Ukle 8e34d066f6 docs(nx-cloud): update description of neverConnectToCloud (#32602)
`neverConnectToCloud` can be confusing due to 2 aspects
1. the setup of nx cloud is named via the command `nx connect`
2. network connectsion to external services i.e. nx cloud

`neverConnectToCloud` is meant to control 1 and not 2
this means if you have previously connected to nx cloud and have an
access token configures. nx cloud will still be used since you're not
trying to "setup up nx cloud" aka `nx connect` but are instead using nx
cloud (i.e. making network requests to nx cloud)

Instead using `--no-cloud` or `NX_NO_CLOUD=true` would be how you
prevent network access to nx cloud

Fixes: DOC-194
2025-09-04 08:43:02 -04:00
Jack Hsu 7ec6f4e725 docs(misc): update styling for plugin registry cards (#32563)
This PR updates the cards on `/docs/plugin-registry` for the new Astro
docs.

<img width="830" height="286" alt="image"
src="https://github.com/user-attachments/assets/942e6764-3f7f-4986-85a1-3b6c603078c6"
/>

With the PR changes it looks like this:

(dark theme)
<img width="897" height="811" alt="image"
src="https://github.com/user-attachments/assets/06ed3045-d0f2-4c5c-88bd-eb39b0dd7b0b"
/>

(light theme) 

<img width="803" height="811" alt="image"
src="https://github.com/user-attachments/assets/7347402c-0829-450d-b85d-5b0b0b541b9c"
/>

**Changes:**

- Use `<div>` rather than cards so we can match production styles more
closely
- Customize the badge colors to match existing production 


Fixes #DOC-172
2025-09-03 16:46:46 -04:00
Leosvel Pérez Espinosa ec1f1a4559 fix(js): store stale references correctly in typescript-sync generator (#32596)
## Current Behavior

The `@nx/js:typescript-sync` wrongly identifies stale project
references.

## Expected Behavior

The `@nx/js:typescript-sync` should correctly identify stale project
references.
2025-09-03 10:28:06 -04:00
Miguel 4e1708861d fix(release): ensure versionData is accurate for all transitive dependencies (#32531) 2025-09-03 16:40:33 +04:00
Leosvel Pérez Espinosa 5bb824c074 fix(testing): log the correct installed cypress version when erroring due to using an unsupported version (#32598) 2025-09-03 16:00:58 +04:00
Jason Jean 1fcec26224 chore(repo): disable claude workflow (#32592)
## Current Behavior

The Claude Code workflow is currently enabled and responds to @claude
mentions in issues and PRs.

## Expected Behavior

The Claude Code workflow should be disabled by removing the workflow
file.

## Related Issue(s)

This change disables the automated Claude responses on the repository.
2025-09-02 21:48:26 +00:00
Juri c7d540614c docs(misc): update new subtagline 2025-09-02 23:43:24 +02:00
Juri 2af5446fba feat(nx-dev): update homepage subtagline 2025-09-02 23:43:24 +02:00
Jason Jean 92bd11a221 chore(repo): update nx to 21.5.0-beta.2 (#32589)
Updating Nx from 21.5.0-beta.1 to 21.5.0-beta.2
2025-09-02 15:48:55 -04:00
Colum Ferry c5785ea8fc fix(rspack): expand serve-static target names for init generator (#32587)
## Current Behavior
If another plugin, or project/package.json exists in the repo that has a
`serve-static` target, running `nx add @nx/rpsack` will fail.

The `@nx/rspack:init` generator does not have any alternative names for
`serve-static` causing conflicts.

## Expected Behavior

The `init` generator should provide more options for the `serve-static`
target such that the plugin can be added without error.
2025-09-02 13:42:06 +01:00
Miroslav Jonaš 06456482c2 docs(nx-dev): add missing info to 2025.07.1 release notes (#32584)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-09-02 11:33:38 +02:00
Chau Tran f34b5ef78b fix(graph): project details navigating for new taskGraph and tasks with default configuration on UI (#32510)
- fix some remnants on old navigation pattern for task graph in PDV
- fix an issue where UI only has `target` and `project` but backend
returns TaskGraph with default configuration
2025-08-29 17:44:49 -05:00
Colum Ferry dfc042ee1f chore(repo): set canary schedule to 8pm utc (#32574) 2025-08-29 16:41:57 -04:00
Craigory Coppola 056043314c chore(repo): limit pr validation runs to checkout only from master (#32545)
Reduces some unnecessary permissions to ease future risks.
2025-08-29 12:56:00 -04:00
Colum Ferry f929324303 chore(repo): add environment protection for publish (#32573) 2025-08-29 16:25:20 +00:00
MaxKless f9d5bb8edd fix(core): detect devcontainer environment and skip Nx Console installation prompt if it exists (#32571)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
In a devcontainer environment, the tmp file we write to when the user
doesn't want to install nx console isn't saved. This means that every
time they start

## Expected Behavior
Devcontainers are a special case, we can skip asking the user if we
detect we are in one.
2025-08-29 11:13:07 -04:00
Colum Ferry 8d067f8ecc feat(module-federation): align dynamic federation with latest from module federation and rspack (#32509)
## Description
With `@module-federation/enhanced@0.18`, dynamic federation changed. The
`init` method is now deprecated and setup is different dependent on
whether the MFP Build Plugin is used. For us, it is, requiring a change
to how we initialise MF.
This also requires an update to Rspack also to `1.5.0`.
`NxModuleFederationDevServerPlugin` currently ignores static dynamic
remotes and does not start them automatically locally.

## Changes
- Replace usage of `init` with `registerRemotes`
- Support Rspack 1.5
- Fix issue with `NxModuleFederationDevServerPlugin` ignoring static
dynamic remotes during dev locally
- Remove restriction on shape of the `module-federation.manifest.json` 

## Related Issues

Fixes #32542
2025-08-29 10:39:20 -04:00
MaxKless 8de8ff0931 docs(core): document NX_SKIP_VSCODE_EXTENSION_INSTALL environment variable (#32570) 2025-08-29 14:05:53 +02:00
Caleb Ukle 23cffe6949 docs(nx-cloud): clean up concept doc (#32564) 2025-08-28 23:24:16 +02:00
Caleb Ukle 247c0492d8 fix(nx-dev): add missing data in plugin migrations (#32562)
- adds "always add to package json" column for package json updates
<img width="786" height="529" alt="image"
src="https://github.com/user-attachments/assets/6e4383c3-e4ec-4167-b76c-ad9a800e3564"
/>

- add migration examples 
- **note** examples typically have mdoc tags, we plan to remove those
from source files once we're clear to push to prod
<img width="782" height="926" alt="image"
src="https://github.com/user-attachments/assets/67c1a8c2-c36c-4bc3-badc-b9657646babd"
/>


- add migration requirements section

![WKMac
2025-08-28T19-01-57](https://github.com/user-attachments/assets/b0bd0a3b-74e7-4f82-8d48-c7a322301bcd)


- fixes header indentation level for migrations 
- **note** this now breaks overflow on toc, will fix in future PR, see
DOC-191
  
<img width="441" height="479"
alt="73083796c066816a69e44747e6e62eec05dfd4c4fc02f27a30d085f6c8d86235"
src="https://github.com/user-attachments/assets/ccb0b908-403a-40fb-bf4d-61b8059b8d20"
/>



Fixes: DOC-146
Fixes: DOC-147

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-28 14:53:34 -05:00
Jack Hsu 3211169e42 fix(nx-dev): resolve multiple styling issues in Astro documentation (#32561)
## Current Behavior
- Sidebar active link uses default text color instead of accent color
(DOC-143)
- Breadcrumb current page text is barely visible with opacity 0.2
(DOC-141)
- TOC lacks proper spacing between items and has no background styling
(DOC-174)
- TOC hard to parse (DOC-138)

## Expected Behavior
- Sidebar active link uses accent color for better visibility
- Breadcrumb current page has proper text color and visibility
- Deepdive callout paragraphs have compact 12px spacing
- TOC has proper spacing and background styling with dark mode support
<img width="1450" height="1357" alt="Screenshot 2025-08-28 at 1 58
10 PM"
src="https://github.com/user-attachments/assets/b0414e22-ed6c-46ac-b66f-79e80fb868a5"
/>
<img width="1331" height="1030" alt="image"
src="https://github.com/user-attachments/assets/d0a7341e-f389-4357-9028-9def94a23b4f"
/>
<img width="716" height="1187" alt="image"
src="https://github.com/user-attachments/assets/fe4617fa-4c45-4748-aced-a0e513f50965"
/>


## Related Issue(s)
Fixes DOC-143
Fixes DOC-141
Fixes DOC-138
Fixes DOC-174
2025-08-28 15:42:09 -04:00
Caleb Ukle d38bf3db4a fix(nx-dev): issue with index pages not showing content lists (#32559)
also fixed issue where links contained 'CI Features' instead of
'ci-features' in URL breaking the markdown to html link rendering

Fixes: DOC-181
Fixes: DOC-186
2025-08-28 12:39:25 -05:00
Louie Weng 95da233553 chore(gradle): bump nx for gradle plugin to 0.1.6 (#32505)
## Current Behavior
Nx for Gradle plugin is at version 0.1.6

## Expected Behavior
Bumped up the version for the Nx for Gradle plugin, and added necessary
migrations to `nx migrate` the plugin to the newest version.
2025-08-28 16:11:13 +00:00
Jack Hsu 427c691732 docs(nx-dev): add comprehensive redirect rules from Next.js docs to new Astro docs site (#32520)
The Next.js documentation site has no redirect rules to guide users to
the new Astro documentation structure, resulting in broken links and 404
errors when users try to access the old URLs.

All legacy documentation URLs from the Next.js site should redirect to
their appropriate locations in the new Astro documentation site,
following a consistent mapping strategy.

This commit implements the following redirect mapping strategy:

1. **API References Consolidation**: Individual generator and executor
pages are redirected to their parent listing pages since the new docs
don't have individual pages:
   - `/api/generators/<specific>` → `/generators`
   - `/api/executors/<specific>` → `/executors`
   - `/api/migrations` → `/migrations`

2. **CI Content Reorganization**: CI-related content has been
restructured into three main areas:
- Platform-specific CI setup guides consolidated into
`/docs/guides/nx-cloud/setup-ci`
- DTE setup for all platforms consolidated into
`/docs/guides/nx-cloud/manual-dte`
- Security topics moved to `/docs/concepts/ci-concepts/cache-security`

3. **URL Convention Normalization**:
   - All redirect targets are prefixed with `/docs`
- Spaces in paths converted to hyphens (e.g., "Nx Cloud" → "nx-cloud")
- Special cases like `convert-to-inferred` redirect to
`/docs/guides/tasks-caching/convert-to-inferred`

4. **Content Consolidation**:
- Technologies without dedicated executor/generator pages (Java, Vue,
Node) redirect to their main/intro technology page
- Deprecated content marked with TODO comments for future migration
decisions

All redirect targets have been verified to exist on canary.nx.dev.

There are some TODOs for missing content that we need to follow-up on,
or check if they are addressed in other PRs.

Fixes DOC-154

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-28 13:55:29 +00:00
Colum Ferry a6685fa83e feat(rspack): support passing templateParameters to HtmlRspackPlugin (#32553)
## Current Behavior
There is currently no way to pass `templateParameters` to the
`HtmlRspackPlugin`.

## Expected Behavior
Add `templateParameters` to the NxAppRspackPluginOptions and pass
through to `HtmlRspackPlugin`
2025-08-28 13:16:14 +01:00
MaxKless 493d6233c2 chore(repo): add lourw as gradle reviewer (#32537)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-27 23:45:01 -04:00
Jack Hsu 7678806af9 docs(misc): fix issue with AI chat (#32547)
The React dep is needed in the `package.json` in order for the AI chat
dialog to load.
2025-08-27 23:44:34 -04:00
Colum Ferry e634b58b70 chore(repo): disable failing mf e2es (#32538) 2025-08-27 15:20:44 -04:00
MaxKless 2fe6080db5 chore(repo): change publish step to use npm trusted publishing (#32533)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
We use a regular npm publish flow using access tokens and provenance.
## Expected Behavior
We use https://docs.npmjs.com/trusted-publishers which is more secure
and has provenance configured automatically.
2025-08-27 12:25:03 -04:00
Jack Hsu a73712e7f8 chore(repo): add SECURITY.md and disable PR release (#32536)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-27 11:39:37 -04:00
Caleb Ukle 53bb276a39 docs(nx-dev): verify all internal links do not 404 (#32491)
add link verification script that
- gets all links in the build html files
- compares all links to sitemap links
- fails if there is a link not in the sitemap to prevent creating broken
links

NOTE: 
some generated api docs still ref the old URLS (i.e. non /docs prefixed)
which we'll need to change either in this PR or in a quick follow up PR
before releasing as to not break any doc changes that have to be shipped
before full astro port

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-08-26 19:44:20 -04:00
Jack Hsu 80db8ab857 fix(nx-dev): update header logo to link to nx.dev homepage (#32502)
The logo in the documentation header links to the docs intro page
(/docs/getting-started/intro) instead of the main Nx homepage.

The logo should link to https://nx.dev to allow users to easily navigate
back to the main Nx homepage from the documentation.

Fixes DOC-167

Demo: https://www.loom.com/share/71fb2b78d40b4730a073fdfe4a3b66c2
2025-08-26 19:39:20 -04:00
Jack Hsu ffada18156 docs(nx-dev): remove 'Docs' from breadcrumb UI to prevent 404 (#32503)
The breadcrumbs component was showing 'Docs' as a clickable segment
which led to a 404 since there's no page at /docs. This filters out the
'docs' segment from the UI while keeping all href links with the /docs/
prefix.

Fixes DOC-165

Demo: https://www.loom.com/share/33aa13e515cf4213a64ecbf29200f3e1
2025-08-26 19:38:11 -04:00
Craigory Coppola 347eb0d000 fix(core): normalize root project root when merging project config results (#32517)
## Current Behavior
When merging project config its easy to return `''` for the root
project's root, but we expect `'.'`.

## Expected Behavior
We normalize this to prevent plugin author's from making an easy mistake

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-26 18:42:43 -04:00
Colum Ferry 98cf4b7faa chore(react-native): fix nightly (#32507)
## Current Behavior

The React Native e2e tests contain variable naming conflicts and
inconsistent error handling in the process cleanup sections:
- Variables named `process` shadow the global Node.js `process` object
- Inconsistent error handling patterns in process cleanup logic
- Some cleanup operations attempt to kill processes that may not exist

## Expected Behavior

The React Native e2e tests should have:
- Clear variable names that don't shadow global objects
- Consistent error handling patterns throughout all test cleanup
sections
- Robust process cleanup that handles cases where processes may not be
running

### Changes Made

1. **Variable Naming**: Renamed `process` variables to `childProcess` to
avoid shadowing the global Node.js `process` object
2. **Error Handling**: Added consistent try-catch blocks around all
process cleanup operations
3. **Process Cleanup**: Simplified cleanup logic by passing `undefined`
for process ID when the process reference is not available, allowing
`killProcessAndPorts` to handle port cleanup appropriately

This fixes issues that could occur in nightly builds where process
cleanup wasn't being handled consistently, potentially leading to
hanging processes or ports.
2025-08-26 16:10:04 -04:00
Philip Fulcher 3d2e2566d2 docs(nx-dev): remove Auguest webinar notifiers (#32516) 2025-08-26 15:55:17 -04:00
Colum Ferry a2f6e4f50b docs(docker): explain default version scheme option (#32508)
Add docs explaining docker version schemes and the default option

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-26 13:09:38 -04:00
Leosvel Pérez Espinosa a5606adff4 chore(js): fix test setup (#32515)
Fix e2e test failing for pnpm in nightlies.
2025-08-26 16:30:08 +00:00
Leosvel Pérez Espinosa ec6b707d13 fix(js): use a unique typescript custom condition name for the workspace (#32429)
## Current Behavior

Workspaces using the new setup with TS project references + package
manager workspaces are generated with a custom condition named
`development`. Projects have a conditional `development` entry point
that points to the source to improve the DX in the repo.

This condition name can cause issues with published libraries because
it's not unique, and some build tools automatically pick it up. While
using it locally in the workspace is safe because the source file
exists, this is not the case when the published library is used outside
the workspace.

## Expected Behavior

Workspaces using the new setup with TS project references + package
manager workspaces should be generated with a unique custom condition
named after the name in the root `package.json` file. Projects should
have a conditional entry point matching that name and pointing to the
source to improve the DX in the repo.

Users can customize the custom condition and name it something else as
long as it starts with `@nx-source/` so that Nx generators and helpers
can identify it. Additionally, in the unlikely scenario that the root
`package.json` doesn't have a `name` set, Nx will fall back to use
`@nx/source`.

This new behavior matches an emerging pattern of using scoped custom
export conditions for pointing to the source:

- [Announcing TypeScript
5.7](https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/#path-rewriting-for-relative-paths:~:text=As%20a%20result%2C%20if%20you%E2%80%99ve%20been%20using%20a%20workspace%2Dstyle%20layout%20with%20multiple%20packages%20referencing%20each%20other%2C%20you%20might%20need%20to%20use%20conditional%20exports%20with%20scoped%20custom%20conditions%20to%20make%20this%20work%3A)
- [Live types in a TypeScript
monorepo](https://colinhacks.com/essays/live-types-typescript-monorepo#:~:text=Here%27s%20how%20a%20custom%20condition%20might%20look%20in%20your%20package.json.%20There%27s%20nothing%20special%20about%20the%20string%20%22%40colinhacks/zod%22%20here!%20It%20could%20be%20anything.)
- [Loading from
Source](https://github.com/isaacs/tshy?tab=readme-ov-file#loading-from-source)

## Related Issue(s)

Fixes #31332
2025-08-26 09:25:06 +02:00
Louie Weng af446081d6 fix(nx-cloud): read package.json correctly for workspace name when creating new cloud workspace (#32504)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

When we attempt to create a new cloud-connected workspace with
`create-nx-workspace`, we read `package.json` from the incorrect
location. This means we are not able to retrieve the workspace name
correctly and results in the newly created cloud workspace having the
fallback name `my-workspace`

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

When we try to read `package.json` we pass in in the correct directory
in which we expect to find the file. This allows us to correctly parse
the json file and retrieve the correct workspace name.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-25 20:23:03 +00:00
Chau Tran 0919b6237e feat(graph): unwrap RankDirPanel from experimental (#32490)
closes #32482 #32481
2025-08-25 13:40:26 -04:00
Chau Tran 348758e599 fix(nx-dev): task graph should not break docs (#32501)
There was a recent change to `TaskGraphClientResponse` where we drop the
multiple `taskGraphs` and replace with single `taskGraph`. Goal was to
improve the performance for `nx graph` task graph in general and support
multiple targets. Docs pages that render task graph were not updated to
adhere to the new single task graph model. This PR fixes it.

This PR also adjusts the project graph to handle missing props more
gracefully.
2025-08-25 11:28:53 -05:00
Jack Hsu ca54cf84be docs(misc): fix OpenGraph image generation for nested technologies (#32485)
The image generation does not account for nested paths like we have in
the `/technologies` section. That means the `og:image` meta tag is
pointing to non-existent images.

## Current Behavior
OpenGraph images return 404 for nested technology pages (e.g.,
/technologies/build-tools/docker/introduction). The generation script
only processes top-level items and doesn't recurse through nested
structures.

e.g.
https://nx.dev/technologies/typescript/recipes/switch-to-workspaces-project-references
points to
https://nx.dev/images/open-graph/technologies-typescript-recipes-switch-to-workspaces-project-references.jpg
but this was not generated

## Expected Behavior
All pages should have working OpenGraph images, including deeply nested
technology documentation.

e.g.
https://nx-dev-git-doc-163-nrwl.vercel.app/technologies/typescript/recipes/switch-to-workspaces-project-references
still points to
https://nx.dev/images/open-graph/technologies-typescript-recipes-switch-to-workspaces-project-references.jpg
but this is now generated
(https://nx-dev-git-doc-163-nrwl.vercel.app/images/open-graph/technologies-typescript-recipes-switch-to-workspaces-project-references.jpg)

## Related Issue(s)
Fixes DOC-163
2025-08-25 11:55:45 -04:00
Craigory Coppola b9488968d2 feat(core): auto-retry lock files changed daemon msgs (#32489)
## Current Behavior
We retry NX_VERSION_CHANGED errors

## Expected Behavior
We retry NX_VERSION_CHANGED and LOCK_FILES_CHANGED errors

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-25 10:18:09 -04:00
Jason Jean 1b3a533f62 feat(core): add incompatibleWith field for packageJsonUpdates (#32464)
## Summary

- Adds support for `incompatibleWith` field in `packageJsonUpdates` to
prevent updates from running when specified packages are present
- Provides the opposite functionality of the existing `requires` field
- Implements logic to skip packageJsonUpdates when any incompatible
packages are found

## Changes Made

### Core Implementation
- Added `incompatibleWith?: Record<string, string>` to
`PackageJsonUpdates` type
- Implemented `areIncompatiblePackagesPresent()` method with semver
checking
- Updated migration logic to check for both requirements and
incompatibilities
- Added comprehensive tests for both positive and negative scenarios

### Vite 7 Compatibility Fix
- Added `incompatibleWith: { "@remix-run/dev": "*" }` to vite 7
packageJsonUpdate
- Prevents vite 7 update from running when @remix-run/dev is present

## Usage Example

```json
{
  "packageJsonUpdates": {
    "17.0.0": {
      "version": "17.0.0",
      "packages": {
        "new-package": { "version": "^17.0.0" }
      },
      "incompatibleWith": {
        "old-package": "*",
        "conflicting-package": "<2.0.0"
      }
    }
  }
}
```

The update will be skipped if either `old-package` (any version) or
`conflicting-package` (version < 2.0.0) is present in the workspace.

## Test Plan

- [x] Added unit tests covering both positive and negative scenarios
- [x] Verified existing tests still pass
- [x] Applied to real-world case (vite 7 + Remix incompatibility)
- [ ] Test on workspace with @remix-run/dev to verify vite 7 is skipped
- [ ] Test on workspace without @remix-run/dev to verify vite 7 is
applied

## Type of Change

- [x] New feature (non-breaking change which adds functionality)
- [x] Bug fix (non-breaking change which fixes an issue)

## Notes

This feature enables better control over migration paths and prevents
package conflicts during nx migrate operations. The vite 7 + Remix case
is a concrete example where this prevents incompatible package
combinations.
2025-08-25 10:17:49 -04:00
Leosvel Pérez Espinosa a0c78e0bb9 feat(angular): support angular v20.2 (#32351)
## Current Behavior

Angular v20.2 is not supported.

## Expected Behavior

Angular v20.2 is supported.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-25 11:57:14 +02:00
Nicole Oliver 9401ae3d3f fix(nx-dev): re-enable contact form (#32493)
Re-enable the hubspot script for our contact forms.
2025-08-23 20:57:19 -05:00
Craigory Coppola c6de3de4a0 chore(repo): mitigate script injection vulnerability in PR title validation (#32488) 2025-08-23 12:33:28 +04:00
Nicole Oliver a93e74e2fb feat(nx-dev): nx.dev homepage feature illustrations and CTA (#32298)
Updates one feature illustration so that it renders well in SVG, and
adds a CTA with some stats about Nx's impact.
2025-08-22 14:37:00 -07:00
Jason Jean 84163dc402 feat(repo): un-add GitHub Actions workflow to validate PR title (#32486)
… (#32458)"

This reverts commit c916349179.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This workflow may have a vulnerability.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

We'll investigate it before re-introducing it.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-22 15:45:45 -04:00
Steven Nance c043b122d6 fix(core): allow additional properties in ProjectMetadata type (#32483)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The `ProjectMetadata` type does not allow for additional properties,
despite the schema having `"additionalProperties": true`. This prevents
folks who are extending Nx and adding details there from doing so in a
way that does not result it type errors.

## Expected Behavior
Userland code extending Nx should be able to add to ProjectMetadata
without running into type errors.
2025-08-22 14:58:50 -04:00
Jack Hsu 1976d56457 docs(misc): fix issues with base href, rewrites, and connecting next.js and astro docs (#32484)
This PR fixes issues with connecting new Astro docs with the `/docs`
rewrite rule on Next.js side.

https://www.loom.com/share/150deedd25a24259b0aa8cb141cec1d3

The redirects now go through Netlify since it's a lot more flexible, and
we need to do that later when porting Next.js to Netlify, etc.

## Not done / follow-up:
Other pages and UI components that use `<Link>` to a doc page need to
check against `NEXT_PUBLIC_ASTRO_URL` and make sure to use the updated
`/docs` path for that. I only handled the homepage for now just to show
it working.
2025-08-22 14:36:08 -04:00
Chau Tran 560c0c6ae5 fix(graph): nxArgs.projects can be an empty array (#32479)
make sure when no projects filter is applied, we should build a `/all`
URL
2025-08-22 18:28:11 +00:00
Caleb Ukle 95e603e792 docs(nx-dev): add sitemap and robots.txt as static assets (#32461)
update robots.txt to point to the sitemap-index.xml so crawlers
shouldn't actually look at sitemap.xml directly anyway
but also included sitemap.xml to match that of the sitemap-index.xml
content for historical reasons in case anything still references that
older sitemap
2025-08-22 13:47:44 -04:00
Colum Ferry d6266ebcbe docs(docker): add docker overview page (#32469)
## Current Behavior
There is currently no overview page for the Docker plugin, just
documentation on the using it with Nx Release.

## Expected Behavior
Add an overview page for the Docker plugin
2025-08-22 12:28:01 -04:00
Leosvel Pérez Espinosa 86ebc846d7 feat(js): detect duplicate project references in @nx/js:typescript-sync (#32443)
## Current Behavior

The `@nx/js:typescript-sync` generator does not detect duplicate project
references.

## Expected Behavior

The `@nx/js:typescript-sync` generator should detect duplicate project
references.
2025-08-22 16:25:40 +00:00
Louie Weng 82652db569 fix(gradle): allow test target name to be configuration from nx.json (#32416)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

We had hardcoded test target names which meant that users who specify
custom test suites would not get their atomized tests correctly picked
up.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Allow users to configure the `testTargetName` field in their `nx.json`
and correctly identify which tasks to atomize.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-22 09:11:59 -07:00
Colum Ferry 5a423f9c04 fix(expo): export output should be within project directory (#32477)
## Current Behavior
`expo export` expects the `--output-dir` to be within the project
directory.
When using Nx w/o Inference Plugins, we generate an export target that
attempts to place the output directory outside the project directory.

## Expected Behavior
Ensure that the output directory is within the project directory.
2025-08-22 17:04:44 +01:00
Caleb Ukle 0c765fe9d9 docs(nx-dev): update sidebar to contain auto generated content + static files (#32478)
- **docs(nx-dev): rename directory to match existing routes**
- **docs(nx-dev): use route middleware to populate sidebar w/ auto
generate command docs**


Unlike the technology section w/convention based file structure driving
the content that is auto generated. the devkit/nx-cli/cnw pages do not
have a reference file structure to generate from. so we leverage the
astro content collections to pull the desired pages. only issues is this
has to be at "run time" and not at setup time. which means we have to
inject these routes via the route middleware.
2025-08-22 16:03:17 +00:00
Louie Weng 7aa7cbe927 fix(gradle): use AST parsing to migrate updates to version catalogs (#32463)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

When we migrate version catalogs to use new versions of the gradle
project graph plugin, we lose the original formatting of the version
catalogue file.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

We use AST parsing on the version catalogue so that we can make version
edits on the specific portion of the file.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-22 11:56:16 -04:00
Leosvel Pérez Espinosa 0494d09e8e fix(misc): check for packages existence to detect pnpm workspaces setup (#32474)
## Current Behavior

When detecting whether a workspace is set up with pnpm workspaces, we
only check for the existence of the `pnpm-workspace.yaml` file. While
most of the time that's enough, it's not entirely correct because that
file can exist without a `packages` entry and solely contain other
settings.

## Expected Behavior

When detecting whether a workspace is set up with pnpm workspaces, we
should check for the existence of the `pnpm-workspace.yaml` file and the
`packages` entry.
2025-08-22 11:39:28 -04:00
MaxKless 900bb277ab fix(core): repair nx mcp in pnpm/yarn (#32452)
This pull request updates the `mcp.ts` command handler to improve
compatibility with multiple package managers and enhance argument
handling for command execution. The changes ensure that the correct
flags are used for each package manager and that commands with spaces
are executed properly.


* Adjusted arguments passed to the `dlx` command for `npm`, `yarn`, and
`bun` to use their respective flags (`-y`, `--quiet`, `--silent`),
ensuring consistent behavior across different package managers.
* Improved handling of `dlx` commands that may contain spaces (e.g.,
`pnpm dlx`) by splitting the command and passing arguments appropriately
to `spawnSync`.
* Updated both `mcpHandler` and `showHelp` functions to use the new
argument handling logic for executing commands and displaying help
output.
2025-08-22 10:00:20 -04:00
Caleb Ukle ed723b0406 docs(nx-cloud): add new nx cloud intro page (#32432)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-22 09:59:54 -04:00
Caleb Ukle 66df12592f docs(nx-cloud): update launch template example (#32454)
- add yaml anchors
- add patch dirs to cache restore keys

Related to DOC-152

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-22 13:46:46 +00:00
Colum Ferry e631602489 chore(react-native): mark react-native and expo as golden (#32472)
Mark React Native and Expo projects as Golden
2025-08-22 09:41:07 -04:00
Jack Hsu d821e0eecf chore(misc): remove .env.local since we should be setting these elsewhere (#32475)
Remove unnecessary file.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #DOC-157
2025-08-22 09:33:27 -04:00
Leosvel Pérez Espinosa 7a435f4244 fix(core): create pnpm peer deps settings in the appropriate location when creating workspace (#32470)
## Current Behavior

When creating a workspace, some pnpm-specific settings are written to an
`.npmrc` file in the workspace root. Npm warns about those unknown
config properties.

## Expected Behavior

The pnpm-specific settings should be written to the
`pnpm-worskpace.yaml` file for pnpm versions that support it (10.6.0+).
2025-08-22 09:33:04 -04:00
Colum Ferry 5c1ff81384 chore(repo): cleanup packageJson updates for angular rspack (#32468) 2025-08-22 09:30:26 -04:00
Leosvel Pérez Espinosa a7a3508f48 chore(repo): stop reusing test runner browsers from agent setup (#32473)
## Current Behavior

The e2e tests in the repo can sometimes fail due to Cypress and/or
Playwright version mismatches between the version in the repo lockfile
and the version that gets installed in workspaces generated when running
the e2e tests.

The e2e tests rely on the browsers installed by the agent, but the agent
installs the browser for the version the repo lockfile has, while the
e2e tests need the version that gets generated in the workspaces.

## Expected Behavior

The e2e tests in the repo should not fail due to Cypress and/or
Playwright version mismatches. It's unreliable to rely on the browsers
installed by the agent due to potential version mismatches.
2025-08-22 08:32:47 -04:00
Craigory Coppola 2e39402591 fix(core): handle no daemon when stopping (#32455)
## Current Behavior
When daemon is not running, its pid is null... We don't handle this in
`stop`

## Expected Behavior
We handle this in stop.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-21 21:59:18 -04:00
Jason Jean 0c961801f4 chore(repo): update nx to 21.5.0-beta.1 (#32436)
Updating Nx from 21.4.0-beta.12 to 21.5.0-beta.1
2025-08-21 16:58:26 -04:00
Craigory Coppola c916349179 feat(repo): add GitHub Actions workflow to validate PR titles (#32458)
## Current Behavior

Currently, there is no automated check to ensure that PR titles follow
our conventional commit format. This can lead to inconsistent PR titles
that don't match our commit conventions.

## Expected Behavior

With this change, all PR titles will be automatically validated against
our git commit rules when a PR is:
- Opened
- Edited
- Synchronized
- Reopened

The check uses the existing `scripts/commit-lint.js` script to validate
PR titles, ensuring they follow the same format as our commit messages
(e.g., `feat(scope): description`, `fix(scope): description`, etc.).

## Related Issue(s)

This was requested to improve PR quality and consistency across the
repository.

## Implementation Details

- Added a new GitHub Actions workflow:
`.github/workflows/pr-title-validation.yml`
- The workflow writes the PR title and body to a temporary file in the
format specified
- Runs `node ./scripts/commit-lint.js` on the file to validate the PR
title
- The check will fail if the PR title doesn't match our conventional
commit format
- The workflow only runs for the `nrwl` repository owner (consistent
with other workflows)

## Test Plan

- [x] Tested locally with valid PR titles (e.g., `feat(core): add new
feature`)
- [x] Tested locally with invalid PR titles (confirmed validation
failure)
- [x] Tested with breaking change notation (`fix(core)!: breaking
change`)
- [ ] Test on actual PR once merged

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-21 16:31:27 -04:00
Caleb Ukle 5bdfc76a30 docs(nx-cloud): update to new onboarding urls (#32456) 2025-08-21 20:06:00 +00:00
Jason Jean b3dc00584a feat(tools): add repository update system for automated Nx migrations (#32124)
## Current Behavior

There is no automated system for updating multiple repositories with Nx
migrations, requiring manual updates across different repositories.

## Expected Behavior

A comprehensive TypeScript-based automation system that can efficiently
update multiple repositories with Nx migrations using GitHub CLI
integration and concurrent processing.

## Related Issue(s)

Introduces a new tool for automating repository updates with Nx
migrations.

## Changes Made

### 🚀 New Repository Update System
- **Automated repository cloning**: Uses GitHub CLI with shallow clones
(`--depth 1`) for fast setup
- **Package manager detection**: Automatically detects npm, pnpm, yarn,
or bun based on lockfiles
- **Concurrent processing**: Clones and updates multiple repositories in
parallel
- **Nx migration automation**: Runs `nx migrate` with automatic commit
generation
- **Pull request creation**: Automatically creates PRs with consistent
formatting

### 📁 Project Structure
```
tools/update-repos/
├── src/
│   ├── setup-repos.ts          # Clone repositories concurrently
│   └── update-repo.ts          # Update repos with migrations
├── config/
│   └── repos.json              # Repository configuration
├── project.json                # Nx project configuration
├── tsconfig.json               # TypeScript configuration
├── tsconfig.lib.json           # TypeScript library configuration
└── README.md                   # Comprehensive documentation
```

### ⚙️ Nx Targets
- `setup-update-repos`: Clone all configured repositories
- `update-nx-repo`: Update the Nx repository
- `update-ocean-repo`: Update the Ocean repository  
- `update-nx-examples-repo`: Update the Nx examples repository
- `update-all-repos`: Update all repositories with progress tracking

### 🔧 Key Features
- **OS temp directory isolation**: Stores clones in
`os.tmpdir()/updating-nx/repos`
- **TypeScript compilation**: Full Nx project with proper build pipeline
- **Error handling**: Comprehensive error catching and reporting
- **Verbose logging**: Real-time progress tracking with timestamps
- **GitHub CLI integration**: Authenticated operations for cloning and
PR creation

### 📚 Documentation
- Complete usage instructions and examples
- Architecture overview and workflow explanation
- Troubleshooting guide for common issues
- Performance optimization details
- Security considerations and best practices

This system provides a robust, scalable solution for maintaining
consistency across multiple repositories when updating Nx versions.
2025-08-21 15:49:25 -04:00
Jack Hsu 2c1461c13f docs(misc): use /docs as the base href of astro docs to the links and assets are generated correctly (#32453)
This PR updates the base href for the new astro docs to match how we
plan to launch it.

The assets including `_astro/` and `.netlify/` are rewritten correctly
now, as well as stripping trailing slash to match what we have in
Next.js.
2025-08-21 14:25:32 -04:00
Chau Tran a27707414d feat(graph): task graph support multiple targets (#32418)
- [x] graph-client supports multiple targets with multiselect and query
params `?targets`
- [x] `nx graph` supports multiple targets (i.e: `nx run-many -t
build,test --graph`

<img width="277" height="385" alt="image"
src="https://github.com/user-attachments/assets/6869b652-2ecb-4afb-9ae5-ec29628afec1"
/>
2025-08-21 13:00:21 -05:00
Jack Hsu 52e16823a6 docs(misc): skip Netlify adapter for astro-docs if local (#32446)
By skipping the Netlify adapter, local preview server works again.
2025-08-21 13:28:52 -04:00
Leosvel Pérez Espinosa 1fda6fe256 fix(angular): do not update project configuration when not changes were made in migration (#32448)
Avoid writing back the project configuration when the migration made no
changes to it.
2025-08-21 12:12:19 -04:00
Craigory Coppola d298de5dd9 fix(devkit): include UPDATE changes in findCreatedProjectFiles for generator callbacks (#31429)
## Current Behavior

getProjects(Tree) from project-configuration.ts does not return projects
created in generators when called from generator callbacks. This happens
because findCreatedProjectFiles only looks for changes with type ===
'CREATE', but during callbacks, the tree has already been flushed to
disk, so newly created project files are marked as 'UPDATE' instead of
'CREATE'.

## Expected Behavior

getProjects(Tree) should return all projects, including those created
during the current generator run, even when called from generator
callbacks.

## Changes Made

- Modified findCreatedProjectFiles() to include both CREATE and UPDATE
changes
- Added deduplication using Set to prevent duplicate project files
- Added comprehensive test coverage for the callback scenario

## Related Issue(s)

Fixes #29852

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
2025-08-21 11:54:22 -04:00
Colum Ferry 1ca3cfef93 fix(angular-rspack): do not error on server budget violation (#32445)
## Current Behavior
Angular with Esbuild does not error when server bundles violate the
budgets.
Currently, Angular Rspack will error when server bundles violate the
budgets.

## Expected Behavior
Match the behaviour with Angular with Esbuild in Angular Rspack.
Do not error when server bundles violate the budgets.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-21 16:34:54 +01:00
Craigory Coppola cb27e6a42f fix(misc): respect string values in alwaysAddToPackageJson migration flag (#32433)
## Summary

Fixed bug where `alwaysAddToPackageJson: "devDependencies"` was ignored
and always defaulted to "dependencies".

- Updated ternary logic in migrate.ts to properly handle string values
- Added comprehensive test case for string values
- Maintains backward compatibility with boolean values

## Test Plan

- [x] Added test case covering both "dependencies" and "devDependencies"
string values
- [x] Verified existing tests still pass
- [x] Confirmed backward compatibility with boolean values

Fixes #30586

Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Craigory Coppola <AgentEnder@users.noreply.github.com>
2025-08-21 10:19:36 -04:00
Craigory Coppola f7b4a0ebd2 fix(plugin): handle directory paths correctly in executor and generator generators (#31856)
Fixes path handling issue in @nx/plugin generators where the last folder
name in the path was being ignored.

The executor and generator generators were not creating subdirectories
as expected when provided with directory paths. This fix detects when
the path looks like a directory path and adjusts the directory to
include the artifact name as a subdirectory.

**Changes:**
- Modified normalizeOptions in both executor and generator generators to
detect directory paths
- Added logic to create subdirectories when the path segment matches the
artifact name
- Added comprehensive tests to verify the fix works correctly
- Ensures backward compatibility with existing file path usage

Fixes #31803
Fixes #31776

Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Craigory Coppola <AgentEnder@users.noreply.github.com>
2025-08-21 10:18:57 -04:00
Leosvel Pérez Espinosa d23cb37d7e fix(core): fail fast when running commands in parallel (#32386)
## Current Behavior

When running commands in parallel with `nx:run-commands`, if a command
fails, others are not stopped, and the task continues until all commands
finish. This means that if a long-running command is running, it won't
be stopped when other commands have already failed.

## Expected Behavior

`nx:run-commands` should fail fast. In a parallel execution, the rest of
the running commands should be terminated if a command fails.

## Related Issue(s)

Fixes #28477
2025-08-21 09:40:57 -04:00
Philip Fulcher 3682a89b85 docs(nx-dev): update subheading on Java landing page (#32444) 2025-08-21 15:18:31 +02:00
Colum Ferry b8f9a95266 fix(module-federation): do not rely on virtualRuntimeEntry #31831 (#32387)
## Current Behavior
Previously, we needed to rely on `virtualRuntimeEntry` to allow builds
between caching to operate successfully.

## Expected Behavior
In more recent version of `@module-federation/enhanced` this is no
longer the case.
By setting this option, it is now inflating the size of the bundles
produced by Webpack and Rspack
As it is no longer a strict requirement, remove it. 

Users can still set it manually if they run into issues

## Related Issue(s)

Fixes #31831
Fixes #32404
2025-08-21 14:13:20 +01:00
Caleb Ukle 22b8fc45af docs(nx-dev): handle reported content render/format issues (#32437)
- **docs(nx-dev): fixup markdoc usage across .mdoc files, closes:
DOC-144**
- **docs(nx-dev): clean up markdoc on tuts. closes: DOC-129**
- **docs(nx-dev): fix CTA text color issues**
- **docs(nx-dev): cleanup assets and fix img pathing when deployed.
closes DOC-130**
2025-08-21 08:25:31 -04:00
Colum Ferry d8b98e3e92 feat(vite): support vite 7 (#32422)
Add support for Vite 7
2025-08-21 08:17:12 -04:00
Craigory Coppola 885a3d515d fix(core): use black for all fg elements when in light theme (#32415)
## Current Behavior
We use dark gray for a secondary fg color, but when dimmed and in
certain terminals its not easy to read for light mode

## Expected Behavior
We've struggled with getting this pallet right for a while, while we
continue working on it we'll just set it to all black

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-20 23:42:59 -04:00
Craigory Coppola fc8f9a9f9a feat(js): add includeIgnoredAssetFiles option and per-asset includeIgnoredFiles (#31813)
## Summary

Adds support for including files that are ignored by `.gitignore` and
`.nxignore` when copying assets in @nx/js executors.

### Changes Made

- **Global option**: Added `includeIgnoredAssetFiles` option to
@nx/js:tsc and @nx/js:swc executors
- **Per-asset option**: Added `includeIgnoredFiles` option to
`AssetGlob` interface for granular control
- **Precedence logic**: Per-asset `includeIgnoredFiles` takes precedence
over global `includeIgnoredAssetFiles`
- **Updated all implementations**: Modified `CopyAssetsHandler`, batch
processing, and utility functions

### Usage Examples

**Global level** - include ignored files for all assets:
```json
{
  "executor": "@nx/js:tsc",
  "options": {
    "includeIgnoredAssetFiles": true,
    "assets": ["src/assets"]
  }
}
```

**Per-asset level** - include ignored files for specific asset patterns:
```json
{
  "executor": "@nx/js:tsc", 
  "options": {
    "assets": [
      {
        "glob": "**/*",
        "input": "src/assets",
        "output": "assets",
        "includeIgnoredFiles": true
      }
    ]
  }
}
```

### Test Plan

- [x] TypeScript compilation passes
- [x] All existing tests pass
- [x] Documentation updated automatically
- [x] Both TSC and SWC executors support the new options

###
Fixes: [20309](https://github.com/nrwl/nx/issues/20309)

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Craigory Coppola <AgentEnder@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-08-20 23:40:31 -04:00
Craigory Coppola 0e2b903515 fix(core): retry current message when receiving NX_VERSION_CHANGED from daemon (#32417)
## Current Behavior

When the Nx daemon detects a version mismatch and returns
`NX_VERSION_CHANGED`, the client shuts down the connection but doesn't
retry the current message that triggered the error. This causes the
current operation to fail silently.

## Expected Behavior

When `NX_VERSION_CHANGED` is received, the client should:
1. Shut down the current connection
2. Automatically retry the message that triggered the version change
error
3. Continue with the operation transparently

## Related Issue(s)

This improves daemon resilience when Nx versions change during
development.

Fixes #29446

## Changes Made

- Modified `packages/nx/src/daemon/client/client.ts` to track the last
sent message and retry it when `NX_VERSION_CHANGED` is received
- Added `retryLastMessage()` method to `PromisedBasedQueue` to support
message retry
- Added proper logging for version change detection in
`shutdown-utils.ts`

The fix ensures that operations don't fail when the daemon detects a
version change, improving the developer experience.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 23:40:17 -04:00
Jason Jean 4ba2085fec chore(repo): remove users from Claude GitHub Actions permissions (#32434)
## Current Behavior

The Claude GitHub Actions workflow includes xiongemi, ndcunningham,
isaacplmann, and mandarini in the allowed users list.

## Expected Behavior

These users should be removed from the allowed users list for Claude
GitHub Actions workflow permissions.

## Related Issue(s)

<!-- No specific issue number -->

Fixes configuration by removing users from allowed list.
2025-08-20 19:37:13 -04:00
Craigory Coppola 4ac6923328 fix(core): enhance validation for continuous task dependencies (#31786)
## Current Behavior
We error if a non-parallel task has a continuous dependency, but when
running a command that contains a task that depends on a continuous task
which itself is marked as non-parallel we do not error. This results in
the command hanging on the continuous non-parallel task, instead of
running the parent task as well.

## Expected Behavior
We error in both situations.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Signed-off-by: AgentEnder <craigorycoppola@gmail.com>
Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-08-20 19:27:45 -04:00
Jason Jean cc7e7543c2 fix(core): only prompt for NX Console installation in TTY environments (#32425)
## Current Behavior

Currently, the NX Console installation prompt can appear in
non-interactive environments like CI/CD pipelines, causing processes to
hang indefinitely waiting for user input.

## Expected Behavior

The NX Console installation prompt should only appear in TTY
(interactive terminal) environments where users can actually respond to
the prompt.

## Related Issue(s)

This change adds a TTY check (`process.stdout.isTTY`) before showing the
NX Console installation prompt, preventing hanging in automated
environments while preserving the interactive experience for developers
working in terminals.
2025-08-20 15:10:55 -04:00
Juri Strumpflohner 20842f1468 fix(nx-dev): update navbar CTA buttons and updates event tracking (#32392) 2025-08-20 18:36:04 +00:00
Jack Hsu 8fbc5f6278 docs(misc): update Run Tasks feature pages so the title aligns with sidebar in both old and new docs (#32430)
The title didn't make much sense, let's update it.
2025-08-20 13:59:22 -04:00
Tomáš Čarnecký 9248dcd9a9 feat(nx): use platform certificate trust store (#31999)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior

Certificates in the local trust store are ignored, because reqwest
(rustls) is using webpki-roots.

## Expected Behavior

Certificates from the local trust store are trusted.

This PR solves this the same way as turborepo - by turning on the
`rustls-tls-native-roots` feature in reqwest.
2025-08-20 13:49:54 -04:00
Jack Hsu ec6274d225 docs(nx-dev): fix broken markdoc components in documentation (#32427)
This PR re-enables the escaped markdoc tags. Note that graph and PDV
tags that pointed to an external JSON file is changed to inline the JSON
instead so we don't need that extra file loading logic.

## Current Behavior
Multiple pages in the Astro documentation site display broken components
due to:
- Escaped template blocks (\{% ... %\}) that prevent proper rendering
- Component name mismatches using hyphens instead of underscores
- Missing side-by-side component causing "Undefined tag" errors
- Graph components showing "Could not parse JSON" due to markdown code
blocks
- External JSON file references not being inlined properly

## Expected Behavior
All documentation pages render correctly with:
- Proper template block syntax without backslash escaping
- Component names matching markdoc.config.mjs registrations
- All required components available and properly configured
- Graph and project_details components displaying JSON data inline
- All Markdoc components functioning as intended

<img width="824" height="849" alt="Screenshot 2025-08-20 at 10 55 53 AM"
src="https://github.com/user-attachments/assets/3d94e2a8-c971-49a6-a7aa-95ac40a8c86b"
/>

<img width="797" height="627" alt="Screenshot 2025-08-20 at 12 33 19 PM"
src="https://github.com/user-attachments/assets/1352e8bd-f5df-4db0-8679-a1627b2b6911"
/>

Also add back the `side_by_side` tag for now since it's used in a couple
of places:

<img width="797" height="627" alt="Screenshot 2025-08-20 at 12 33 19 PM"
src="https://github.com/user-attachments/assets/4ecaf12b-592f-4885-88d8-bc25e4c7d087"
/>
<img width="775" height="1059" alt="Screenshot 2025-08-20 at 12 55
23 PM"
src="https://github.com/user-attachments/assets/0cc32bd4-e2f0-41b9-b2a6-29edabccae0e"
/>


## Related Issue(s)
Fixes DOC-148

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-20 13:18:09 -04:00
Jack Hsu 2369e16b55 docs(nx-dev): convert code snippets to Starlight format for filename display (#32426)
## Current Behavior
Code snippets use custom Nx attributes (fileName and highlightLines)
that don't display properly in Astro Starlight

## Expected Behavior
Code snippets use Starlight's native format with filenames shown as
comments and highlights using curly brace syntax


<img width="980" height="710" alt="Screenshot 2025-08-20 at 10 58 07 AM"
src="https://github.com/user-attachments/assets/38c6629f-8be3-4934-b839-ae5ece980f36"
/>

## Related Issue(s)
Fixes DOC-137
2025-08-20 13:14:02 -04:00
Jack Hsu 4b77d136a4 feat(nx-dev): configure rewrite to astro-docs when NEXT_PUBLIC_ASTRO_URL is set (#32424)
This PR prepares for the canary environment where we can use `/docs/*`
for the new astro docs while keeping the same domain.

## Current Behavior
The nx-dev Next.js app doesn't have any rewrite rules for the `/docs`
path, making it unable to proxy requests to the Astro documentation
site.

## Expected Behavior
When the `NEXT_PUBLIC_ASTRO_URL` environment variable is set, the
Next.js app configures rewrites for `/docs` and `/docs/*` paths to proxy
to the Astro documentation site. If the environment variable is not set,
no rewrites are configured, maintaining backward compatibility.

## Related Issue(s)
Fixes DOC-134

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-20 13:13:53 -04:00
Jack Hsu 8973bae5d6 docs(nx-dev): remove duplicate h1 titles from mdoc pages (#32423)
## Current Behavior
The Astro/Starlight documentation pages display duplicate titles because
both the frontmatter title and an h1 heading in the content are being
rendered. This creates a poor user experience with the same title
appearing twice at the top of each page.

## Expected Behavior
Each documentation page should display its title only once. Starlight
automatically renders the frontmatter title as the page's h1, so there
should be no h1 headings in the content body. The frontmatter title
should be the single source of truth for the page title, with optional
sidebar labels for customization.

## Related Issue(s)
Fixes DOC-125
2025-08-20 13:13:45 -04:00
Leosvel Pérez Espinosa c7d0c7310b cleanup(core): normalize paths in test expectations to prevent test failures in macos (#32410)
## Current Behavior

Some test expectations fail in macOS due to some paths not being
normalized in the assertions.

## Expected Behavior

Tests should pass.
2025-08-20 12:56:32 -04:00
Jason Jean b8eb249c9a fix(core): handle unsupported platforms in Cursor IDE install command (#32419)
Fixes platform detection logic for Cursor editor to handle unsupported
OS gracefully.
2025-08-20 09:23:39 -04:00
Leosvel Pérez Espinosa 2788d91979 fix(js): do not infer the project type in the @nx/js/typescript plugin (#32421)
## Current Behavior

The `@nx/js/typescript` plugin incorrectly infers that all projects are
libraries. This is not correct, because apps also have tsconfig files
which would be processed and targets will be inferred for them (e.g.
`typecheck`). Depending on the order of the plugin execution, it can
result in projects having the wrong type.

## Expected Behavior

The `@nx/js/typescript` plugin should not infer the project type. The
project type will be correctly derived later, when the project graph
nodes are normalized.
2025-08-20 10:58:46 +00:00
Craigory Coppola bdb466ecfd fix(devkit): restore peer dep range to 2 majors (#32406)
## Current Behavior
Nx release now updates peer dependency versions, which is great... but
it broke the peer dep range in the published version of @nx/devkit.

## Expected Behavior
@nx/devkit maintains a version range of +/- 1 major version of nx. We
will fix release soon.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31801 (already fixed, but comments on this highlighted the
problem)
2025-08-20 01:10:29 -04:00
Jason Jean 960b9c6f90 fix(core): ensure deterministic dummy task generation in task graphs (#32414)
## Summary

Fixes an issue where dummy tasks (created when dependency projects don't
have required targets) would generate non-deterministic dependency
structures based on target processing order.

## Current Behavior

When creating task graphs with targets in different orders, dummy tasks
would inherit different configurations from different source tasks,
leading to inconsistent task graphs.

For example:
- Processing `[test, lint]` vs `[lint, test]` would create the same
dummy task IDs
- But the dummy tasks would have different dependency structures
depending on which task created them first

## Expected Behavior

Task graphs should be deterministic regardless of target processing
order. The same dummy task should always have the same dependencies.

## Related Issue(s)

This addresses the issue described where task graph generation was
non-deterministic due to dummy task dependency variations.

## Test Plan

- [x] Added unit test: "should create deterministic task graphs
regardless of target order"
- [x] Verified existing tests continue to pass
- [x] Test validates task graphs are identical when targets are
processed in different orders

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-08-19 18:27:18 -04:00
Jack Hsu 5c699c70ab docs(nx-dev): fix broken links in footer for astro site (#32413)
This PR fixes an issue where the astro site has broken footer links due
to them not being in the app.

e.g. https://nx-docs.netlify.app/getting-started/intro
2025-08-19 16:44:21 -04:00
Juri c02d448b9f feat(nx-dev): link ukg article on homepage 2025-08-19 22:38:52 +02:00
Nicole Oliver f2bda54c22 docs(misc): allow cookiebot to be disabled (#32394)
Allow for temporarily disabling the cookie consent mechanism.
2025-08-19 12:09:27 -07:00
Jack Hsu 47043550a8 docs(nx-dev): side technologies sidebar ordering and collapsed config (#32411)
## Current Behavior

The sidebar in the Astro docs has two issues:
1. Introduction pages are not appearing first in technology sections -
they appear after Generators, Executors, and Migrations
2. Nested groups (like Guides folders and sub-technology sections) are
expanded by default, making the sidebar difficult to navigate

## Expected Behavior

With this PR:
1. Technology sections now display items in the correct order:
   - Introduction (if exists)
   - Guides (if exists)
   - Generators (if exists)
   - Executors (if exists)
   - Migrations (if exists)
   - Everything else (other static files and nested sections)

2. All nested groups are collapsed by default for better navigation:
   - Guides folders are collapsed
- Sub-technology sections (Next, Remix, Express, Nest, etc.) are
collapsed
   - Any auto-generated folder groups are collapsed

<img width="789" height="484" alt="Screenshot 2025-08-19 at 2 30 36 PM"
src="https://github.com/user-attachments/assets/0562693c-b17a-4562-8f58-a0fba50fc6fe"
/>

## Related Issue(s)

DOC-122 (Linear)
2025-08-19 14:41:53 -04:00
Jack Hsu 62bc06023d docs(docker): remove @nx/docker@next in guides since it is in latest (#32409)
Remove `@next` from `@nx/docker` plugin instructions since we published
latest (21.4.0).
2025-08-19 13:11:52 -04:00
Chau Tran 4a1a6eeb00 fix(graph): some misc fixes to the graph (#32401)
- Expanded inputs with placeholder to prevent content shifting
- Bump `@nx/graph` to fix task graph missing transitive deps issue
- Disabling cache will throw runtime errors for expanded inputs
operation so putting in a couple of safe fallbacks when things are
undefined
2025-08-19 11:16:39 -05:00
Colum Ferry 782ffa79cc chore(angular-rspack): ensure details and codeowners are correct (#32408)
Fix details regarding codeowners and package info for angular-rspack and
angular-rspack-compiler
2025-08-19 16:49:57 +01:00
Jason Jean c38eb0f9f1 fix(webpack): migrate from deprecated url.parse() to WHATWG URL API (#32399)
## Current Behavior

The PostCSS CLI resources plugins in webpack, rspack, and angular-rspack
packages currently use the deprecated `url.parse()` and `url.format()`
methods, which generate security warnings:

```
(node:xxx) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead.
```

## Expected Behavior

The code should use the modern WHATWG URL API to eliminate deprecation
warnings and improve security.

## Related Issue(s)

This change addresses the Node.js deprecation of `url.parse()` due to
security implications and lack of standardization.

## Changes Made

- **URL Parsing**: Replace `url.parse(inputUrl)` with `new
URL(normalizedUrl, 'file:///')`
- **URL Reconstruction**: Replace `url.format({ pathname, hash, search
})` with simple string concatenation
- **URL Resolution**: Replace `url.resolve(deployUrl, outputUrl)` with
`new URL(outputUrl, deployUrl).href`

## Files Modified

- `packages/webpack/src/utils/webpack/plugins/postcss-cli-resources.ts`
- `packages/rspack/src/plugins/utils/plugins/postcss-cli-resources.ts`  
- `packages/angular-rspack/src/lib/utils/postcss-cli-resources.ts`

## Implementation Details

- Uses WHATWG URL API with a `file:///` base for parsing relative URLs
consistently
- Maintains backward compatibility - all existing functionality works
the same
- Simple string concatenation for URL reconstruction is cleaner and more
readable
- Clear variable names (`normalizedUrl`, `parsedUrl`) improve code
maintainability

## Testing

- All existing tests pass
- Build and lint validation successful
- No functional changes to URL handling behavior

This migration eliminates security warnings while modernizing the
codebase to use standardized URL APIs.
2025-08-19 11:08:19 -04:00
Jason Jean d22677f48f fix(core): improve Cursor editor detection and extension installation (#32374)
## Summary
- Add CURSOR_TRACE_ID environment variable detection for Cursor
- Simplify get_env_var to be purely map-based for better testability  
- Add Cursor support to extension installation logic
- Add test case for CURSOR_TRACE_ID detection

## Test plan
- [x] All existing tests pass
- [x] New test case for CURSOR_TRACE_ID detection passes
- [x] Rust code compiles and passes clippy checks
- [x] Prepush validation passes

This ensures Nx Console extension can be properly installed in Cursor
when the CURSOR_TRACE_ID environment variable is present, providing
better support for Cursor users.

Fixes #[ISSUE_NUMBER]
2025-08-19 11:02:33 -04:00
Leosvel Pérez Espinosa 74e0de0360 fix(angular): set the tsConfig option when possible to aid with angular migrations (#32355)
## Current Behavior

Running Angular migrations (particularly Angular Material migrations)
normally results in many warnings stating that projects were skipped.
This happens because Angular migrations make some assumptions that are
not guaranteed in Nx monorepos:

- build and test tasks are literally called `build` and `test` (it they
have a different name, the Angular migrations don't handle them)
- those tasks must have a `tsConfig` option set in the task `options`
object

While Nx can't change the first assumption, it can ensure that
`tsConfig` is set in some tasks that allow it.

## Expected Behavior

Tasks using the `@nx/angular:package`, `@nx/angular:ng-packagr-lite`,
and `@nx/jest:jest` executors should have the `tsConfig` option set to
aid the Angular migrations to run.

Note: This PR restores the `tsConfig` option for the `@nx/jest:jest`
executor that was recently removed. The option description states that
it is only metadata for Angular migrations and is not used by the
executor. The option will only be set by Nx generators for Angular
projects.

## Related Issue(s)

Fixes #32138
2025-08-19 15:28:10 +02:00
Leosvel Pérez Espinosa 4bf937e408 fix(js): improve @nx/js/typescript plugin check for buildable libraries (#32405)
## Current Behavior

The `@nx/js/typescript` plugin exhibits the following wrong behaviors
when it comes to determining whether a project is buildable:

- Having a custom conditional export other than `development` pointing
to a source file means the project is not buildable
- Having any conditional export pointing to source files means the
project is not buildable
- It falls back to check against included files when `outDir` is defined

The above creates issues where some buildable libraries are not
identified.

## Expected Behavior

The `@nx/js/typescript` plugin should behave as follows (simplified)
when it comes to determining whether a project is buildable:

- If `outFile` is defined:
- If the `.` entry point is defined and it's pointing to the `outFile`
or any of its conditional exports are pointing to the `outFile`, it's
buildable
- If `exports` is not defined and `main` or `module` are defined and
pointing to the `outFile`, it's buildable
  - Otherwise, it's not buildable
- Otherwise, if `outDir` is defined:
- If the `.` entry point is defined and it's pointing to a path
contained in the `outDir` or any of its conditional exports are pointing
to a path contained in the `outDir`, it's buildable
- If `exports` is not defined and `main` or `module` are defined and
pointing to a path contained in the `outDir`, it's buildable
  - Otherwise, it's not buildable
- Otherwise (no `outFile` and no `outDir`):
- If the `.` entry point is defined and it's pointing to a path not
matched by the `files` or `include` patterns or any of its conditional
exports are pointing to a path not matched by the `files` or `include`
patterns, it's buildable
- If `exports` is not defined and `main` or `module` are defined and
pointing to a path not matched by the `files` or `include` patterns,
it's buildable
  - Otherwise, it's not buildable

The above also ensures that custom conditional exports are not a factor,
given that all that is needed is that at least one conditional export is
deemed non-buildable.

## Related Issue(s)

Fixes #32116 
Fixes #32290
2025-08-19 12:44:45 +00:00
Marc Palm 8737c07957 fix(testing): fall back to tsconfig.json in the jest resolver (#32083)
## Current Behavior

The Jest resolver requires tsconfig.(spec|test|jest).json

## Expected Behavior

The Jest resolver falls back to tsconfig.json.
2025-08-19 14:13:38 +02:00
Jason Jean 2307a8d33f chore(testing): temporarily disable failing module federation tests (#32400)
Temporarily disables failing module federation e2e tests with TODO
comments for @Coly010 to re-enable once fixed.
2025-08-18 18:35:46 -04:00
Jason Jean 6abfbc8eba Revert "feat(webpack): migrate from deprecated url.parse() to WHATWG … (#32397)
…URL API"

This reverts commit f768886ae7.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Accidentally pushed this without review

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Reverting it so it can be reviewed

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-18 17:52:16 -04:00
FrozenPandaz f768886ae7 feat(webpack): migrate from deprecated url.parse() to WHATWG URL API
Replace the deprecated url.parse() and url.format() methods with the modern WHATWG URL API in PostCSS CLI resources plugins to resolve security and maintainability concerns.

- Replace url.parse(inputUrl) with new URL(normalizedUrl, 'file:///')
- Replace url.format({ pathname, hash, search }) with simple string concatenation
- Replace url.resolve(deployUrl, outputUrl) with new URL(outputUrl, deployUrl).href
- Apply changes consistently across webpack, rspack, and angular-rspack packages

The deprecated url.parse() method is prone to security vulnerabilities and is not standardized. WHATWG URL API provides a modern, secure, and standardized way to parse URLs while maintaining all existing functionality.

Resolves deprecation warnings about url.parse() security implications.
2025-08-18 17:44:47 -04:00
Nicole Oliver 731e037f27 Revert "docs(misc): allow for disabling cookie consent" (#32391)
Reverts nrwl/nx#32378 to investigate make sure it works in production
environments as expected.
2025-08-18 16:16:22 +00:00
Nicole Oliver f6abf599d3 docs(misc): allow for disabling cookie consent (#32378)
Allow for temporarily disabling the cookie consent mechanism.
2025-08-18 08:38:12 -07:00
Jack Hsu c90809f919 docs(nx-dev): ensure rounded corners are used for codeblocks, asides, etc. (#32390)
This PR adds to the `components` CSS layers in Starlight to use rounded
corners for codeblocks and other components.

Examples:

<img width="793" height="884" alt="Screenshot 2025-08-18 at 10 25 04 AM"
src="https://github.com/user-attachments/assets/dbffa6a6-abf4-47f9-a840-9b20c588ae30"
/>
<img width="819" height="1082" alt="Screenshot 2025-08-18 at 10 24
58 AM"
src="https://github.com/user-attachments/assets/d5d75179-bf4d-4e0e-8fa6-ab97eb974d66"
/>
2025-08-18 10:52:33 -04:00
Jack Hsu f51215cb0d chore(nx-dev): improve error message when changelog fails due to expired token (#32389)
This PR improves our error message whenever our GitHub API token expires
so we're not confused about what's broken. It expires each year as
required by Octokit.

Current error:

```
 Error occurred prerendering page "/changelog". Read more:  https://nextjs.org/docs/messages/prerender-error
  HttpError: Bad credentials
```

New error:

```
Error occurred prerendering page "/changelog". Read more: https://nextjs.org/docs/messages/prerender-error

Error: The GitHub token is invalid or has expired. Please provide a new Personal Access Token (PAT) via the GITHUB_TOKEN environment variable.
```
2025-08-18 10:52:04 -04:00
MaxKless 5c6cd1fda6 docs(core): adjust MCP section with new VSCode integration (#32354) 2025-08-18 16:19:43 +02:00
Caleb Ukle c2c918d112 docs(nx-dev): move remaining cloud docs over (#32377) 2025-08-18 08:20:51 -05:00
Nicholas Cunningham 6ce1061471 fix(misc): update @types/node to v20.19.9 to support fetch API (#32092)
## Current Behavior

Nx currently installs an outdated `@types/node` version (18.16.9) which
lacks TypeScript definitions for the native `fetch` API introduced in
Node.js 18. This causes "fetch is undefined" TypeScript errors in NestJS
projects and other Node.js applications when using webpack transformers
or other build tools.

## Expected Behavior

The `fetch` API should be properly typed in TypeScript without requiring
additional type packages or workarounds. Users should be able to use the
native fetch API in Node.js applications without TypeScript compilation
errors.

## Related Issue(s)

Fixes #31637
Fixes https://github.com/nrwl/nx/issues/29714

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-18 14:00:16 +01:00
Caleb Ukle 8dee4ec540 docs(nx-dev): add redirects for astro docs (#32372)
add new redirects file
redirect root to the intro page
redirect legacy showcase projects to quickstart until those projects get
updated

closes: DOC-94
closes: DOC-114
2025-08-18 08:49:09 -04:00
Colum Ferry b5439b9ef8 fix(js): esm loader should handle absolute paths on windows #32376 (#32383)
## Current Behavior
ESM Loader for Windows is not working because it is encountering an
absolute path that is not using the `file://` protocol.

## Expected Behavior
Ensure that when loading the `esm-loader`, it uses the file protocol

## Related Issue(s)

Fixes #32376
2025-08-18 13:24:02 +01:00
Colum Ferry 55b446a654 feat(rspack): add support for converting webpack plugin configs #30292 (#32382)
## Current Behavior
We currently do not support converting webpack configs using
`NxAppWebpackPlugin` to `NxAppRspackPlugin`.

## Expected Behavior
Add support for converting webpack configs using the
`NxAppWebpackPlugin`.

## Related Issue(s)

Fixes #30292
2025-08-18 12:24:12 +01:00
Jonathan Gelin d5de2c6a50 fix(testing): support NX_CACHE_PROJECT_GRAPH when reading inferred config from jest cache file (#32380)
## Current Behavior

The Jest plugin does not use `NX_CACHE_PROJECT_GRAPH` in its
implementation. Unlike other plugins (e.g., ESLint, TypeScript), it does
not provide a way to control or disable its internal caching behavior.

## Expected Behavior

The Jest plugin should leverage `NX_CACHE_PROJECT_GRAPH`, ensuring
consistent caching behavior across Nx plugins. This would make it easier
to manage or override caching strategies when building higher-order
plugins that extend Nx core functionality.

## Related Issue(s)

Fixes #

---

### Additional Context

* When creating higher-order plugins that extend Nx core plugins, it’s
often useful to manage cache differently. Without this, concurrency
issues can occur if `createNodesV2` is invoked multiple times in
parallel.
* This highlights a broader need for improved plugin extensibility:

* Instead of re-invoking `createNodesV2` (which handles multiple files,
cache, etc.), it would be helpful to expose lower-level functions
responsible only for generating configuration.
* This would give plugin authors more granular control while reducing
unintended side effects.
2025-08-18 11:40:06 +02:00
Nicole Oliver fcfb5abd10 chore(nx-dev): update all docs references to the gradle plugin (#32373)
Changes references of the gradle plugin to "the Nx plugin for Gradle"
2025-08-15 21:42:56 +00:00
Jack Hsu 1ca6c22c17 docs(nx-dev): add breadcrumbs (#32371)
## Current Behavior
The Astro docs site doesn't display breadcrumbs at the top of the page
content, making navigation context unclear.

## Expected Behavior
Breadcrumbs should appear at the top of each page content (after the
page title) showing the navigation hierarchy, matching the behavior from
the original Next.js app.


<img width="1343" height="361" alt="Screenshot 2025-08-15 at 2 47 19 PM"
src="https://github.com/user-attachments/assets/8f2c983a-710f-4d0b-aa6e-b2303884596a"
/>
2025-08-15 16:27:18 -04:00
Jason Jean da0ac85822 chore(repo): update nx to 21.4.0-beta.12 (#32350)
Updating Nx from 21.4.0-beta.11 to 21.4.0-beta.12
2025-08-15 14:12:40 -05:00
Colum Ferry d48ff63ff9 fix(js): node executor handles processes robustly (#32356)
## Current Behavior

  The @nx/js:node executor had several process management issues:

- Multiple concurrent builds could cause overlapping/corrupted console
output,
  especially in NestJS projects
- Process stdout streams weren't properly coordinated between different
tasks
- Rapid file changes could trigger multiple simultaneous rebuilds
without
  proper debouncing
- Console output formatting could break with mixed output from
overlapping
  processes

## Expected Behavior

  The node executor should:

- Handle process output streams cleanly with no overlapping/corrupted
output
  - Properly debounce rebuild triggers to prevent resource conflicts
  - Maintain clean console formatting even with rapid file changes
- Coordinate output between concurrent processes using a global stream
manager

## Related Issue(s)

  Fixes #30247 
  Fixes #22999 
  Fixes #22945
2025-08-15 19:01:58 +01:00
Colum Ferry 9bbcbe4f36 fix(release): only delete version plans that are used #31327 (#32362)
## Current Behavior
When using version plans, after running the release command, version
plans were deleted.
This happened even if a `project` or `group` filter was supplied and not
all version plans were used.


## Expected Behavior
Ensure that:
- Only Version Plans for projects in filter are deleted
- If filtered projects exist in version plans that contain unfiltered
projects, hard error

## Related Issue(s)

Fixes #31327

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-08-15 15:20:44 +01:00
Colum Ferry 3142624522 fix(module-federation): module federation does not depend on static remotes port (#32363)
## Current Behavior
If a host does not have any remotes, it fails to serve as the
`staticRemotesPort` returns as `-Infinity`.

## Expected Behavior
When a host has no remotes, set `staticRemotesPort` to `undefined` and
use this to determine whether we should wait for it.
2025-08-15 15:08:34 +01:00
Leosvel Pérez Espinosa 18ba3157aa feat(js): add plugin option to skip build checks when inferring the build task (#32358)
Add a new option `skipBuildCheck` to the `@nx/js/typescript` plugin
build options to allow skipping the check for a buildable setup and
always infer a build task.
2025-08-14 18:36:19 -05:00
Leosvel Pérez Espinosa 42ec4d9f20 fix(core): handle .nx installation during nx migrate (#32357)
## Current Behavior

Running `nx migrate` in a non-js repo (no `package.json` in the
workspace root) hangs.

## Expected Behavior

Running `nx migrate` in a non-js repo should work correctly.
2025-08-14 14:50:11 -04:00
Jack Hsu b833f87ba5 fix(nx-dev): fix Open Graph image 404s (#32360)
Open Graph images on nx.dev are returning 404 errors for several pages:
- `/ai-chat` and `/changelog` reference non-existent
`/images/nx-media.jpg`
- `/extending-nx` references non-existent
`/images/open-graph/extending-nx.jpg`
- Pages with anchors have broken og:image URLs

All pages should have working Open Graph images for proper social media
sharing.

Fixes DOC-98

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-14 12:36:57 -04:00
Colum Ferry 34e1badd68 fix(release): handle git_protocol https when getting auth token #31828 (#32353)
## Current Behavior
When resolving token data for creating the GitHubReleaseClient, The GH
CLI supports `https` option for `git_protocol` and it is not being
handled.
This results in no token data being resolved.

Further API requests that require a `Bearer` token in the headers fail.

## Expected Behavior
Ensure `https` protocol is also handled.
`gh auth token` still operates and produces a token that can be used.

## Related Issue(s)

Fixes #31828
2025-08-14 13:36:48 +01:00
Colum Ferry 8bc353882b fix(react): host generator should not add loadRemote helper when no remotes (#32352)
## Current Behavior
When `nx g @nx/react:host` is used and 0 `--remotes` are passed, we
still add the `loadRemote` helper from
`@module-federation/enhanced/runtime`.
This causes a typecheck error as it is unused.

## Expected Behavior
Only add the helper when it is needed (i.e. >0 remotes).
2025-08-14 13:21:59 +01:00
Juri 722e4ffc81 docs(nx-cloud): optimize ttg 2025-08-14 09:03:26 +02:00
Jack Hsu 86858e2650 docs(nx-dev): add index pages with auto-generated directory cards and proper sidebar configuration (#32348)
## Current Behavior

The astro-docs structure lacks index pages for directory navigation,
making it difficult for users to discover and navigate between related
content sections. Additionally, some index pages were missing the proper
sidebar configuration to hide them from the navigation.

## Expected Behavior

With these changes, all directories in astro-docs now have proper
index.mdoc files that:
- Display auto-generated cards for subdirectory navigation using the `{%
indexpagecards %}` component
- Are hidden from the sidebar navigation with `sidebar: hidden: true`
- Provide clear entry points for discovering related content

The changes include:
- Added index.mdoc files for all technology, concept, guide, and
reference directories
- Implemented proper case handling for directory names (e.g., "Guides" →
"guides")
- Enhanced the IndexPageCards component to work with .mdoc files
- Ensured consistent sidebar configuration across all index pages

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-13 18:03:14 -04:00
Jack Hsu 77a32ac25f docs(nx-dev): make header more consistent with prod headers (#32349)
The Astro docs site header had a different structure and styling
compared to the production nx.dev header. It was missing key navigation
elements like the version switcher, Resources dropdown with icons, and
proper navigation ordering.

The Astro docs header now matches the production nx.dev header structure
with:
- Version switcher (v21, v20, v19) positioned correctly
- Resources dropdown with organized sections (Learn, Events, Company)
and icons
- Proper navigation order: Blog, Resources, | AI, Nx Cloud | Enterprise
- Consistent styling using Tailwind CSS classes
- Maintained social icons and theme switcher functionality
- All links without underlines and proper hover states

Fixes DOC-111
2025-08-13 18:02:55 -04:00
Nicole Oliver de9fbfe487 chore(nx-dev,graph): replace gradle logo (#32346)
Replaces the Gradle logo with the Java logo in our blogs, docs, and the
graph package.
2025-08-13 16:48:59 -04:00
Jack Hsu de59bf4a4c chore(misc): remove circular dep from @nx/cypress to itself and clarify why other remaining packages are ignored (#32344)
This removes the need to ignore `@nx/cypress` in
`packages/cypress/.eslintrc.json`. This was never really a ciruclar dep,
as
`packages/cypress/src/generators/configuration/files/v9/__directory__/plugins/index.js`
is a template for `generateFiles`, thus appending `__tmpl__` fixes it.

Other packages have valid reasons so a comment is added to clarify for
the future.
2025-08-13 16:12:58 -04:00
Louie Weng 0ff43a5638 feat(gradle): enable migrations to occur with workspaces using version catalogs (#32342)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Our project graph gradle migrations currently only bump up the gradle
plugin if its versions are set in `build.gradle.kts` files. This means
that migrations will not work with workspaces that use version catalogs
and aliases.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Given a workspace using the project graph gradle plugin on a legacy
version, migrations should bump up the version of the Nx gradle plugin
if its specified in `libs.versions.toml` instead of `build.gradle.kts`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #NXC-2952
2025-08-13 14:30:11 -05:00
Caleb Ukle a56d7a468d docs(nx-dev): move external plugins docs (#32345)
move over plugin docs for
- [x] shared-fs-cache
- [x] azure-cache
- [x] s3-cache
- [x] gcs-cache
- [x] conformance
- [x] owners
2025-08-13 14:20:30 -05:00
Abdullah Ebrahim 72b6972d03 fix(release): add missing git config options to nx-schema (#32300) 2025-08-13 22:19:03 +04:00
Colum Ferry e3493cd36e fix(angular): prevent worker creation snippet from being added to worker file (#32339)
- Added "worker" to exclusion pattern in add-snippet.ts to prevent
worker creation code from being added to the generated worker file
itself
- Fixed double slash in tsconfig.worker.json template by removing extra
"/" since offsetFromRoot() already returns paths ending with "/"
- Added comprehensive tests to prevent regression including edge cases
with complex worker names

Fixes #31977
2025-08-13 16:42:21 +01:00
Wenzel dbb732fe0f fix(node): ensure cwd is set in target correctly (#31864)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->


<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
The Nest.js webpack build target configuration was generating
webpack-cli arguments without the required cwd in build.options.
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
The Nest.js webpack build target should generate proper webpack-cli
arguments with the cwd as part of the build.options
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31863

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-13 16:41:15 +01:00
Jack Hsu 0452910daf fix(vite): add tslib as a dep for @nx/vite and remove @swc/helpers (#32341)
When we switched to the TS solution setup with inferred `tsc` builds, we
didn't update the dependencies for `@nx/vite` to use `tslib` instead of
`@swc/helpers`. It was previously using `@nx/js:swc` executor, but now
`build-base` target is inferred as `tsc -b`.

It did not cause issues since other packages including `nx` always
install tslib, but technically it is incorrect, and we were ignoring the
errors by adding `tslib` and `@swc/helpers` to be ignored in
`.eslintrc.json`.

This PR also cleans up the eslint config for all other packages since we
do not need to ignore `tslib` for `@nx/dependency-checks` to pass.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
`@nx/vite` is missing `tslib` dependency even though the built JS file
uses it.

## Expected Behavior
Should have `tslib` as a dependency and not `@swc/helpers`.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-13 11:36:43 -04:00
Leosvel Pérez Espinosa 48807b6d89 chore(repo): ensure cypress browsers are installed in nightly e2e (#32337)
## Current Behavior

Cypress nightly e2e tests for pnpm are failing due to missing Cypress
browsers.

Failing run:
https://github.com/nrwl/nx/actions/runs/16928038580/job/47967766466

## Expected Behavior

Cypress nightly e2e tests should succeed.

Passing run:
https://github.com/nrwl/nx/actions/runs/16938135801/job/47999869854
2025-08-13 10:56:32 -04:00
Colum Ferry 82f4b02e1e fix(rspack): enable build mode for TypeScript checker in TS solution setups (#32340)
When using TypeScript solution setup with rspack, conditionally enable
build mode for TsCheckerRspackPlugin to generate declaration files.
This prevents TS6305 errors in module federation scenarios where
declaration files are expected but missing.

Fixes #31929
2025-08-13 10:54:46 -04:00
Colum Ferry 4449b3afa3 fix(bundling): normalize Windows paths for additionalEntryPoints (#32336)
The additionalEntryPoints option was failing on Windows because
tinyglobby
expects POSIX-style paths but was receiving Windows-style paths with
backslashes.
This fix applies normalizePath to ensure cross-platform compatibility.

Fixes #29690
2025-08-13 15:43:52 +01:00
Caleb Ukle 91225fe33e docs(nx-dev): add documents for plugins (#32302)
add the plugin "documents" sections. this includes the
guides/concepts/intro pages for each item.
2025-08-13 14:37:24 +00:00
Jason Jean 2373b4526f chore(repo): update nx to 21.4.0-beta.11 (#32328)
Updating Nx from 21.4.0-beta.8 to 21.4.0-beta.11
2025-08-13 09:14:08 -04:00
Rodrigo Yokota f4f55cfaa3 fix(module-federation): skip splitChunk options for prod build (#32330)
## Current Behavior
Rspack + React + Module Federation applications are not able to work
properly due to the presence of splitChunks optimization on default web
configs.

## Expected Behavior
Optimizations like this should be overridden by the Module Federation
plugin in order for them to work.

## Related Issue(s)
https://github.com/nrwl/nx/issues/32329

Fixes #
Added override of splitChunks configs for Nx's Module Federation
plugins.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-13 13:18:08 +01:00
Hassan Khan b360446a51 feat(expo): upgrade Expo to v53 and React Native to 0.79 (#31497)
Upgrades both `@nx/expo` and `@nx/react-native` to use the latest
versions of Expo and React Native. Expo iOS and Android builds work
perfectly.

> [!WARNING] 
> This PR explicitly does not modify `@nx/detox`; see comment
[here](https://github.com/nrwl/nx/discussions/19473#discussioncomment-13414668)
on a discussion about why Nx should consider using Maestro instead.

## Tasks

- [x] Fix `@nx/expo` E2E tests
- [x] Verify Android and iOS builds
- [x] Fix `@nx/expo` legacy tests (see comment
[here](https://github.com/nrwl/nx/pull/31497#issuecomment-2961048831))
- [x] Fix Android builds with `@nx/expo` 
- [x] Remove `react-test-renderer` from `@nx/expo` 
- [x] Add migration to remove dependencies from `@nx/expo`
	- [x] `@testing-library/jest-native`
	- [x] `react-test-renderer` 
- [x] Fix `@nx/react-native` E2E tests (see comment
[here](https://github.com/nrwl/nx/pull/31497#issuecomment-2964720118))
- [x] Verify Android and iOS builds (see comment
[here](https://github.com/nrwl/nx/pull/31497#issuecomment-2960921558))
- [x] Add migrations to update deps for `@nx/react-native`
- [x] Add migration to remove dependencies from `@nx/react-native`
	- [x] `@testing-library/jest-native`
	- [x] `jest-react-native`
	- [x] `react-test-renderer` 
- [x] Remove `react-test-renderer` from `@nx/react-native` 

## Changes

- Upgrade Expo to v53 and update project templates
- Upgrade React Native to v0.79 and update project templates
- Upgrade React to v19.0
- Upgrade `metro-config` and `metro-resolver` to v0.82.4 (fixes #30557)
- Remove `react-test-renderer`
- Remove `jest-react-native`
- Remove `@testing-library/jest-native`
- Fix bug in `@nx/expo` and `@nx/react-native` application generators
where the generated `package.json` was being overwritten (fixes #31416)

## Links

-
https://github.com/facebook/react/tree/main/packages/react-test-renderer#react-native-testing
-
https://callstack.github.io/react-native-testing-library/docs/migration/jest-matchers
-
https://react.dev/blog/2024/04/25/react-19-upgrade-guide#deprecated-react-test-renderer

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Nx generates an Expo project using SDK v52, and React Native projects
using RN 0.76

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Nx should generate an Expo project using SDK v53, and React Native
projects using RN 0.79

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31498, #30557, #31416

---------

Co-authored-by: Emily Xiong <xiongemi@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-08-13 12:13:36 +01:00
Louie Weng 811d184874 feat(gradle): derive atomizer test names using AST parsing (#32275)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
- use regex to get test class name

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- remove the filter on the test file name
- use junit first to get test class name
- then if junit does not work, use regex as fallback
- fix warnings of unit tests
- upgrade dev.nx.gradle.project-graph to 0.1.3

in ci, in order to testClassDirs to exist, might need to run
compileTestKotilin or compileTestJava first.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Closes https://github.com/nrwl/nx/pull/31693

---------

Co-authored-by: Emily Xiong <xiongemi@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-12 17:58:45 -04:00
Colum Ferry 2c185d7fda chore(repo): fix snapshot tests (#32327) 2025-08-12 17:39:34 -04:00
Philip Fulcher 90fc51b417 docs(nx-dev): update community links on home page (#32321) 2025-08-12 14:58:13 -06:00
Jack Hsu ae10425e27 docs(misc): update astro-docs readme (#32325)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Caleb Ukle <caleb@nrwl.io>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-12 15:21:57 -04:00
Colum Ferry 27e94373f0 chore(repo): fix release for angular-rspack (#32322)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-12 19:16:16 +00:00
Jack Hsu 2fd7bf8a8b docs(misc): bring deepdive callout back (#32324)
Bring back deepdive since it's pretty noisy otherwise.
2025-08-12 14:46:53 -04:00
Jack Hsu dc299c6bce fix(core): prevent error.log from generating during create-nx-workspace (#32317)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Running `npx create-nx-workspace` always results in `error.log` in the
new workspace.

## Expected Behavior
No `error.log`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-12 13:27:24 -04:00
James Henry aa32b1fc60 feat(release): allow custom nx-release-publish executors to read versionData (#32306) 2025-08-12 20:46:12 +04:00
Colum Ferry 85e1b9d40a fix(core): include nested library dependencies in generated package.json (#32313)
When using build targets with nested library dependencies (App -> lib1
-> lib2),
dependencies from the deepest libraries were not being included in the
generated
package.json due to restrictive target input patterns.

This fix adds an isTransitiveDependency parameter to findAllNpmDeps
function that
uses broader file patterns ({projectRoot}/**/*) when processing
transitive
project dependencies instead of the restrictive build target patterns.

Fixes #30895
2025-08-12 17:34:24 +01:00
Colum Ferry a24df404c4 fix(node): ensure windows paths are resolved correctly #31992 (#32318)
## Current Behavior
`joinPathFragments` in nest app generator for the target dir of the
template files is incorrect because it makes the path unix-style which
does not work for Windows.

## Expected Behavior
Use `path.join`

## Related Issue(s)

Fixes #31992
2025-08-12 12:34:08 -04:00
Colum Ferry 721066f1ce fix(misc): ensure generateFiles is called using path.join (#32319)
## Current Behavior
Using `joinPathFragments` with `generateFiles` is incorrect as we do not
take into OS-specific paths with `joinPathFragments`.
This is problematic when trying to read files on the system for Windows
users for example.


## Expected Behavior
Use `path.join` to ensure the correct file path is used and passed to
`readdirSync`
2025-08-12 12:33:45 -04:00
Colum Ferry 13f63eb79c fix(vite): set name property for test to project name #32163 (#32308)
## Current Behavior
The `name` property is not set for vitest configs. Vitest will therefore
infer the name for the test suite based off the directory name.
In a monorepo this can cause issues as the directory name may be
repeated but for different contexts.

## Expected Behavior
Set the project name as the name in the test config

## Related Issue(s)

Fixes #32163
2025-08-12 16:13:55 +01:00
Juri 94c7b7e38d docs(nx-dev): ukg article 2025-08-12 16:51:14 +02:00
Jason Jean eb5e2035d8 feat(angular-rspack): move angular rspack to nx (#32226)
# Description
Move Angular Rspack into the Nx repo.

The relevant packages are:
- angular-rspack
- angular-rspack-compiler

## Examples
Adds `Angular Rspack` examples to `examples/angular-rspack` which allow
for demonstration of various configs to use various features within
angular, such as:
 - proxy
 - ssr
 - ssg
 - i18n
 
These examples use `@nx/angular-rspack` with `workspace:*` protocol
allowing for immediate feedback on changes to `angular-rspack` and
`angular-rspack-compiler` to be reflected in these examples.
2025-08-12 10:43:20 -04:00
Colum Ferry f65e0cda61 chore(angular-rspack): typo in outputs for build 2025-08-12 15:41:51 +01:00
Colum Ferry f5bd135e08 chore(angular-rspack): repo operations related cleanups 2025-08-12 15:41:51 +01:00
Colum Ferry 737961bb02 chore(repo): reset angular rspack package versions after local release 2025-08-12 15:41:51 +01:00
Colum Ferry 4a34dc13c3 chore(repo): set release config for angular-rspack on project level 2025-08-12 15:41:51 +01:00
Colum Ferry 1b73284df1 fix(angular-rspack): ensure i18n inline plugin uses sourcemap correctly 2025-08-12 15:41:51 +01:00
Colum Ferry fcb10118dc chore(angular-rspack): ensure package can be released 2025-08-12 15:41:51 +01:00
Colum Ferry 16035f42fd feat(angular-rspack): add angular-rspack package 2025-08-12 15:41:51 +01:00
Jakub Chlebowicz fb99c3e56f feat(angular-rspack): Add "zoneless" option to enable Angular's provideZonelessChangeDetection() usage (#115)
* feat(angular-rspack): add "zoneless" option to disable zone.js initialization within PrerenderPlugin

* test: add e2e fixture for zoneless CSR with CSS spec

* test: add e2e fixture for zoneless CSR (i18n) with CSS spec

* test: add e2e fixture for zoneless SSG with CSS spec

* test: add e2e fixture for zoneless SSR with CSS spec

* fix: update import format

* fix: replace zoneless property, inferring zone.js polyfill presence instead

* fix: update pnpm-lock.yaml

---------

Co-authored-by: Jakub Chlebowicz <contact@jakubchlebowicz.com>
2025-08-12 15:41:51 +01:00
github-actions[bot] 73b26bcec5 chore(release): publish 21.2.0 2025-08-12 15:41:51 +01:00
Colum Ferry abc3eeb0c0 fix(angular-rspack): remove failing node importer 2025-08-12 15:41:51 +01:00
Colum Ferry 438fdf37eb feat(angular-rspack,angular-rspack-compiler): update to angular 20.1.0 2025-08-12 15:41:51 +01:00
Tobias Lampert 15addad3b8 fix(angular-rspack): delete build outputPath only once (#127) 2025-08-12 15:41:51 +01:00
Tobias Lampert b0d0b34942 fix(angular-rspack): add node_modules to includePaths if populated (#126) 2025-08-12 15:41:51 +01:00
Zack Yang 71d8b0463c feat(angular-rspack): support pkg scheme importer (#124) 2025-08-12 15:41:51 +01:00
Tobias Lampert b6ece01b24 fix(angular-rspack): fix ignore glob for .gitkeep (#121) 2025-08-12 15:41:51 +01:00
Tobias Lampert 91d141f119 feat(angular-rspack): include js-based postcss config (#120) 2025-08-12 15:41:51 +01:00
Tobias Lampert 9fd4905d70 fix(angular-rspack): apply SASS deprecation for global stylesheets (#119) 2025-08-12 15:41:51 +01:00
Tobias Lampert 109ab8b8cf feat(angular-rspack): support index transformer (#118) 2025-08-12 15:41:51 +01:00
Tobias Lampert 0031707719 fix(angular-rspack): exclude assets from being copied into server build (#117) 2025-08-12 15:41:50 +01:00
github-actions[bot] 42d7601016 chore(release): publish 21.1.0 2025-08-12 15:41:50 +01:00
Colum Ferry e3de95966f feat(angular-rspack,angular-rspack-compiler): support angular 20 (#99)
* feat(angular-rspack,angular-rspack-compiler): support angular 20

* chore(repo): integration test output updaet

* chore(repo): rsbuild-ssr-csr server entry update

* feat(angular-rspack): match changes in v20

* feat(angular-rspack): update nx and angular versions

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-08-12 15:41:50 +01:00
github-actions[bot] dce72ef747 chore(release): publish 21.0.4 2025-08-12 15:41:50 +01:00
Colum Ferry a0bd226843 fix(angular-rspack): ensure mode is set based on optimization settings 2025-08-12 15:41:50 +01:00
github-actions[bot] d40dad833b chore(release): publish 21.0.3 2025-08-12 15:41:50 +01:00
Colum Ferry 75bcf5818a fix(angular-rspack): do not generate sourceMaps when disabled 2025-08-12 15:41:50 +01:00
github-actions[bot] 72c665d4cf chore(release): publish 21.0.2 2025-08-12 15:41:50 +01:00
Colum Ferry dd82e584bc fix(angular-rspack): ensure cjs for serve (#98) 2025-08-12 15:41:50 +01:00
github-actions[bot] f850f4c003 chore(release): publish 21.0.1 2025-08-12 15:41:50 +01:00
Colum Ferry 916c40b7c3 fix(angular-rspack): type warning on budgets 2025-08-12 15:41:50 +01:00
Marvin Scharle 6bfc5ebb74 fix(angular-rspack,angular-rspack-compiler): surface errors from ComponentStylesheetResult ensuring sass andincludePaths are passed (#87)
* fix: errors from ComponentStylesheetResult are hidden

if componentStylesheetBundler.bundleFile/bundleInline doesn't throw an error
but the results still contain errors, the errors will not be reported and
the resulting style sheet will be empty.

* fix: sass/includePaths are not passed to setup function
2025-08-12 15:41:50 +01:00
Colum Ferry c800283094 feat(angular-rspack): add appShell option (#93) 2025-08-12 15:41:50 +01:00
Colum Ferry 3cf92acf7a feat(angular-rspack): add budgets support (#92)
* feat(angular-rspack): add budgets support

* feat(angular-rspack): ensure style only bundles do not emit js
2025-08-12 15:41:50 +01:00
Colum Ferry c416a1e6e2 feat(angular-rspack): add granular optimization support (#89) 2025-08-12 15:41:50 +01:00
Colum Ferry 4b4dfd6910 feat(angular-rspack): finalize devServer options (#86) 2025-08-12 15:41:50 +01:00
Colum Ferry d3d6632eff feat(angular-rspack): add open option (#85) 2025-08-12 15:41:50 +01:00
Colum Ferry 586675761d feat(angular-rspack): add watch option (#84) 2025-08-12 15:41:50 +01:00
Colum Ferry f6c3414d46 feat(angular-rspack): add progress option (#83) 2025-08-12 15:41:50 +01:00
Colum Ferry 8435d56814 feat(angular-rspack): add verbose option (#82) 2025-08-12 15:41:50 +01:00
Colum Ferry f154f151b0 fix(angular-rspack): remove options that do not exist in Angular Webpack (#81) 2025-08-12 15:41:50 +01:00
Colum Ferry 99a0c65b01 feat(angular-rspack): add poll option (#80) 2025-08-12 15:41:50 +01:00
Colum Ferry 77d43762ce feat(angular-rspack): add statsJson plugin (#79) 2025-08-12 15:41:50 +01:00
Colum Ferry cd5d0d5e9f feat(angular-rspack): add hmr support (#78) 2025-08-12 15:41:50 +01:00
Colum Ferry 3f4a600f1f feat(angular-rspack,angular-rspack-compiler): reuse existing compilation if exists (#77)
* feat(angular-rspack,angular-rspack-compiler): reuse existing compilation if exists

* feat(angular-rspack,angular-rspack-compiler): ensure only affected file is rebuilt
2025-08-12 15:41:50 +01:00
github-actions[bot] f457f0f909 chore(release): publish 20.9.0 2025-08-12 15:41:50 +01:00
Colum Ferry d65617ec68 fix(angular-rspack): ssg should not run on serve (#75) 2025-08-12 15:41:50 +01:00
Leosvel Pérez Espinosa 3069a460ff chore(repo): update nx to 21.0.0 (#74) 2025-08-12 15:41:50 +01:00
Leosvel Pérez Espinosa 6c5fa44deb fix(angular-rspack): update @rspack/core dependency (#73) 2025-08-12 15:41:50 +01:00
Leosvel Pérez Espinosa 164d7169d7 fix(angular-rspack): ensure stylePreprocessorOptions is correctly used (#72) 2025-08-12 15:41:49 +01:00
Leosvel Pérez Espinosa a04beda332 feat(angular-rspack): add support for more devServer options (#71)
* feat(angular-rspack): add support for more devServer options

* fix(angular-rspack): write to disk in devServer only when needed
2025-08-12 15:41:49 +01:00
Leosvel Pérez Espinosa bd31b35b6f feat(angular-rspack): improve styles processing and support tailwindcss v4 (#70) 2025-08-12 15:41:49 +01:00
Colum Ferry b584b43f56 feat(angular-rspack): support static site generation (#65)
* feat(angular-rspack): attach platform server exports

* feat(angular-rspack): static site generation

* chore(repo): update ts project references
2025-08-12 15:41:49 +01:00
Colum Ferry 4569bec4a3 feat(angular-rspack): use development config for serve (#61) 2025-08-12 15:41:49 +01:00
github-actions[bot] bf8fcd164b chore(release): publish 20.8.2 2025-08-12 15:41:49 +01:00
Colum Ferry 3abc726836 fix(angular-rspack): handle windows disk drive in loader #53 (#64) 2025-08-12 15:41:49 +01:00
github-actions[bot] 8380acc412 chore(release): publish 20.8.1 2025-08-12 15:41:49 +01:00
Colum Ferry 2d870a2c66 chore(repo): ensure ignored deps 2025-08-12 15:41:49 +01:00
Colum Ferry ea523bc5df fix(angular-rspack): do not rely on nx workspace (#62) 2025-08-12 15:41:49 +01:00
Colum Ferry 19537bcb23 chore(angular-rspack): update ignored deps (#63) 2025-08-12 15:41:49 +01:00
github-actions[bot] e1f3d6e732 chore(release): publish 20.8.0 2025-08-12 15:41:49 +01:00
Colum Ferry 26435bba5a fix(angular-rspack): mark @angular/localize as optional peer dep (#60) 2025-08-12 15:41:49 +01:00
github-actions[bot] 3cbd53cf70 chore(release): publish 20.8.0-beta.0 2025-08-12 15:41:49 +01:00
Colum Ferry 14a5d66c0b chore(repo): migrate to nx 21.0.0-beta.8 (#59) 2025-08-12 15:41:49 +01:00
Leosvel Pérez Espinosa 162eeb7496 feat(angular-rspack): improve entry files handling and index.html generation (#56)
* feat(angular-rspack): improve entry files handling and index.html generation

* fix(angular-rspack): add back script for event replay and fix misc issues

* fix(angular-rspack): add tailwindcss as an optional peer dependency and remove unused variable

* fix(angular-rspack): use IndexHtmlPlugin to generate i18n index files

* fix(angular-rspack): fix i18n inlining

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-12 15:41:49 +01:00
Colum Ferry 7322435a08 feat(angular-rspack,angular-rsbuild): support web workers (#58) 2025-08-12 15:41:49 +01:00
Colum Ferry bcc24b0353 fix(angular-rspack): ensure ngDevMode set correctly by DefinePlugin (#57) 2025-08-12 15:41:49 +01:00
Colum Ferry ebb82e620c feat(angular-rspack): add service-worker support (#55) 2025-08-12 15:41:49 +01:00
Colum Ferry 4488d7aea6 fix(angular-rspack): multiple configurations (#54) 2025-08-12 15:41:49 +01:00
github-actions[bot] 1f54d6879a chore(release): publish 20.7.0 2025-08-12 15:41:49 +01:00
Colum Ferry 1dce594343 docs(angular-rspack): update readme 2025-08-12 15:41:49 +01:00
github-actions[bot] 7bfa547174 chore(release): publish 20.7.0-beta.0 2025-08-12 15:41:49 +01:00
Colum Ferry 8a7f4ee078 feat(angular-rspack): add support for i18n (#51) 2025-08-12 15:41:49 +01:00
Colum Ferry 8de0fc47b9 feat(angular-rspack,angular-rsbuild): add externalDependencies option (#50) 2025-08-12 15:41:49 +01:00
Colum Ferry 7631dee5f4 feat(angular-rspack,angular-rsbuild): add deleteOutputPath option (#49) 2025-08-12 15:41:49 +01:00
Colum Ferry 5c34e51e23 feat(angular-rspack,angular-rsbuild): add preserveSymlinks option (#48)
* feat(angular-rspack): add preserve-symlinks option

* feat(angular-rsbuild): add preserve-symlinks option
2025-08-12 15:41:49 +01:00
Colum Ferry 734e28b38f feat(angular-rspack): add allowedHosts option (#47) 2025-08-12 15:41:49 +01:00
Colum Ferry 5c6efd6cf9 feat(angular-rspack,angular-rsbuild): add define option (#45)
* feat(angular-rspack): add define option

* feat(angular-rsbuild): add define option
2025-08-12 15:41:49 +01:00
github-actions[bot] 21eab52310 chore(release): publish 20.6.2 2025-08-12 15:41:49 +01:00
github-actions[bot] cd45df77ba chore(release): publish 20.6.2-beta.0 2025-08-12 15:41:48 +01:00
github-actions[bot] 6e69fa6014 chore(release): publish 20.6.1 2025-08-12 15:41:48 +01:00
Colum Ferry 4fb7b4f2e2 fix(angular-rspack): publicPath for server should not be auto 2025-08-12 15:41:48 +01:00
github-actions[bot] dfd8881f07 chore(release): publish 20.6.0 2025-08-12 15:41:48 +01:00
github-actions[bot] ec355a7fda chore(release): publish 20.6.0-beta.1 2025-08-12 15:41:48 +01:00
Colum Ferry 3ce6dc3096 fix(angular-rspack): stylesheet should be attached to html (#41) 2025-08-12 15:41:48 +01:00
github-actions[bot] 520ca9815c chore(release): publish 20.6.0-beta.0 2025-08-12 15:41:48 +01:00
Colum Ferry 7281544a77 fix(angular-rspack): process styles correctly handling urls (#40) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 6120883484 fix(angular-rspack): fix assets normalization (#39) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 95b615033e feat(angular-rspack): support host option for the dev server (#38) 2025-08-12 15:41:48 +01:00
Michael Hladky 955a423f4e test(angular-rspack): add unit tests for angular loader (#17)
* test(angular-rspack): add unit tests for angular-transform-loader

* test(angular-rspack): add unit tests for angular-transform-loader

* fix: format

* fix: wip

* fix: test change

* fix: test change 2
2025-08-12 15:41:48 +01:00
github-actions[bot] 95667ddc68 chore(release): publish 20.5.0-beta.3 2025-08-12 15:41:48 +01:00
Colum Ferry b264efc27b chore(repo): add release pipeline (#37) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 626b5e2649 refactor(angular-rspack): inline helpers from nx package (#36) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa eba77da2db feat(angular-rspack): improve createConfig public api (#35)
* feat(angular-rspack): improve `createConfig` public api

* feat(angular-rspack): warn about currently unsupported options
2025-08-12 15:41:48 +01:00
Colum Ferry e475715baf fix(angular-rspack): dev-server works for ssr (#34) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa c64a5fd219 feat(angular-rspack,angular-rsbuild): add root option and improve tsConfig handling (#33) 2025-08-12 15:41:48 +01:00
Colum Ferry b06f32e632 fix(angular-rspack): sass-loader should not be required when using css (#32)
* fix(angular-rspack): sass-loader should not be required when using css

* fix(angular-rspack): sass-loader should not be required when using css
2025-08-12 15:41:48 +01:00
Colum Ferry 00dc8c613b feat(angular-rspack,angular-rsbuild): add chunking options (#31)
* feat(angular-rspack,angular-rsbuild): add namedChunks option

* feat(angular-rspack,angular-rsbuild): add commonChunk and vendorChunk option
2025-08-12 15:41:48 +01:00
Colum Ferry 0c59e6f18f feat(angular-rspack,angular-rsbuild): add sourcemap option (#29) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 8f48312f52 feat(angular-rspack): support extractLicenses option (#30)
* feat(angular-rspack): support `extractLicenses` option

* chore(angular-rspack): fix pipeline dependencies for unit-test tasks
2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 4a333c04b7 feat(angular-rspack): support expanded syntax for assets, styles, and scripts (#28) 2025-08-12 15:41:48 +01:00
Colum Ferry df9c63d64f feat(angular-rspack,angular-rsbuild): add outputPath option (#27) 2025-08-12 15:41:48 +01:00
Colum Ferry ac2b08c385 feat(angular-rspack,angular-rsbuild): remove root from api (#23) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 5678bf6cce feat(angular-rspack,angular-rsbuild): turn on/off advanced optimizations based on provided options (#26) 2025-08-12 15:41:48 +01:00
Leosvel Pérez Espinosa 6cc052d6d7 feat(angular-rspack,angular-rsbuild): support ssl, sslKey, sslCert, and proxyConfig options (#24) 2025-08-12 15:41:48 +01:00
Colum Ferry 833dd835ec feat(angular-rspack,angular-rsbuild): add outputHashing option (#22) 2025-08-12 15:41:48 +01:00
Colum Ferry ee1968b1b8 feat(angular-rspack,angular-rsbuild): rename ssrEntry to ssr.entry (#20) 2025-08-12 15:41:48 +01:00
Colum Ferry 9ed2dff0f2 feat(angular-rspack,angular-rsbuild): add optimization option (#21) 2025-08-12 15:41:48 +01:00
Colum Ferry 4ee1ab1cf4 feat(angular-rspack,angular-rsbuild): support passing devServer options (#16) 2025-08-12 15:41:48 +01:00
Colum Ferry 85a67be420 feat(angular-rspack,angular-rsbuild): rename inlineStylesExtension to inlineStyleLanguage (#14) 2025-08-12 15:41:47 +01:00
Colum Ferry bcce024ba8 feat(angular-rspack,angular-rsbuild): rename tsconfigPath to tsConfig (#13) 2025-08-12 15:41:47 +01:00
Colum Ferry 36e3b8723a feat(angular-rspack,angular-rsbuild): rename jit to aot (#11)
* feat(angular-rspack): rename jit to aot and invert

* feat(angular-rsbuild): rename jit to aot
2025-08-12 15:41:47 +01:00
Colum Ferry 598be1a0e9 feat(angular-rspack,angular-rsbuild): refactor withConfigurations to be createConfig (#9) 2025-08-12 15:41:47 +01:00
Colum Ferry ed30a96fb3 feat(angular-rspack): add withConfigurations (#6)
* feat(angular-rspack): add withConfigurations

* test(angular-rspack): add unit tests for withConfigurations

---------

Co-authored-by: Michael <michael.hladky@push-based.io>
2025-08-12 15:41:47 +01:00
Colum Ferry e4ea5359b7 feat: add new angular- packages and create legacy packages (#3)
* feat: add angular-rspack package

* feat: add angular-rspack-compiler package

* feat: add angular-rsbuild package

* docs: readme updates
2025-08-12 15:41:47 +01:00
Colum Ferry 31c2810e7e feat(angular-rspack): add angular rspack to nx repo 2025-08-12 15:41:47 +01:00
github-actions[bot] e691e4b9a8 chore(release): publish 21.2.0 2025-08-12 15:41:47 +01:00
Colum Ferry 331550b3ba fix(angular-rspack): remove failing node importer 2025-08-12 15:41:47 +01:00
Colum Ferry 0b180575b9 feat(angular-rspack,angular-rspack-compiler): update to angular 20.1.0 2025-08-12 15:41:47 +01:00
github-actions[bot] 4f7db7495d chore(release): publish 21.1.0 2025-08-12 15:41:47 +01:00
Colum Ferry 4a4f1d02a5 feat(angular-rspack,angular-rspack-compiler): support angular 20 (#99)
* feat(angular-rspack,angular-rspack-compiler): support angular 20

* chore(repo): integration test output updaet

* chore(repo): rsbuild-ssr-csr server entry update

* feat(angular-rspack): match changes in v20

* feat(angular-rspack): update nx and angular versions

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-08-12 15:41:47 +01:00
github-actions[bot] 8079a29ef4 chore(release): publish 21.0.4 2025-08-12 15:41:47 +01:00
github-actions[bot] 5dea920efa chore(release): publish 21.0.3 2025-08-12 15:41:47 +01:00
github-actions[bot] a9534764af chore(release): publish 21.0.2 2025-08-12 15:41:47 +01:00
github-actions[bot] d7b72b2a9d chore(release): publish 21.0.1 2025-08-12 15:41:47 +01:00
Marvin Scharle 3de4b81149 fix(angular-rspack,angular-rspack-compiler): surface errors from ComponentStylesheetResult ensuring sass andincludePaths are passed (#87)
* fix: errors from ComponentStylesheetResult are hidden

if componentStylesheetBundler.bundleFile/bundleInline doesn't throw an error
but the results still contain errors, the errors will not be reported and
the resulting style sheet will be empty.

* fix: sass/includePaths are not passed to setup function
2025-08-12 15:41:47 +01:00
Colum Ferry 3e26ec7b82 feat(angular-rspack,angular-rspack-compiler): reuse existing compilation if exists (#77)
* feat(angular-rspack,angular-rspack-compiler): reuse existing compilation if exists

* feat(angular-rspack,angular-rspack-compiler): ensure only affected file is rebuilt
2025-08-12 15:41:47 +01:00
github-actions[bot] e2a97ae5cc chore(release): publish 20.9.0 2025-08-12 15:41:47 +01:00
github-actions[bot] 50c7f4cd48 chore(release): publish 20.8.2 2025-08-12 15:41:47 +01:00
github-actions[bot] b32c3bf9a2 chore(release): publish 20.8.1 2025-08-12 15:41:47 +01:00
Colum Ferry b22f91c0fa chore(repo): ensure ignored deps 2025-08-12 15:41:47 +01:00
github-actions[bot] 77da6ef704 chore(release): publish 20.8.0 2025-08-12 15:41:47 +01:00
github-actions[bot] 2262caa116 chore(release): publish 20.8.0-beta.0 2025-08-12 15:41:47 +01:00
Colum Ferry 6aa4c289d3 chore(repo): migrate to nx 21.0.0-beta.8 (#59) 2025-08-12 15:41:47 +01:00
Colum Ferry eaed993eaa feat(angular-rspack,angular-rsbuild): support web workers (#58) 2025-08-12 15:41:47 +01:00
github-actions[bot] fb0a3a6c89 chore(release): publish 20.7.0 2025-08-12 15:41:47 +01:00
github-actions[bot] cbb4fd0276 chore(release): publish 20.7.0-beta.0 2025-08-12 15:41:47 +01:00
github-actions[bot] b68eb08627 chore(release): publish 20.6.2 2025-08-12 15:41:47 +01:00
github-actions[bot] b42d19d1af chore(release): publish 20.6.2-beta.0 2025-08-12 15:41:46 +01:00
Colum Ferry 5a11d7a4ba fix(angular-rspack-compiler): depend directly on @angular/build 2025-08-12 15:41:46 +01:00
github-actions[bot] 4e553f4f09 chore(release): publish 20.6.1 2025-08-12 15:41:46 +01:00
github-actions[bot] fe2a9ba46b chore(release): publish 20.6.0 2025-08-12 15:41:46 +01:00
github-actions[bot] 5e8e2892be chore(release): publish 20.6.0-beta.1 2025-08-12 15:41:46 +01:00
github-actions[bot] 16f5c99a94 chore(release): publish 20.6.0-beta.0 2025-08-12 15:41:46 +01:00
github-actions[bot] 70606af1f6 chore(release): publish 20.5.0-beta.3 2025-08-12 15:41:46 +01:00
Colum Ferry 1f7760c3ec chore(repo): add release pipeline (#37) 2025-08-12 15:41:46 +01:00
Colum Ferry e43c358471 feat(angular-rspack,angular-rsbuild): rename inlineStylesExtension to inlineStyleLanguage (#14) 2025-08-12 15:41:46 +01:00
Colum Ferry 2a77be5397 feat(angular-rspack,angular-rsbuild): rename tsconfigPath to tsConfig (#13) 2025-08-12 15:41:46 +01:00
Colum Ferry 2214055e80 feat(angular-rspack,angular-rsbuild): rename jit to aot (#11)
* feat(angular-rspack): rename jit to aot and invert

* feat(angular-rsbuild): rename jit to aot
2025-08-12 15:41:46 +01:00
Colum Ferry 590ca385b4 feat: add new angular- packages and create legacy packages (#3)
* feat: add angular-rspack package

* feat: add angular-rspack-compiler package

* feat: add angular-rsbuild package

* docs: readme updates
2025-08-12 15:41:46 +01:00
Caleb Ukle 06f9a04a0d docs(nx-dev): add redirect for old cloud intro pages (#32315)
https://github.com/user-attachments/assets/93d4b3ed-dedf-4795-9495-4cbc66da12fb
2025-08-12 10:38:29 -04:00
Philip Fulcher c1f681deee docs(nx-dev): add August webinar (#32314) 2025-08-12 14:31:24 +00:00
Philip Fulcher ad20afe763 docs(misc): update CTA on Java landing page (#32299) 2025-08-12 14:25:29 +00:00
Colum Ferry 65386dbaaa fix(webpack): add missing serveStaticTargetName alternatives to webpack init generator (#32309)
- Added serveStaticTargetName options array with 5 alternative names
- Fixes conflicts when Angular module federation projects create
serve-static targets
- Allows webpack plugin to work with existing Angular setups without
manual nx.json editing

Fixes #32267 
Fixes #31384
2025-08-12 13:28:47 +01:00
Yordan Kanchelov cdf5edb4f6 fix(js): fix npm dist-tag error handling TypeError in release-publish executor (#32289)
### Summary
Fixes a TypeError in the Nx release-publish executor that occurs when
`npm dist-tag add` fails, preventing users from seeing the actual npm
error message.

### Problem
When `npm dist-tag add` fails during `nx release publish`, users see a
JavaScript TypeError instead of the actual npm error:

```
npm dist-tag add error:
Something unexpected went wrong when processing the npm dist-tag add output
 TypeError: Cannot read properties of undefined (reading 'summary')
    at runExecutor (/node_modules/@nx/js/src/executors/release-publish/release-publish.impl.js:207:50)
```

### Root Cause
The error handler attempts to access `stdoutData.error.summary` without
checking if `error` exists. Since npm dist-tag outputs errors to stderr
(not stdout), the parsed stdout is typically an empty object `{}`,
causing `stdoutData.error` to be `undefined`. Accessing `.summary` on
`undefined` throws a TypeError.

### Solution
Added optional chaining (`?.`) when accessing error properties to
prevent TypeErrors:

```javascript
// Before (throws TypeError):
if (stdoutData.error.summary) { ... }

// After (safe):
if (stdoutData.error?.summary) { ... }
```

### Example
**Before this fix:**
```bash
$ nx release publish
npm dist-tag add error:
Something unexpected went wrong when processing the npm dist-tag add output
TypeError: Cannot read properties of undefined (reading 'summary')
```

**After this fix:**
```bash
$ nx release publish
npm dist-tag add error:
# (The actual npm error from stderr is shown, or if no JSON error, the code continues gracefully)
```

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-12 12:31:33 +01:00
Nicholas Cunningham c320f38450 chore(testing): simplify jest resolver for workspace package imports (#32127)
## Current Behavior

Jest module resolution requires manual maintenance of workspace package
mappings in moduleNameMapper with brittle relative paths that break
across different directory structures.

## Expected Behavior

Dynamic workspace package resolution without manual maintenance, using
absolute paths that work from any test directory.

## Changes

- Remove all workspace package mappings from `jest.preset.js`
`moduleNameMapper`
- Add `@nx/*` and `nx/src/*` resolution to `patched-jest-resolver.js`
- Use absolute paths and efficient workspace root detection for PNPM
- Add file vs directory checks to prevent `EISDIR` errors

### References:
`ts-jest` project references issue:
https://github.com/kulshekhar/ts-jest/issues/1648
2025-08-12 09:25:41 +01:00
Jason Jean d2a05933e7 chore(repo): update nx to 21.4.0-beta.8 (#32301)
Updating Nx from 21.4.0-beta.6 to 21.4.0-beta.8
2025-08-11 22:14:02 +00:00
Jack Hsu bcedaab988 docs(misc): fix styling for custom tags (#32297)
Fix up styling for markdoc custom tags for Astro docs.
2025-08-11 16:31:18 -04:00
Jason Jean aeb1803a61 fix(core): prevent TUI buffer overflow panics in dependency view scrollbar rendering (#32292)
## Current Behavior

The TUI dependency view experiences buffer overflow panics when
rendering scrollbars on small or constrained terminal sizes. Users
encounter crashes with messages like "index outside of buffer" at
various coordinates such as (134, 37), (86, 0), (107, 0), etc.

## Expected Behavior

The TUI should handle all terminal sizes gracefully without crashing,
maintaining proper visual rendering of scrollbars and padding elements
while staying within buffer boundaries.

## Key Code Changes

The fix adds **clean, reusable helper functions** for bounds checking to
prevent buffer overflows:

### 1. **New Helper Functions** (lines 216-239):
```rust
/// Check if a rectangle fits within buffer boundaries
fn fits_in_buffer(area: &Rect, buf: &Buffer) -> bool {
    area.x + area.width <= buf.area().width && area.y < buf.area().height
}

/// Create a safe rectangle clamped to buffer boundaries
fn clamp_to_buffer(area: Rect, buf: &Buffer) -> Option<Rect> {
    if area.width == 0 || area.height == 0 {
        return None;
    }
    let safe_area = Rect {
        x: area.x,
        y: area.y,
        width: area.width.min(buf.area().width.saturating_sub(area.x)),
        height: area.height.min(buf.area().height.saturating_sub(area.y)),
    };
    if safe_area.width > 0 && safe_area.height > 0 { Some(safe_area) } else { None }
}
```

### 2. **Simplified Scrollbar Bounds Check** (lines 478-481):
```rust
// Render scrollbar with bounds checking
if let Some(safe_scrollbar_area) = Self::clamp_to_buffer(outer_area, buf) {
    scrollbar.render(safe_scrollbar_area, buf, &mut state.scrollbar_state);
}
```

### 3. **Cleaner Padding Validation** (lines 241-286):
```rust
fn render_scrollbar_padding(outer_area: Rect, buf: &mut Buffer, style: Style) {
    const PADDING_WIDTH: u16 = 2;
    const RIGHT_MARGIN: u16 = 3;
    const WIDTH_PADDING: u16 = 2;
    const TOTAL_WIDTH: u16 = PADDING_WIDTH + RIGHT_MARGIN + WIDTH_PADDING;

    // Early exit if area is too small or has no height
    if outer_area.width < TOTAL_WIDTH || outer_area.height == 0 {
        return;
    }
    
    // Use helper function for bounds checking
    if Self::fits_in_buffer(&top_area, buf) {
        // render top padding
    }
    if Self::fits_in_buffer(&bottom_area, buf) {
        // render bottom padding  
    }
}
```

**Key improvements:**
- **Reduced complexity**: Scrollbar bounds checking went from 11 lines
to 3 lines
- **Reusable helpers**: `fits_in_buffer()` and `clamp_to_buffer()` can
be used throughout the codebase
- **Named constants**: Replaced magic numbers with descriptive constants
- **Clear intent**: Function names clearly express what the code does

## Related Issue(s)

This fixes buffer overflow panics that occur when the terminal user
interface attempts to render scrollbar widgets and padding outside the
available buffer boundaries, particularly on smaller terminal sizes or
when the terminal is resized.

The fix adds minimal bounds checking to:
1. **Scrollbar rendering**: Validates the scrollbar area fits within
buffer boundaries before rendering
2. **Padding rendering**: Ensures top/bottom padding areas don't extend
beyond buffer limits

**Comprehensive test coverage added**: 10 unit tests covering all edge
cases including the specific problematic buffer dimensions that
previously caused panics (45×30, 76×30, 104×30, 135×37, etc.).

Tested across multiple terminal buffer sizes and confirmed no more
buffer overflow panics while maintaining correct scrollbar
functionality.
2025-08-11 16:08:09 -04:00
Caleb Ukle 7d1917f234 docs(nx-dev): setup content from old nx-dev into new site. (#32261)
TODOs:
- [x] intros
- [x] features
- [x] core guides
- [x] concepts (previously moved)
- [x] technologies (in progress)
    - [ ] module-federation pages are extra special
- [x] enterprise
- [x] ~showcase~ decided not to move since very outdated
- [x] references
- [x] troubleshooting

closes: DOC-93
contributes to: DOC-94
2025-08-11 19:28:15 +00:00
Juri 2a22b360f8 docs(nx-cloud): update self-healing CI setup to always require fix-ci command
Previously, the documentation indicated that the nx-cloud fix-ci command was only needed when not using Nx Agents. This has been updated to clarify that the fix-ci command is always required for self-healing CI functionality, regardless of whether Nx Agents are being used or not.

- Updated docs/shared/features/self-healing-ci.md to remove Nx Agents distinction
- Updated blog post to show fix-ci is always required
- Simplified CI configuration examples to show proper placement after nx commands
2025-08-11 20:54:50 +02:00
Colum Ferry 73a3e29421 chore(nx-release): fix release-publish test (#32291) 2025-08-11 12:41:30 -04:00
Luca Peruzzo 9ee4f4f7ed fix(vite): fix rollup replace files (#32100)
use resolved module as base path for the file replacement, making sure
the path will be absolute

## Current Behavior
file are replaced using the relative path written on the "with" key.
Using AnalogJs I have problems on using the fileReplacement feature
using vite dev server.
```ts
 mode === 'development' &&
      replaceFiles([
        {
          replace: './src/environments/environment.ts',
          with: './src/environments/environment.development.ts',
        },
      ]),
```
this is not working because modules are resolved with their absolute
path, so this piece of code:
```ts
const foundReplace = replacements.find((replacement) =>
      resolved?.id?.endsWith(replacement.replace)
);
```
is not finding anything with the leading './' (no log on console for
replacement).

Changing to this:
```ts
 mode === 'development' &&
      replaceFiles([
        {
          replace: 'src/environments/environment.ts',
          with: 'src/environments/environment.development.ts',
        },
      ]),
```
logs `replace "src/environments/environment.ts" with
"src/environments/environment.development.ts"` but vite throws an error
cause it doesn't find the module.
My solution ensures that files are replaced using the base path from the
existing module, replacing only the involved substring.

## Expected Behavior
correct file replacement
2025-08-11 16:07:52 +00:00
Gil Hanan bcd62f0aa5 fix(expo): update heading text assertion to use regex for flexibility (#31542)
## Current Behavior
The heading unit test for the @nx/expo:application generator uses
toHaveTextContent with a strict string comparison. This causes the test
to fail when the heading output includes minor formatting differences or
additional content.


![image](https://github.com/user-attachments/assets/0cfe6c22-25b7-4520-b929-b7854971eecd)


## Expected Behavior
The test should use a regular expression with toHaveTextContent to allow
partial matches.
2025-08-11 15:59:27 +00:00
Nicholas Cunningham 3eac62818a feat(node): enhance debugging support for Node applications (#31949)
### Summary

- Enhanced VS Code debugging: All Node applications now automatically
get VS Code
  debugging configuration
- Improved webpack source maps: Added `devtoolModuleFilenameTemplate`
for better
  debugging experience
- Smart port allocation: Automatically assigns unique debug ports to
prevent conflicts
- Comprehensive file support: Debug configuration supports `.js`,
`.mjs`, and `.cjs` output files

This improvement makes debugging Node applications in Nx workspaces
seamless and consistent across all frameworks and bundlers.
 
 closes: https://github.com/nrwl/nx/issues/14708
2025-08-11 16:20:54 +01:00
Nicholas Cunningham b6bab0bbff feat(js): add esm support for esbuild and running serve with the node executor (#31965)
This PR enables the Node.js executor to run ESM-only packages (like
`node-fetch`@3) alongside CommonJS modules.

### Changes:

- ESM loader: Implemented custom ESM resolver to handle Nx workspace
library mappings in ESM contexts
- Dynamic execution: Node executor now switches between CommonJS and ESM
loaders based on the detected module format
- esbuild updates: Enhanced esbuild executor to properly handle ESM
output formats and creating a proper `package.json`

closes: #10296

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-11 16:18:48 +01:00
Aidan Temple 18a93cf38c feat(js): ignore scoped export conditions (#32063)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

There is an emerging pattern of using scoped custom export conditions
for pointing to source. See:
- [Announcing TypeScript
5.7](https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/#path-rewriting-for-relative-paths:~:text=As%20a%20result%2C%20if%20you%E2%80%99ve%20been%20using%20a%20workspace%2Dstyle%20layout%20with%20multiple%20packages%20referencing%20each%20other%2C%20you%20might%20need%20to%20use%20conditional%20exports%20with%20scoped%20custom%20conditions%20to%20make%20this%20work%3A)
- [Live types in a TypeScript
monorepo](https://colinhacks.com/essays/live-types-typescript-monorepo#:~:text=Here%27s%20how%20a%20custom%20condition%20might%20look%20in%20your%20package.json.%20There%27s%20nothing%20special%20about%20the%20string%20%22%40colinhacks/zod%22%20here!%20It%20could%20be%20anything.)
- [Loading from
Source](https://github.com/isaacs/tshy?tab=readme-ov-file#loading-from-source)

## Current Behavior
<!-- This is the behavior we have today -->

When including an export condition that points to the source code the
typescript plugin does not add a build target. However, if this export
condition is named `development` the build target is added.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Scoped export conditions pointing at source should not remove the build
target.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
2025-08-11 16:13:07 +01:00
Jason Jean 23cc7465cc feat(core): add automatic pane switching for failed dependencies (#32006)
## Enhanced TUI Experience: Intelligent Pane Management and Dependency
Analysis

This PR significantly improves the TUI experience by implementing smart
pane switching and enhanced dependency visualization when tasks fail.

### 🚀 Key Features

#### Automatic Pane Switching for Failed Dependencies
- **Smart Detection**: When a task becomes skipped due to dependency
failures, the TUI automatically identifies the root cause
- **Intelligent Switching**: Panes showing skipped tasks automatically
switch to display the failed dependency's terminal output
- **Duplicate Prevention**: If both panes would show the same failed
task, the layout automatically consolidates to a single pane to avoid
redundancy

#### Enhanced Dependency View for Skipped Tasks
- **Root Cause Analysis**: Skipped tasks now show clear messaging about
which dependency caused the failure
- **Visual Indicators**: Skipped tasks use warning colors (orange
borders, scrollbars) to distinguish them from pending tasks
- **Interactive Navigation**: Users can scroll through dependencies of
skipped tasks to understand the failure chain

#### Centralized Status Icon System
- **Consistent Styling**: Created a centralized `status_icons` module
for consistent task status representation across all components
- **Unified Theming**: All status indicators (checkmarks, spinners,
warning symbols) now use consistent colors and styling

### 🔧 Technical Improvements

#### Code Optimization
- **Simplified Logic**: Replaced complex `matches\!` patterns with
direct equality checks where appropriate (e.g., `status_map.get(dep) ==
Some(&TaskStatus::Failure)`)
- **Cleaner Conditionals**: Converted nested match statements to more
readable if-else patterns using `matches\!` macro
- **Functional Programming**: Used iterator chains with `filter` and
`map` for cleaner collection processing

#### Enhanced State Management
- **Layout Consolidation**: When duplicate panes are detected, the
system automatically switches from double to single pane layout
- **State Consistency**: Proper cleanup of terminal pane data,
dependency view states, and layout areas when consolidating panes
- **Key Event Handling**: Extended keyboard navigation to work with both
pending and skipped tasks in dependency view

### 🎯 User Experience Improvements

#### Better Failure Visibility
- **Immediate Focus**: Failed dependencies are immediately brought to
the user's attention without manual navigation
- **Context Preservation**: When switching panes, the system maintains
proper focus and scroll states
- **Clear Messaging**: Skipped tasks display specific information about
which dependency failed rather than generic messages

#### Responsive Layout
- **Dynamic Adaptation**: Layout automatically adjusts from double to
single pane when appropriate
- **Consistent Theming**: Skipped tasks use warning colors throughout
the interface for immediate recognition
- **Improved Scrolling**: Enhanced scrollbar styling that adapts to task
status (warning colors for skipped tasks)

### 🛠 Files Changed

- **`app.rs`**: Core pane switching logic, layout management, and
automatic failure detection
- **`dependency_view.rs`**: Enhanced skipped task support, root cause
analysis, and improved styling
- **`tasks_list.rs`**: Integration with centralized status icon system
- **`graph_utils.rs`**: New dependency analysis functions for failure
chain detection

This enhancement transforms the TUI from a passive monitoring tool into
an intelligent assistant that proactively helps users understand and
navigate build failures.
2025-08-11 10:54:56 -04:00
Juri 0863163afa chore(repo): updates teh nx mcp to stdio as per notification 2025-08-11 16:43:10 +02:00
Jack Baker a3c54e8df7 cleanup(angular): remove CommonModule from component generators (#32215)
## Current Behavior
When generating a new Angular component it imports `CommonModule` by
default.

## Expected Behavior
The `CommonModule` is not needed as often in modern angular because of
the new control flow syntax and the move away from `[ngClass]` and
`[ngStyle]` in favour of `[class]` and `[style]`. It is also not
included by the official angular component generator.
2025-08-11 15:29:47 +01:00
Chau Tran 6e02724d69 chore(graph): bump graph version (#32287) 2025-08-11 13:45:26 +00:00
Colum Ferry 7ea6b8252a chore(repo): ensure playwright deps installed (#32283)
Ensure playwright deps are installed in e2e matrix workflow
2025-08-11 08:19:39 -04:00
Terry Mun-Andersen 4941173dd6 fix(module-federation): upgrade module federation to 0.18.0 (#32260)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

This PR upgrades both `@module-federation/enhanced` and
`@module-federation/sdk` to
[0.18.0](https://github.com/module-federation/core/releases/tag/v0.18.0),
which uses the transitive dependency koa@3 that contains a patch for the
reported vulnerability: https://nvd.nist.gov/vuln/detail/CVE-2025-8129

## Current Behavior
The `@module-federation/enhanced` and `@module-federation/sdk`
dependencies are on version 0.17.0, which contains a reported
vulnerability related to the use of koa@2.

This causes any consumers of the latest nx version to receive a security
vulnerability warning due to the transitive dependency koa@2 being
installed, e.g. via GitHub security overview:

<img width="938" height="375" alt="Screenshot 2025-08-07 at 23 26 26"
src="https://github.com/user-attachments/assets/d4653940-3a23-45c6-881f-639e4732fdce"
/>

## Expected Behavior
Having nx installed should not raise a security vulnerability warning.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

_n.a._

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-11 12:22:09 +01:00
Mohamed Muhsin 5fcc41a776 fix(core): update http-proxy-middleware to resolve vulnerability (#32278)
Update http-proxy-middleware to latest. 

This update resolves vulnerability in the package: 

[CVE-2025-32997](https://nvd.nist.gov/vuln/detail/CVE-2025-32997)
[CVE-2025-32996](https://nvd.nist.gov/vuln/detail/CVE-2025-32996)

---------

Co-authored-by: muhsin.kamil <muhsin.kamil@bonial.com>
Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-11 10:10:54 +01:00
Chau Tran 3289d8fe6f chore(graph): clean up graph command (#32279)
remove `createSpecificTaskGraphResponse` and call
`createExpandedTaskInputResponse` with array of 1 project instead
2025-08-11 10:05:55 +02:00
Chau Tran 014e775b73 chore(docs): bump graph version to fix nx-dev graph (#32273)
Bump `@nx/graph` version with the fix for `nx-dev`. This only happens
for pages with multiple project graphs because the internal
`ProjectGraphClient` assumes a singleton.
2025-08-09 01:21:26 +00:00
Chau Tran 06f56e9c1b chore(misc): tiny typo in cache poisoning blog post (#32276)
Just happen to check Victor latest commit
2025-08-08 21:53:36 +00:00
Victor Savkin c23ea7a7b4 chore(misc): minor tweaks in a blog post (#32274) 2025-08-08 20:35:20 +00:00
Jason Jean e8e006f679 feat(graph): optimize task graph loading with lazy loading and caching (#31581)
## Summary

Implements lazy loading for task graphs to significantly improve initial
load times in the graph visualization UI. Instead of loading all task
graphs upfront, graphs are now fetched on-demand based on user
interaction.

### Key Changes

- On-demand loading: Task graphs are loaded only when needed (when
selecting a target or specific projects)
- Server-side optimization: Efficient task graph generation for specific
targets and projects
- Client-side caching: Intelligent cache management to avoid refetching
already loaded graphs
- Multiple query patterns support:
  - `/tasks/:selectedTarget` - Load all projects with that target
- `/tasks/:selectedTarget?projects=app1 app2` - Load specific projects
only
  - `CLI: nx <target> <project> --graph`

### Server-side 
`packages/nx/src/command-line/graph/graph.ts`

- Added `createTaskGraphsForTargetAndProjects` function for flexible
task graph generation
- Modified `/task-graph.json` endpoint to support query parameters
(projects, target)
- Implemented proper handling for both UI (projects param) and CLI
requests
- Added server-side caching for task graphs (Map-based cache)

### Client-Side

Routes and Loaders (graph/client/src/app/routes.tsx)
  - Added selectedTargetLoader with cache-aware fetching
  - Integrated task graph cache for optimal data fetching
  - Simplified route structure by removing unnecessary metadata loader

Cache Management (graph/client/src/app/task-graph-cache.ts)
  - Created sophisticated TaskGraphCache class
  - Tracks individual project graphs and fetch status
  - Supports partial fetching (only missing projects)
  - Handles different query patterns intelligently

Components (graph/client/src/app/feature-tasks/tasks-sidebar.tsx)
  - Updated to use selectedTarget loader data
  - Graceful handling when no data is available

Service Layer (graph/shared/src/lib/project-graph-data-service/)
- Updated all service implementations to support getSpecificTaskGraph()
- Modified method signature to accept projects: string | string[] | null
  - Services updated: Fetch, Local, Mock, NxConsole

Type Definitions (graph/shared/src/lib/)
  - Updated ProjectGraphService interface
  - Cleaned up type imports and definitions

Build Configuration
  - scripts/generate-graph.ts - Simplified generation logic
- scripts/generate-graph-environment.ts - Updated workspace
configuration
  - graph/client/webpack.config.js - Updated asset paths
  - .gitignore - Updated ignored directories

### Bug Fixes (Latest Update)

### Performance Impact

**Before:**
- Generates ALL task graphs upfront (hundreds/thousands in large repos)
- Blocks main thread during generation
- Large network payloads regardless of usage
- No caching, regenerates on every request

**After:**
- Only generates task graphs when actually needed
- Lightweight metadata response for fast initial load
- Progressive loading as users explore
- Intelligent caching with cache invalidation
- **Stable and error-free**: No console crashes or race conditions

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Chau <25516557+nartc@users.noreply.github.com>
2025-08-08 15:19:36 -04:00
Abdullah Ebrahim 1119de1a9c fix(release): ensure no exception when conventionalCommits is false (#32256) 2025-08-08 19:14:12 +00:00
Colum Ferry 09c7ac8174 feat(docker): add --dockerVersion flag for specifying exact version (#32266)
## Current Behavior
There is no method for specifying an exact version for docker version
during `nx release`

## Expected Behavior
Add `--dockerVersion` to provide the user with a manner of providing an
exact docker version

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Colum Ferry <Coly010@users.noreply.github.com>
2025-08-08 20:06:02 +01:00
Jack Hsu 8c9154a1f0 docs(misc): add support for existing markdoc custom tags (#32270)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-08 14:01:46 -04:00
Jason Jean 39d548e999 feat(core): add argv field to Pre/Post Tasks Execution contexts (#32259)
## Current Behavior

The new Pre/Post Tasks Execution API was missing command information
that was available in the old `StoreRunInformationLifeCycle` system.
This made it impossible to track the original command that initiated
task execution, particularly problematic for complex commands like `nx
affected` and `nx run-many`.

## Expected Behavior

With this change, both `PreTasksExecutionContext` and
`PostTasksExecutionContext` now include an `argv: string[]` field
containing the complete raw command line arguments from `process.argv`.

## Related Issue(s)

Addresses the missing command information discussed in
https://github.com/nrwl/nx/discussions/29637

## Changes Made

- **Add `argv: string[]` field** to `PreTasksExecutionContext` interface
- **Add `argv: string[]` field** to `PostTasksExecutionContext`
interface
- **Pass `process.argv` directly** to both execution contexts
- **Remove command parsing functions** (no longer needed)

## Benefits

- **Complete Raw Data**: Provides full `process.argv` including node
executable path, script path, and all arguments
- **No Information Loss**: Every argument preserved exactly as passed to
the process
- **Better Analysis**: Consumers can parse/analyze arguments however
needed
- **Simpler Implementation**: No parsing required - just pass
`process.argv` directly

## Example

Instead of missing command information, plugins now receive:

```typescript
{
  workspaceRoot: '/path/to/workspace',
  nxJsonConfiguration: { ... },
  argv: [
    "/usr/bin/node",
    "/usr/local/bin/nx", 
    "affected",
    "--target=build",
    "--head=HEAD~1"
  ]
  // ... other fields
}
```

This is especially valuable for tracking complex commands like `nx
affected` and `nx run-many` where the original command context was
previously lost.

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-08 09:18:13 -05:00
Jason Jean 4383b649e4 chore(repo): add commit-msg hook for immediate commit validation (#32269)
## Current Behavior

Commit message validation only happens during the pre-push hook, which
means developers don't get feedback about incorrect commit message
format until they try to push their changes to the remote repository.

## Expected Behavior

Commit messages should be validated immediately when creating a commit,
providing instant feedback and preventing incorrectly formatted commits
from being created in the first place.

## Changes Made

- **Add `.husky/commit-msg` hook** - Validates commit messages before
commit creation
- **Enhance `scripts/commit-lint.js`** - Support both commit-msg hook
and existing pre-push validation
- **Add WIP support** - Allow "wip" messages to bypass format validation
for work-in-progress commits
- **Maintain backward compatibility** - Existing pre-push validation
continues to work

## Benefits

- Immediate feedback on commit message format
- Prevents bad commits from being created
- Supports WIP commits for development workflow  
- No disruption to existing validation process

## Related Issue(s)

This improves the developer experience by catching commit message format
issues earlier in the workflow.
2025-08-08 10:06:23 -04:00
Jack Hsu dea88f7e57 docs(misc): update styling and layout for astro docs (#32257)
It should match the original docs in terms of color, layout, etc. more
closely.
2025-08-08 08:14:08 -04:00
MaxKless 777ee735a5 fix(release): adjust publish error message and version schema (#31190)
Co-authored-by: James Henry <james@henry.sc>
2025-08-08 12:06:38 +02:00
Colum Ferry 385ecc870c feat(docker): add support for {env.VAR_NAME} (#32255)
## Current Behavior
We currently do not have a method for interpolating Environment
Variables into the `versionSchemes` for Docker Release.

## Expected Behavior
We allow the usage of `{env.VAR_NAME}` to interpolate Environment
Variables
2025-08-08 10:37:04 +01:00
MaxKless 6d3335dcd9 fix(core): repair nx mcp command (#32264) 2025-08-08 11:36:56 +02:00
MaxKless ee4a1e6efd fix(core): don't throw during migrate ui execution if migrations.json is gitignored (#32166) 2025-08-08 10:16:26 +02:00
Jason Jean c60258e45a test(node): disable failing esbuild e2e test (#32262)
## Current Behavior

The esbuild e2e test `it should generate an app that cosumes a
non-buildable ts library` is failing and causing CI issues.

## Expected Behavior

The test should be temporarily disabled until the underlying issue is
resolved.

## Related Issue(s)

The test failure is due to https://github.com/pinojs/pino/issues/2253.
This test should be re-enabled once that pino issue is resolved.

## Changes

- Added `.skip` to the failing test
- Added a TODO comment referencing the pino issue for when to re-enable
the test
2025-08-07 21:46:32 -04:00
Leosvel Pérez Espinosa 42a54d16b0 feat(core): calculate dependency view area safely in the tui and render its scrollbar in the correct position (#32187)
## Current Behavior

- Some resizing (e.g., splitting the terminal) when the TUI shows the
Dependency View causes the TUI to crash with an out-of-bounds issue
while rendering.
- The Dependency View shows the scrollbar as an inner scrollbar instead
of being located in place of the right border (like the Terminal Pane
does).

<img width="828" height="361" alt="image"
src="https://github.com/user-attachments/assets/b9f8de5f-6fb3-401c-9da3-4867cd71ca73"
/>

## Expected Behavior

- The TUI shouldn't crash when showing the Dependency View and a big
resize occurs.
- The Dependency View should show the scrollbar in place of the right
border (like the Terminal Pane does).

<img width="827" height="362" alt="image"
src="https://github.com/user-attachments/assets/a04bf7c0-00ca-485c-9f5f-5a316557bd3b"
/>
2025-08-07 17:28:12 -04:00
Caleb Ukle e0d9709acd docs(nx-cloud): fix typos and improve nx agent custom image docs (#32249)
apply pr suggestions from previous pr #32244 that I didn't push before
merging 🤦
2025-08-07 14:27:24 -05:00
Juri 89b98dd6af docs(nx-dev): add article about git worktrees 2025-08-07 20:37:20 +02:00
Jack Hsu baa2c8ea00 docs(misc): update sidebar for astro docs (#32199)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-07 11:51:32 -04:00
Nicholas Cunningham d89c0ac273 fix(nextjs): configure Jest to use tsconfig.json for Next.js apps (#32089)
## Current Behavior

When generating a Next.js application with Jest as the unit test runner,
Jest configuration fails because it defaults to looking for
`tsconfig.app.json` which doesn't exist in Next.js projects. Next.js
apps use `tsconfig.json` as their main TypeScript configuration file.

## Expected Behavior

Jest should be configured to use `tsconfig.json` as the runtime
TypeScript configuration for Next.js applications, allowing Jest to
properly resolve TypeScript configurations.

## Related Issue(s)

Fixes #31555
2025-08-07 09:47:19 -04:00
Nicholas Cunningham 69c7e4d0ce fix(misc): validate workspace names to reject names starting with numbers (#32088)
## Summary

Fixes #31602 by adding validation to `create-nx-workspace` to reject
workspace names that start with numbers, preventing confusing errors
later in the workspace generation process.

## Changes Made

- **Added `validateWorkspaceName()` function** - Validates that
workspace names start with letters
- **Integrated validation into workspace creation flow** - Validates
both command-line arguments and interactive input
- **Clear error messaging** - Provides helpful error message with
examples of valid names


🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-07 09:46:14 -04:00
Rob De Feo b195942800 chore(deps): update tmp and @types/tmp dependencies (#32247)
## Current Behavior
The repository currently uses outdated versions of the `tmp` and
`@types/tmp` dependencies:
- `tmp` version ~0.2.1
- `@types/tmp` version ^0.2.0

## Expected Behavior
Update to the latest compatible versions of these dependencies:
- `tmp` version ~0.2.4
- `@types/tmp` version ^0.2.6

This will ensure we have the latest bug fixes and improvements from
these packages.

## Related Issue(s)
This is a general dependency update to keep the project up to date.

## Related Issue(s)
[tmp allows arbitrary temporary file / directory write via symbolic link
`dir` parameter](https://github.com/advisories/GHSA-52f5-9888-hmc6)

Fixes Github advisory https://github.com/advisories/GHSA-52f5-9888-hmc6
2025-08-07 09:41:39 -04:00
Emily Xiong b5ccbcd45a fix(gradle): fix gradle bootRun continuous (#32107)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
when running gradle command with args, it requires to use
--args="--continutous"
for bootRun, which is continuous, i got an error
```
Execution failed for task ':bootRun'.
> Failed to query the value of task ':bootRun' property 'mainClass'.
   > Querying the mapped value of task ':resolveMainClassName' property 'outputFile' before task ':resolveMainClassName' has completed is not supported
 ```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
change it when just running `nx run demo:bootRun --continuous`, it will pass --continuous directly to ./gradlew. 
any args not in the list
```
new Set([
    'taskName',
    'testClassName',
    'args',
    'excludeDependsOn',
    '__unparsed__',
  ]);
  ```
  will passed as arga to the ./gradlew 
  i try to add `__unparsed__`, but it is always empty.
  
for bootRun, i add excludeDependsOn as false in nx.json and that error
goes away.
  ```
      "bootRun": {
      "options": {
        "excludeDependsOn": false
      }
    }
    ```
    
so for all continuous task, i changed excludeDependsOn as false in the
option


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-07 09:40:27 -04:00
Leosvel Pérez Espinosa 82fb5c4cf3 fix(core): ensure task details are always stored in the task history (#32246)
## Current Behavior

When Nx Cloud is enabled, task details are not stored in the task
history. This results in features like local flaky task detection or
displaying estimated task durations in the TUI not working.

## Expected Behavior

Task details should always be stored in the task history regardless of
Nx Cloud being enabled.
2025-08-07 09:38:32 -04:00
Jason Jean 7118ca3dde fix(gradle): normalize project root paths (#32243)
## Current Behavior

The Gradle plugin does not normalize project root paths when creating
project nodes, which can lead to inconsistent path handling across
different operating systems and file systems.

## Expected Behavior

Project root paths should be normalized using `normalizePath` from
`@nx/devkit` to ensure consistent path handling regardless of the
operating system or file system.

## Related Issue(s)

This is a general improvement to prevent potential path-related issues
in Gradle project detection and configuration.
2025-08-07 09:37:29 -04:00
Caleb Ukle 6dff632112 docs(nx-cloud): add page for custom images w/ Nx Agents (#32244)
Explain how to use custom images for nx agents with both recommended and
manual options.
2025-08-07 08:20:32 -05:00
Caleb Ukle 8ec6aa6d3c docs(nx-dev): add CTA variants (#32232)
<img width="794" height="589" alt="image"
src="https://github.com/user-attachments/assets/721c8e60-96ce-46c1-813c-5190f2f68f07"
/>
<img width="1056" height="625" alt="image"
src="https://github.com/user-attachments/assets/a117e857-2d65-4484-a778-c20dd20de7b6"
/>
2025-08-07 08:17:33 -05:00
Caleb Ukle 166a05016b docs(repo): add plugin registry to new docs site (#32183)
add basic registry page at /plugin-registry

Note: most of this work was aimed at getting the content to the page, we
can come back to making the plugin registry page prettier and have more
functionality in future PRs

![WKMac
2025-08-04T19-37-52](https://github.com/user-attachments/assets/ce320df0-505b-4e94-b1ce-7c8cf9ad52f9)

resolves: DOC-71
2025-08-07 01:39:05 +00:00
Josh VanAllen 430b11b398 fix(nx-cloud): auth token env var usage (#32240)
This is to ensure that the NX_CLOUD_AUTH_TOKEN is treated the same as
ACCESS_TOKEN.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

If there isn't any Nx Cloud properties in the `nx.json`, the CLI doesn't
recognize `NX_CLOUD_AUTH_TOKEN` as a environment variable to communicate
with Nx Cloud. If I provide just `NX_CLOUD_ACCESS_TOKEN`, the CLI does.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Since `AUTH_TOKEN` is suppose to be an alias for `ACCESS_TOKEN`, the
behavior should be the same.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-07 00:55:13 +00:00
Miroslav Jonaš 32eddced88 docs(nx-dev): remove unmaintained go plugin (#32145)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
This plugin is listed first, despite being last maintained 3 years ago.

## Expected Behavior
We should not show unmaintained projects when there are others covering
the same technology that are maintained

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-06 18:40:00 -04:00
Jason Jean 92160d71f1 chore(repo): update nx to 21.4.0-beta.6 (#32233)
Updating Nx from 21.4.0-beta.4 to 21.4.0-beta.6
2025-08-06 17:21:12 -05:00
Nicholas Cunningham 361c0f56d1 chore(repo): enable parallel e2e tests on CI (#32173)
## Current Behavior

E2E tests are distributed to agents but run sequentially (1 per agent),
underutilizing agent capacity.

## Expected Behavior

E2E tests run in parallel (2-3 per agent) with proper port allocation to
prevent conflicts.

## Changes Made

- Add port allocation utilities to prevent port conflicts in parallel
tests
- Configure CI agents to run 2-3 e2e tests in parallel per agent
- Keep `e2e-release` sequential due to shared git state requirements

### MISC
- On CI browsers (cypress/playwright) are already pre-installed, we
improve this by short-circuiting the installation.

---------

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-06 17:40:01 -04:00
Juri Strumpflohner 44f6b2821d fix(nx-dev): adjust mobile layout for homepage (#32237) 2025-08-06 22:03:31 +02:00
Caleb Ukle 6d9f05c83c docs(nx-cloud): update refs to old /ci/intro pages (#32242)
update links pointing to deprecated /ci/intro pages
2025-08-06 20:01:07 +00:00
Jack Hsu a19f83cb2c docs(misc): update cookiebot consent check so it works when cookiebot is blocked (#32241)
The website should still function when Brave shield is up.


`window.Cookiebot` defaults to `<script id="Cookiebot">` when the script
is blocked... so the original check is not fully correct.
2025-08-06 15:49:31 -04:00
Colum Ferry 3551913632 chore(docker): ensure docker is available before running e2es (#32224)
Docker is not always available in our CI envs. Perform a check first to
ensure it is.
2025-08-06 09:05:56 -04:00
Colum Ferry e387a01729 fix(core): provide hint that vite will be used when selecting React Router (#32238)
## Current Behavior
React Router requires using a Vite plugin. This means that during the
CNW flow, if a user selects `Yes` to the prompt for `React Router for
SSR`, we do not prompt them for `bundler`.
This can be confusing for users that expect to be able to select
bundler.

## Expected Behavior
Clarify during the prompt for React Router for SSR that Vite will be
selected as the bundler.
2025-08-06 13:58:08 +01:00
Nicole Oliver 32272588b1 feat(nx-dev): adjustments to nx.dev homepage (#32235) 2025-08-06 09:44:03 +02:00
Caleb Ukle 334d74ea1c docs(misc): add examples pages to generated plugin pages (#32221)
add the plugins docs/ files as examples for the generator and executor
generated pages.
2025-08-05 15:27:15 -05:00
Caleb Ukle 24f03bb1b3 docs(nx-cloud): remove redundant intro pages for nx-cloud (#32216)
intro docs for nx-cloud aren't needed as it's duplicate information and
should instead be covered by the regular intro flows, which now mention
nx cloud.
Moved over some content into applicable pages, such as `nx g
ci-workflow` command and calling out `nx connect` command in places.
2025-08-05 13:44:10 -05:00
Chau Tran cc50fda71a chore(graph): up nx graph 0.5.2 (#32230)
increase the expansion selection threshold to 15
2025-08-05 13:30:25 -05:00
Jack Hsu acc84b014f chore(misc): update CODEOWNERS (#32231)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-05 13:59:16 -04:00
Jack Hsu 1fc32e45e9 chore(misc): add owners to astro-docs (#32228)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-05 13:28:40 -04:00
Leosvel Pérez Espinosa b68c349cf3 fix(misc): loose and fix the ts solution setup requirements and use it when there is no root tsconfig file (#32150)
## Current Behavior

- The logic to detect whether the workspace uses the TS solution setup
restricts the top-level properties in the `tsconfig.base.json` file and
only allows `compilerOptions`. This prevents extending from other
tsconfig files in the `tsconfig.base.json` file.
- Generating projects in a workspace without any known root tsconfig
files (`tsconfig.json`, `tsconfig.base.json`) results in the old setup
being generated. Workspaces without root TS configuration should be able
to use the TS solution setup.

## Expected Behavior

- The logic to detect whether the workspace uses the TS solution should
not restrict the top-level properties in the `tsconfig.base.json` file.
The only things required for the TS solution setup are to have
`composite: true` and `declarations` enabled.
- The TS solution setup should be used when generating projects in a
workspace without any known root tsconfig files (`tsconfig.json`,
`tsconfig.base.json`).

## Related Issue(s)

Fixes #32134
2025-08-05 12:15:46 -04:00
Jack Hsu 847d69908d docs(misc): add cookies prompt (#32197)
Add cookie consent for website using
[Cookiebot](https://www.cookiebot.com).

Moves all tracking logic into
`window.addEventListener('CookiebotOnAccept', ...)` callback.
2025-08-05 12:10:03 -04:00
Juri Strumpflohner bc78f06f79 docs(core): update monorepo concept page (#32213)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-08-05 15:01:53 +00:00
Juri Strumpflohner 01b5078192 chore(repo): fixes weird post-checkout issue when using worktrees (#32229)
when using worktrees I'm getting an error like

```
❯ git worktree add ../test-feat-a feat-a
Preparing worktree (checking out 'feat-a')
Updating files: 100% (9887/9887), done.
HEAD is now at c14325d3d3 feat(nx-dev): update nx.dev homepage (#32132)
fatal: bad object 0000000000000000000000000000000000000000
husky - post-checkout script failed (code 128)
```

this is due to our post-checkout husky hook. This PR fixes it
2025-08-05 09:54:46 -05:00
Colum Ferry 9e7b95bf28 fix(react): remote generator should normalize names (#32211)
## Current Behavior
Running the `@nx/react:remote` generator as a standalone generator in a
TS Proj Workspace will result in the generator throwing an error that
`@org/remoteName` is invalid.

## Expected Behavior
Ensure we normalize the project name early to disregard the scope that
is added.
This matches the behaviour of the host generator.

## Related Issue(s)

Fixes #30807
2025-08-05 15:29:34 +01:00
Philip Fulcher e0b4ee3dc2 docs(nx-dev): add workspace graph article (#32218) 2025-08-05 08:14:47 -06:00
Emily Xiong 419a4a849f fix(gradle): always add plugin to all projects (#32222)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-05 10:05:34 -04:00
Emily Xiong 74fcd17288 fix(gradle): keep original gradle name (#32220)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
currently, the project name is just last part to full gradle path, for
example:
- gradle path for :parent-path:project-name, it currently takes only
project-name
this might create duplicates in a large project

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- change the name to match gradle path exactly, then the project name
would just be the gradle path
- for example, the gradle command would be `./gradlew
:parent-path:project-name:build`, nx command would be `nx run
:parent-path:project-name:build`


https://linear.app/nxdev/issue/NXC-2917/fix-terminal-ui-compatibility-with-gradle-naming
need to be fixed before this pr

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-08-05 10:04:41 -04:00
Nicholas Cunningham 98ee167514 fix(js): handle npm 11 warnings in stderr during registry version resolution (#32223)
## Current Behaviour

E2e tests fail with Node 24 because npm 11 writes deprecation warnings
to stderr even on successful commands, causing registry version
resolution to fail.

## Expected Behaviour

Registry version resolution should work with npm 11 warnings in stderr.

## References
```
 NX   Unable to resolve the current version from the registry: "registry=http://localhost:4873" tag=latest. Please ensure that the package exists in the registry in order to use the "registry" currentVersionResolver. Alternatively, you can use the --first-release option or set "release.version.fallbackCurrentVersionResolver" to "disk" in order to fallback to the version on disk when the registry lookup fails.
```
https://staging.nx.app/runs/l9kRV3E6ST
2025-08-05 09:19:09 -04:00
Caleb Ukle ffb85478b6 docs(nx-dev): move over concept docs to astro (#32181)
- use lfs for imgs
- copy over concepts to astro site.
- note: some of the markdoc impl hasn't been done yet, so those are left
as plain text. things like the project view, graph, side-by-side still
need to be moved.

closed: DOC-67
2025-08-05 08:51:29 -04:00
Nicole Oliver c14325d3d3 feat(nx-dev): update nx.dev homepage (#32132) 2025-08-05 06:33:13 -04:00
Juri 990c6f60d1 fix(nx-dev): adjust the filter ui on the blog to have it look less squeezed 2025-08-04 22:16:25 +02:00
Rares Matei 621f6b33f0 docs(nx-cloud): heartbeat docs (#32196)
Fixes CLOUD-3440

---------

Co-authored-by: Caleb Ukle <caleb.ukle+github@pm.me>
2025-08-04 18:32:00 +00:00
PhillipDNrwl ee84355c9c fix(nx): update pricing link in launch templates (#32155)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->



## Current Behavior
The current link points to [https://nx.dev/nx-cloud#plans]


**_"See their detailed description and pricing at
[nx.dev/pricing](https://nx.dev/pricing#plan-detail?sutm_source=nx.dev&utm_medium=launch-templates)."_**

## Expected Behavior
Updated the link to point to
[https://nx.dev/ci/reference/credits-pricing]

**_"See their detailed description and pricing at [credits
pricing](/ci/reference/credits-pricing?utm_source=nx.dev&utm_medium=launch-templates)."_**

## Related Issue(s)

https://linear.app/nxdev/issue/CLOUD-3383/update-launch-template-pricing-docs-link

---------

Co-authored-by: Nicole Oliver <nicole.oliver.42@gmail.com>
2025-08-04 16:00:48 +00:00
Jack Baker b270cc9127 fix(module-federation): use asyncStartup for ssr configuration (#32189)
The federationRuntime option not longer exists in experiments, use
asyncStartup to enable asynchronous container startup.

## Current Behavior
When creating a new project with module federation (`nx g
@nx/angular:host host --remotes=remote1,remote2 --ssr`) and then try to
to run the `serve-ssr` target (`nx serve-ssr host`) you get this error:
<img width="1615" height="511" alt="image"
src="https://github.com/user-attachments/assets/19819020-821b-4422-83ae-88203018b981"
/>


## Expected Behavior
It should serve the application using SSR.
2025-08-04 16:14:56 +01:00
Jay Bell 7b09e32c81 fix(rspack): abide by rspacks watch configuration (#32133)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

As it currently stands, there is no (easy) way to get HMR support
working with Rspack + Nest by using the `@nx/rspack:rspack` build
executor and `@nx/js:node` serve executor because we need to turn
`watch: false` in the serve executor (as we don't want it to watch and
call the build again) but that in turn makes the rspack build executor
not use `compiler.watch` this only building once.

Due to the way options are passed through to the executor (via
`runExecutor`) even if we do:

```
"options": {
    "buildTarget": "myapp:build",
    "buildTargetOptions": {
        "watch": true
    },
    "watch": false
}
```

The `watch: false` overwrites it.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

We should be able to have the Rspack executor abide by whatever the
`watch` configuration is that is returned from our `rspack.config.ts`
file for the application.

There is precedent for abiding by the tools configuration file vs the
executor option, the Webpack executor already does it.

The Webpack compiler is started in watch mode if the `watch` flag is
true in the webpack config itself vs. strictly abiding by the executors
options. Based on
https://github.com/nrwl/nx/issues/1992#issuecomment-2826664777 I could
do what I want, but I am using Rspack not Webpack.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

https://github.com/nrwl/nx/issues/1992

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-04 15:56:50 +01:00
Mike Hartington 62cbe9b668 docs(misc): add docker release video to docker page 2025-08-04 16:23:51 +02:00
Nicholas Cunningham b88664fbee feat(misc): update repo to 21.4.0-beta.4 (#32180)
### Changes

Update repo to use `21.4.0-beta.4`
2025-08-01 12:57:54 -04:00
Rodrigo Yokota efca9b93b9 fix(module-federation): re-add support for mf aliases (#31347)
## Current Behavior
At some point in time, we had support for Module Federation aliases, and
I noticed some of our examples broke in the latest versions of Nx.


![image](https://github.com/user-attachments/assets/c9130d0c-3694-4650-8c26-96ff62c7ccad)

This is an attempt to regain that support with some normalization of
Module Federation project names.

## Expected Behavior
We need to have the mapping back of aliases in the format:
```typescript
const mfConfig = {
  // ...
  "@nx-mf/remote": "_nx_mf_remote@http://localhost:3001",
  // ...
}
```

## Related Issue(s)
https://github.com/nrwl/nx/issues/31346

Fixes #
Add a function specific to parse Federated names into resolvable
JavaScript vars.
Use this function in every place a `str.replace(/-/, '_')` is being
used.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-08-01 12:34:49 -04:00
Colum Ferry 4186922b50 fix(docker): generate dockerfile compliant with package manager (#32191)
## Current Behavior
We currently generate a Dockerfile for node applications that only takes
into account npm.
This means that if the workspace is using yarn or pnpm then when we
prune the lockfile, we have an incorrect lockfile in the output folder
for the docker build.

## Expected Behavior
Ensure the generated Dockerfile is compliant for the package manager
used in the workspace
2025-08-01 16:56:54 +01:00
Colum Ferry 2fc66d4f0a chore(repo): add Coly010 and jaysoo as codeowners for graph/** (#32194)
Add @Coly010 and @jaysoo as code owners for `graph/**`
2025-08-01 10:55:01 -04:00
Colum Ferry 4db413f6ed fix(docker): add docker target group for pdv (#32167)
## Current Behavior
The Docker targets are not grouped

## Expected Behavior
Icon for Docker in PDV
Docker targets are grouped
<img width="145" height="82" alt="image"
src="https://github.com/user-attachments/assets/b0e36f32-d402-4826-a970-24c14c4ad946"
/>

<img width="968" height="390" alt="image"
src="https://github.com/user-attachments/assets/1fe61a16-64a9-4639-ba63-e9d4260fda57"
/>
2025-08-01 10:40:10 -04:00
Colum Ferry 53ced2c47f fix(node): ensure framework deps are added to app package.json (#32192)
## Current Behavior
Framework deps such as `express` are not added to the app's package.json

## Expected Behavior
Ensure framework deps are added to app's package.json
2025-08-01 13:47:57 +01:00
Chau Tran 85eea3fd3c feat(graph): remove legacy graph (#32117)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
`graph-client` application uses `@nx/graph/legacy`

## Expected Behavior
The entire repo should be free of `@nx/graph/legacy` imports. Existing
behaviors of the graph should be maintained.
2025-08-01 08:36:52 -04:00
Colum Ferry 7b703ee665 fix(core): cleanup dockerVersionScheme option in release to use withX pattern (#32185)
## Current Behavior
When multiple commands use the same option, we follow a pattern of using
`withX` helpers.
The `dockerVersionScheme` option does not follow this pattern.

## Expected Behavior
Create `withDockerVersionSchemeOptions` to follow the pattern
2025-08-01 12:22:11 +01:00
Leosvel Pérez Espinosa ccd385b651 fix(angular): add missing config properties to adapter whitelist (#32186)
## Current Behavior

Running tasks for Angular projects that use Angular CLI builders can
result in validation errors when the project or workspace configurations
contain Nx-specific properties.

## Expected Behavior

Running tasks for Angular projects that use Angular CLI builders
shouldn't result in validation errors when the project or workspace
configurations contain Nx-specific properties.
2025-08-01 10:42:24 +00:00
Jack Hsu e0a38290fc fix(node): outputs should be in the correct format for prune and copy-workspace-modules targets (#32178)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When running `nx prune api` it fails with:

```
 NX   The following outputs are invalid: 

 - apps/api/dist/package.json
 - apps/api/dist/package-lock.json
```
## Expected Behavior
Prune should work.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 19:22:24 +00:00
Jack Hsu 3469bace0e docs(docker): fix config for releaseTagPattern to be valid (#32179)
This PR fixes an invalid config for Docker release that didn't end up
being implemented.
2025-07-31 19:17:57 +00:00
Nicholas Cunningham bf67560bf9 fix(testing): add NODE_OPTIONS flag for Node.js 24 compatibility (#32177)
## Current Behavior

Jest fails to parse TypeScript config files with ES module syntax on
Node.js 24 with error:
```
Error: Jest: Failed to parse the TypeScript config file
SyntaxError: Unexpected token 'export'
```

## Expected Behavior

Jest should successfully parse TypeScript config files on Node.js 24.

## Related Issue(s)

This occurs because Jest 30 + Node.js 24 can't parse TS configs with
imports without the `--no-experimental-strip-types` flag.

Related to: https://github.com/jestjs/jest/issues/15682
2025-07-31 18:58:46 +00:00
Jack Hsu e2f5de9e62 fix(release): support "nx relase changelog" for docker images (#32169)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Running `nx release changelog [version]` fails for docker images

## Expected Behavior
it should work

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 13:55:34 -04:00
Jack Hsu f741a24cfd fix(docker): add release support when registryUrl is set to docker.io (#32174)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
If user sets `registryUrl` to `docker.io` then release fails.

## Expected Behavior
We should support setting it to `docker.io` even though it's not
necessary.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 13:44:27 -04:00
Colum Ferry 0f7225db6c fix(core): add dockerVersionScheme to nx release version (#32172)
## Current Behavior
`nx release` supports `--dockerVersionScheme`
`nx release version` does not.

## Expected Behavior
`nx release version --dockerVersionScheme` should work
2025-07-31 13:23:50 -04:00
Emily Xiong 6aa0bd4506 chore(gradle): upgrade plugin to 0.1.4 (#32160)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
currently, in the repo, the version is 0.1.0

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
since i modify the new code, i need to publish a version of
https://plugins.gradle.org/plugin/dev.nx.gradle.project-graph
change the version to 0.1.4

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 12:30:13 -04:00
Jack Hsu c0122ae714 docs(docker): add documentation for @nx/docker and supporting release pages (#32130)
See:
https://nx-dev-git-docs-node-docker-nrwl.vercel.app/features/manage-releases
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-07-31 12:29:48 -04:00
Colum Ferry 957d350564 fix(node): ensure cache outputs are set for prune and copy workspace modules (#32171)
## Current Behavior
Generating a node application does not set the outputs for the prune and
copy workspace modules tasks.

## Expected Behavior
Ensure the outputs are set so that cache can be restored correctly
2025-07-31 16:35:29 +01:00
Mike Hartington 4f96532e46 docs(misc): add docker release blog post (#32170)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 11:13:15 -04:00
Colum Ferry f6bfd49d5b chore(repo): ensure storybook works for graph ui projects (#32168)
## Current Behavior
Storybook docgen assume `flow` types when encountering `import type`
syntax.

## Expected Behavior
Ensure `reactDocgen` is set to typescript
2025-07-31 10:57:32 -04:00
Emily Xiong d49b5347ce fix(gradle): fix bootJar, add excludeDependsOn to false (#32157)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

when run bootJar and bootRun, i got this error:
```
> Querying the mapped value of task ':application:resolveMainClassName' property 'outputFile' before task ':application:resolveMainClassName' has completed is not supported
```

both bootJar and bootRun dependsOn resolveMainClassName. however, when
it runs with excludeDependsOn, the gradlew command will be `./gradlew
:app:bootRun --exclude-task :app:resolveMainClassName`. when running the
command like that, it will cause an issue

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
for bootJar and bootRun, hardcode excludeDependsOn to false

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-31 08:57:23 -04:00
Colum Ferry d235ff3ac1 chore(docker): add e2es (#32102)
Add e2e tests for the Docker plugin and test the e2e release of docker
images.
2025-07-31 08:31:55 -04:00
Colum Ferry 2ce4775db8 fix(core): only traverse workspace node when it exists (#32165)
## Current Behavior
There is a runtime issue in project graph pruning where we attempt to
eagerly traverse workspace nodes when they may not exist.

## Expected Behavior
Ensure the workspace node exists before traversing it.
2025-07-31 11:32:07 +01:00
Colum Ferry 5cac24134e feat(node): setup docker should init the docker plugin (#32120)
## Current Behavior
The `@nx/node:setup-docker` generator does not initialize the docker
plugin.

## Expected Behavior
The `@nx/node:setup-docker` generator sets up the docker plugin

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-07-31 11:31:04 +01:00
Jack Hsu b9bfeeb1d1 fix(release): use top-level releaseTagPattern as the default for release groups (#32154)
## Current Behavior

When using `nx release` with Docker projects, the
`release.releaseTagPattern` defined at the root level is not inherited
by release groups. Users must explicitly specify the `releaseTagPattern`
at both the root level AND within
`release.groups.<group>.releaseTagPattern` for it to work correctly when
using 'independent' releases.

Example configuration that doesn't work as expected:
```json
{
  "release": {
    "releaseTagPattern": "release/{projectName}/{version}",
    "groups": {
      "apps": {
          "projectsRelationship": "independent",
          // releaseTagPattern is not inherited here
      }
    }
  }
}
```

## Expected Behavior

The `release.releaseTagPattern` should be automatically inherited by
group configurations, following the same inheritance pattern as other
release configuration properties. Users should only need to specify the
pattern once at the root level unless they want to override it for
specific groups.

With this fix, the above configuration will work correctly, and the
docker releases will use the `release/{projectName}/{version}` pattern
for git tags.

## Related Issue(s)

Fixes #
2025-07-31 00:29:19 +00:00
Nicholas Cunningham 55cb97e00d fix(rspack): update installed version of rspack to be same as @nx/rspack (#32152)
We should match the version which we install of `@rspack/core` to be the
same as `@nx/rspack` as the mismatch can cause errors:
https://staging.nx.app/runs/McxmSeecWa/task/e2e-rspack%3Ae2e-local
```
> rspack build --node-env=production

●  ━━━━━━━━━━━━━━━━━━━━━━━━━ (10%) building builtin:swc-loader??ruleSet[1].rules[2].use[0]!/../my-rspack-react/apps/my-rspack-react/src/../repos/my-rspack-react/node_modules/@nx/rspack/node_modules/@rspack/core/dist/cssExtractLoader.js:141
            }) : result, dependencies.length > 0 && this.__internal__setParseMeta(PLUGIN_NAME, JSON.stringify(dependencies)), callback(null, resultSource, void 0, data);
                                                         ^

TypeError: this.__internal__setParseMeta is not a function
    at /../my-rspack-react/node_modules/@nx/rspack/node_modules/@rspack/core/dist/cssExtractLoader.js:141:58
    at ../my-rspack-react/node_modules/@nx/rspack/node_modules/@rspack/core/dist/cssExtractLoader.js:142:11
    at /../my-rspack-react/node_modules/@rspack/core/dist/index.js:3435:255
    at /../my-rspack-react/node_modules/@rspack/core/dist/index.js:3431:120

Node.js v22.16.0
```

This version is also the same as in our migrations for `@nx/rspack`.

References:
https://github.com/nrwl/nx/blob/master/packages/rspack/package.json#L32

https://github.com/nrwl/nx/blob/master/packages/rspack/migrations.json#L81
2025-07-30 21:13:52 +00:00
Jack Hsu d5c5d15b4f chore(repo): disable failing e2e due to bad nestjs 11.0.8 version (#32156)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-30 16:29:21 -04:00
Caleb Ukle debf624b2f docs(misc): update gradle tutorial (#32137)
before:
gradle tutorial didn't match with other tutorials format

after:
gradle tutorial fits format of other tutorials

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-07-30 15:26:49 -05:00
Jack Hsu 2993796854 fix(release): provide a link to Manage Release page when "nx release"fails (#32153)
Currently users running `nx release` without a correct setup will see an
unhelpful message:

```
NX   Release group "__default__" matches no projects. Please ensure all release groups match at least one project:

The relevant config is defined here: nx.json
```

This change provides a link to https://nx.dev/features/manage-releases
so users can find the correct information to fix their setup.

This is particular useful when users are curious or checking out `nx
release` for the first time, and may not realize that there are set up
steps.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Error message is not helpful

## Expected Behavior
Provide a link for users to find the info they need

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-30 16:10:04 -04:00
Victor Savkin b8f19539d6 fix(misc): small tweaks in messaging (#32131)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-30 13:53:10 -04:00
Jack Hsu f6474b94f6 chore(repo): update to latest beta (#32144)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-30 12:28:33 -04:00
Colum Ferry 0157b75e79 fix(docker): ensure release fetches data from stdout correctly (#32149)
## Current Behavior
In certain cases, `execSync` was not returning data correctly based on
`stdio` settings.

## Expected Behavior
Use `exec` and handle stdout manually to ensure information is retrieved
and processed correctly

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-30 16:54:29 +01:00
Colum Ferry 2685df2388 fix(node): prune targets should depend on build (#32147)
## Current Behavior
Task ordering for running `prune` was not correct as the
`prune-lockfile` and `copy-workspace-modules` targets need the build to
have succeeded first.

## Expected Behavior
Ensure `prune-lockfile` and `copy-workspace-modules` depends on `build`
2025-07-30 16:50:39 +01:00
Mike Hartington ba30cb2a19 docs(misc): add android blog post for java week (#32146)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-30 11:30:11 -04:00
Juri 5549b25e2d docs(core): new what is Nx video 2025-07-30 16:50:18 +02:00
Leosvel Pérez Espinosa 14e816c7fa feat(angular): update ngrx to v20 (#32140)
## Current Behavior

The `@nx/angular` plugin doesn't support NgRx v20.

## Expected Behavior

The `@nx/angular` plugin should support NgRx v20.
2025-07-30 14:45:09 +02:00
MaxKless 92b0e03a13 feat(core): add nx mcp command (#32022) 2025-07-30 12:33:05 +02:00
Juri fe75a52d25 docs(nx-dev): remove webinar notifier for workshop 2025-07-30 10:05:19 +02:00
Jack Hsu 8ef7d0e312 docs(misc): make sure "npx nx@latest" is used when calling init or coonnect (#32128)
Documentation instructs users to run `npx nx init` and `npx nx connect`,
which may use cached outdated versions of
Nx.

## Expected Behavior

Documentation now uses `npx nx@latest` to ensure users always get the
latest version, preventing issues from outdated
cached versions.

Updated 27 command occurrences across 23 documentation files:
- `npx nx init` → `npx nx@latest init`
- `npx nx connect` → `npx nx@latest connect`
- `npx nx connect-to-nx-cloud` → `npx nx@latest connect-to-nx-cloud`

## Related Issue(s)

Fixes #
2025-07-29 14:13:49 -04:00
Mike Hartington bcc850205a docs(misc): add spring boot blog post (#32123)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-29 10:40:10 -04:00
Colum Ferry d4b1ee8644 feat(node): add prune target to node apps (#32119)
## Current Behavior
The `@nx/node:app` generator does not set up `prune` as a target to
prune the lockfile for TS Solution based repos. Nor does it handle
workspace modules that may be used by the application.

## Expected Behavior
Create the following targets when generating a node application
- `copy-workspace-modules`
- `prune-lockfile`
- `prune`

The latter should act as a noop, depending on the other two targets to
ensure a fully pruned output
2025-07-29 13:45:12 +01:00
Juri c2d0ecfd82 feat(nx-dev): make payfit testimonial clickable on nx cloud page 2025-07-29 00:20:49 +02:00
Mike Hartington f04e36afec docs(misc): add nx gradle blog post (#32106)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-28 12:18:56 -04:00
Nicholas Cunningham 4cd1a4dfd7 fix(nx-dev): reenable YouTube, and Tweet components to markdoc configuration (#32109)
This PR add Tweets and YouTube components back to the markdoc
configuration so that they can be rendered.
2025-07-28 11:04:18 -05:00
Nicholas Cunningham 38c7506d13 fix(misc): critical severity for form-data package (#32108)
### Currently
The `form-data` version we are using contains a critical issue which can
be reproduce by running.
```
pnpm dlx audit-ci --critical --report-type summary
```
https://github.com/advisories/GHSA-fjxv-7rqg-78g4

We should update our `form-data` version that contains the patch to
address the vulnerability.

### Misc
This also addresses our nightly audit failures:
https://github.com/nrwl/nx/actions/runs/16545241633/job/46791870646
2025-07-28 16:00:53 +00:00
Colum Ferry 536279bdf8 fix(docker): format current date to UTC (#32103)
## Current Behavior
Docker Version Utils will interpolate `{currentDate|YY.MM.DD}` with the
local timezone.

## Expected Behavior
Force the formatting to be UTC
2025-07-28 09:20:32 -04:00
Victor Savkin f03f68a536 cleanup(core): clean up onboarding url generation (#32101)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-28 08:18:01 -04:00
Emily Xiong 5578728f01 fix(react-native): add release option to publisable react-native library (#29817) 2025-07-28 14:40:42 +04:00
Leosvel Pérez Espinosa e5ef717a63 feat(core): add bun parser (#31973)
## Current Behavior

Bun's text-based lockfile is not parsed correctly when collecting nodes
and dependencies for the project graph.

## Expected Behavior

Bun's text-based lockfile should be parsed correctly when collecting
nodes and dependencies for the project graph.

## Related Issue(s)

Fixes #31862 
Fixes #31433 
Fixes #31338 
Fixes #30607 
Fixes #30603 
Fixes #30466 
Fixes #30460 
Fixes #30362 
Fixes #30302
2025-07-28 12:38:08 +02:00
Craigory Coppola 06ffc84682 fix(core): remove graph creation from postinstall hook (#32027)
## Current Behavior
The post install hook creates the project graph... which contains quite
a bit of work and appears to be hanging at times.

## Expected Behavior
The post install hook is slimmer, and has a hard timeout of 30s to avoid
hanging.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31694
2025-07-27 17:56:09 -04:00
Colum Ferry 64897b7e33 feat(docker): add docker plugin (#31634)
## Current Behavior
We do not currently have a plugin for docker to infer targets such as
- build
- run

## Expected Behavior
The Docker Plugin should remain agnostic between tech stacks, but should
allow for the containerization of projects.

It should support initially the ability to build and run images by
inferring targets on projects that contain a Dockerfile.

`nx release` should be expanded to support releasing Docker images to
registries
2025-07-25 20:40:15 +01:00
Caleb Ukle cd5e38150f docs(misc): change tutorial CTA copy (#32094) 2025-07-25 13:32:40 -05:00
Victor Savkin 587d643008 fix(core): cloud commands should be handled before loading local (#32090)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-25 13:45:15 -04:00
Jack Hsu 1aa7212651 fix(core): prevent --skipInstall from being passed from create-nx-workspace to new generator (#32086)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When you run `npx -y create-nx-workspace@latest nameofmyrepo-monorepo
--preset=apps --nxCloud=skip --skip-install --skip-prettier --verbose`
it fails because `--skip-install` is passed to the `new` generator (even
though it's not an CNW option), which means no `node_modules` to resolve
`nx/bin/nx`.

## Expected Behavior
Running CNW should not skip install ever.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31834
2025-07-25 12:37:30 -04:00
Leosvel Pérez Espinosa 6488c37403 feat(core): display estimated task durations in the tui terminal pane when available (#31972)
- Add a label to the TUI terminal pane with the live/actual task
execution duration and estimated duration based on available task
history
- Consolidate the `INTERACTIVE`/`NON-INTERACTIVE` information at the
bottom alongside the instructions to toggle
- Handle smaller available width and hide labels accordingly, with a
priority of Task Name, Duration, Tab to Focus help label when deciding
what to show
- Increase the tick rate to calculate live times every 100ms
2025-07-25 12:05:12 -04:00
Leosvel Pérez Espinosa a626ee17f7 fix(linter): handle negative numbers in flat config AST generation (#32085)
## Current Behavior

The ESLint flat config generator crashes with "Debug Failure. False
expression: Negative numbers should be created in combination with
createPrefixUnaryExpression" when running `nx g
@nx/eslint:convert-to-flat-config`.

## Expected Behavior

The generator should handle negative numbers properly and complete
without errors.

## Related Issue(s)

Fixes #31955


Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvelperez@users.noreply.github.com>
2025-07-25 15:28:37 +00:00
Jack Hsu df2463ef99 docs(misc): add tailwind to astro site (#32077)
This PR adds Tailwind support to the Astro docs site so we can reuse
existing UI components.
2025-07-25 11:24:42 -04:00
Colum Ferry 8fe17d43a9 fix(core): pnpm lockfile parser handles undefined dependencies (#32084)
## Current Behavior
The `pnpm-parser` does not handle when `importerSnapshot.dependencies`
is undefined and is trying to access indexes of the object.

## Expected Behavior
Add a check to make usre `importerSnapshot.dependencies` exists before
accessing values within it
2025-07-25 16:23:37 +01:00
Leosvel Pérez Espinosa 6a2e1804da fix(misc): allow scoped package names in application generators (#31957)
Allow application names starting with @ symbol to support scoped
packages like @myorg/myapp.

Updated the validation pattern to match the library generator pattern
that already supports this.

Fixes #31229

Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvelperez@users.noreply.github.com>
2025-07-25 16:22:19 +02:00
Leosvel Pérez Espinosa 1b1de90100 feat(core): log out-of-sync details returned by sync generators when running nx sync:check (#32072)
## Current Behavior

The `@nx/js:typescript-sync` generator does not provide details about
the out-of-sync files. It only returns a generic message.

<img width="1155" height="107" alt="image"
src="https://github.com/user-attachments/assets/6fc170cc-6aab-49cd-b17d-764da57b840a"
/>

## Expected Behavior

The `nx sync:check` command should display additional details about the
out-of-sync files if provided by the sync generators. The
`@nx/js:typescript-sync` generator should provide details about the
out-of-sync files.

<img width="1140" height="214" alt="image"
src="https://github.com/user-attachments/assets/3c74df6c-7dc3-4462-b0c9-75bce5bf81b4"
/>

Note: the `nx sync` command will still only display the generic message
to avoid cluttering the logs and the details can be seen in the changes
made to files.
2025-07-25 12:20:49 +00:00
Leosvel Pérez Espinosa b5b4cd569b fix(core): derive graph node type correctly when projectType is not set (#32018)
## Current Behavior

When building the project graph nodes, the node `type` is always
inferred as `lib` when `projectType` is not set.

## Expected Behavior

When building the project graph nodes, the node `type` should be derived
correctly using the same logic used by generators when `projectType` is
not set.

## Related Issue(s)

Fixes #31983
2025-07-25 14:13:56 +02:00
Victor Savkin a8900e4425 chore(misc): temporarily hide social card (#32080)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-25 08:09:46 -04:00
Juri 95e9eb596c docs(nx-dev): update payfit blog post 2025-07-25 14:01:48 +02:00
Rares Matei 76ab229299 docs(nx-cloud): update release notes (#32054)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Caleb Ukle <caleb.ukle+github@pm.me>
2025-07-25 10:57:29 +01:00
Jason Jean 0359f0d39a fix(core): disable TUI on ai agents (#31480)
## Current Behavior

The TUI (Terminal User Interface) is enabled for all environments,
including AI agents like Claude Code, which can cause issues with
AI-driven development workflows.

## Expected Behavior

When an AI agent is detected through environment variables, the TUI
should be automatically disabled to prevent interference with AI-driven
interactions.

## Related Issue(s)

This change improves the developer experience when using AI agents by
automatically detecting their presence and adjusting the interface
accordingly.

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-24 18:30:33 -04:00
Jason Jean f420522477 fix(core): prevent thread leaks in nx_walker and logger (#32061)
## Current Behavior

The native Rust code in nx_walker and logger components was creating
threads that weren't being properly cleaned up, leading to resource
leaks over time.

## Expected Behavior

With these changes, threads are properly managed and cleaned up to
prevent resource leaks, improving the overall stability and performance
of Nx operations.

## Related Issue(s)

This addresses native thread leak issues discovered during development.

Fixes thread leaks in native components
2025-07-24 21:43:15 +00:00
Jason Jean 1ddd4d40c5 fix(core): improve arrow key detection for interactive programs (#32075)
## Current Behavior

The TUI's arrow key handling uses only alternate screen mode detection
to determine whether to send arrow key sequences to programs or handle
scrolling locally. This works for programs like vim, less, and git log,
but fails for enquirer-style prompts that use cursor positioning without
alternate screen mode.

## Expected Behavior

Arrow key handling should properly detect when interactive programs like
enquirer are running and send arrow key sequences to them for
navigation, while maintaining TUI scrolling for regular command output.

## Related Issue(s)

This improves the TUI's interaction with enquirer prompts and similar
interactive programs that don't use alternate screen mode but still need
to receive arrow key input.

## Changes Made

- **Enhanced Detection Logic**: Added `handles_arrow_keys()` method that
detects interactive programs using:
  - Alternate screen mode detection (vim, less, git log, htop)
  - Cursor movement sequence detection (enquirer-style programs)
- **Refactored Arrow Key Handling**: Updated `handle_arrow_keys()` to
use improved detection
- **Consistent Mouse Event Handling**: Updated `send_mouse_event()` to
use same detection logic
- **Comprehensive Tests**: Added tests for interactive program detection
patterns

## Technical Details

The new `handles_arrow_keys()` method checks for:
1. **Alternate screen mode** - Strong indicator for programs like vim,
less
2. **Cursor control sequences** - Detects enquirer-style programs that
use:
   - `\x1b[?25l` / `\x1b[?25h` (hide/show cursor)
   - `\x1b[H` (cursor positioning)
   - `\x1b[A/B/C/D` (cursor movement)

This ensures enquirer prompts receive proper arrow key navigation while
maintaining backward compatibility with existing TUI scrolling behavior.

Fixes arrow key navigation in enquirer prompts and similar interactive
programs.

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-24 19:45:57 +00:00
Juri e25ec83d57 docs(nx-dev): customer success story about payfit 2025-07-24 21:26:21 +02:00
Leosvel Pérez Espinosa 643b818309 fix(core): make tasks list columns in the tui more compact (#32074)
## Current Behavior

The Tasks List pane in the TUI is not too compact. It has some wide
spaces and long texts that do not allow for a better use of the
available space.

<img width="1079" height="450" alt="image"
src="https://github.com/user-attachments/assets/f814df3c-0623-413b-9473-48e16f752e0f"
/>

<img width="1368" height="455" alt="image"
src="https://github.com/user-attachments/assets/2436da03-3812-4cfc-8152-756eb99607d2"
/>

## Expected Behavior

The Tasks List pane in the TUI should be more compact:

- `Kept Existing` value in the Cache column should be renamed to `Match`
- The Duration column should not reserve as much space as it does
currently

<img width="1077" height="455" alt="image"
src="https://github.com/user-attachments/assets/bfe6ee33-09c3-4cd7-bd36-15c4b673c9e9"
/>
2025-07-24 14:37:27 -04:00
Jason Jean 9990b1e14c fix(js): resolve relative imports correctly in nested projects (#31978)
## Current Behavior

When resolving "./" imports from a nested project, the target project
locator incorrectly resolves to the parent project instead of the
current project.

For example, given:
- `parent-project` at `libs/parent-path`
- `child-project` at `libs/parent-path/child-path` (nested 1 level under
parent)

When importing "./" from `libs/parent-path/child-path/module.ts`, it
incorrectly resolves to `parent-project` instead of `child-project`.

## Expected Behavior

"./" imports from within a nested project should resolve to that
project, not its parent.

## Related Issue(s)

Fixes #31980
2025-07-24 14:14:07 -04:00
Nicholas Cunningham adbfaf8b74 feat(core): add tsBuildInfoFile option all packages tsconfig.lib.json (#32030)
### Changes
- add `tsBuildInfoFile` option all packages `tsconfig.lib.json`
- fix `legacy-post-build` executor via `copy-asset-handler` to ignore
dirs that we won't be copying from to improve glob search efficiency.
2025-07-24 13:22:16 -04:00
Jack Hsu 82690be4c1 docs(misc): add base astro setup for docs (#32058)
Add the base docs website built with Astro.

---------

Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-07-24 12:55:37 -04:00
Leosvel Pérez Espinosa d0cbfec240 fix(core): improve tui minimal view display and prevent flashing scrollbar (#32045)
## Current Behavior

- When the minimal view in the TUI is shown, some borders are initially
shown for a fraction of a second.
- When rendering terminal panes, the scrollbar can be wrongly shown for
a fraction of a second when the PTY dimensions are stale. This looks
like the scrollbar flashes.

## Expected Behavior

- When the minimal view in the TUI is shown, no borders should ever be
shown.
- The scrollbar should only be shown when rendering terminal panes when
needed.
2025-07-24 17:14:30 +02:00
Juri 0e8d449971 docs(misc): update nx-mcp install instructions 2025-07-24 16:58:10 +02:00
Jason Jean f24f1d62ad chore(repo): isolate angular tests which seem to take more memory (#32028)
## Current Behavior

Angular tests run with other tests in parallel causing memory issues.

## Expected Behavior  

Angular tests are isolated to run on their own agent to prevent memory
issues.

## Related Issue(s)

This is a maintenance improvement to prevent CI memory issues.

Fixes nrwl/nx internal issue
2025-07-24 09:51:01 -04:00
Jack Hsu b7c1c0ed27 docs(misc): remove unused tutorialkit code (#32053)
This PR removes the tutorialkit code since it was never made public, and
we had issues with it. We'll reassess the tutorials at a later date.

Removing the code solves some of the "critical" alerts from the repo.
e.g. https://github.com/nrwl/nx/security/dependabot/863

---

Also, some of the unused components from our landing pages are removed.
They have references to `/tutorials/gradle` that we had planned but
never did, and they were just copy and pasted by AI.

- Delete nx-dev/ui-gradle/src/resource.tsx
(https://nx-dev-git-docs-remove-tutorialkit-nrwl.vercel.app/java)
- Delete nx-dev/ui-react/src/resource.tsx
(https://nx-dev-git-docs-remove-tutorialkit-nrwl.vercel.app/react)
- Delete nx-dev/ui-react/src/webinar.tsx
(https://nx-dev-git-docs-remove-tutorialkit-nrwl.vercel.app/react)
2025-07-23 14:38:10 -04:00
Mike Hartington 121bbab070 docs(misc): add nx workshop promo blog post (#32055)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-23 13:57:10 -04:00
Nicholas Cunningham 400e3003d7 fix(core): improve build time by narrowing the path scope for upload (#32023)
This pull request updates the `.github/workflows/publish.yml` file to
refine the workflow configuration by narrowing the file paths for
artifacts. These changes aim to simplify and improve the workflow and
ensure more precise artifact handling.

Before ts references:
https://github.com/nrwl/nx/actions/runs/16207520134 - 27m 20s
Currently (ts references):
https://github.com/nrwl/nx/actions/runs/16379805806 - 39m 7s
PR changes: https://github.com/nrwl/nx/actions/runs/16449233981 19m 12s
2025-07-23 13:40:49 -04:00
Leosvel Pérez Espinosa f73a66984e fix(angular): update migration target version for jest-preset-angular v15 package update (#32051)
Update the migration target version for `jest-preset-angular` v15
package update.
2025-07-23 13:13:41 -04:00
Jason Jean 713f86a64d chore(repo): remove stylus res (#32052)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Security package is removed. This resolution fails.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Remove the resolution.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-23 12:27:07 -04:00
Leosvel Pérez Espinosa 3419b329a3 fix(angular): update jest-preset-angular to v15 (#32050)
## Current Behavior

Angular projects use `jest-preset-angular` v14, which doesn't support
Jest v30.

Note: When support for Jest v30 was added, `jest-preset-angular` didn't
have a version explicitly supporting it.

## Expected Behavior

Angular projects should use `jest-preset-angular` v15, which supports
Jest v30.

## Related Issue(s)

Fixes #32024
2025-07-23 10:03:58 -06:00
Nicholas Cunningham 758e793e5f feat(bundling)!: remove stylus support (#32035)
BREAKING CHANGE: Stylus (.styl) files are no longer supported.

Stylus has been deprecated and was slated to be removed in Nx 20. 
Now we are removing it.

- Remove `stylus` and `stylus-loader` dependencies
- Remove `deprecated-stylus-loader` file
- Remove `stylus` configuration from `webpack` and `rspack` plugins
- Remove `'styl'` option from `rspack` generator schemas and TypeScript
definitions
- Remove `.styl`/`.stylus` extensions from executor schema file
completion globs

MISC
Even though we removed stylus from our repo as a dependency other
projects in the workspace still have stylus as an optional dependency:
  - Vite
  - Astro
  
So we add a placeholder for it since on npm registry there is a
_security_ placeholder.

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-07-23 10:56:35 -04:00
Colum Ferry f20ff566d7 fix(core): handle undefined packageJson.dependencies (#31998)
## Current Behavior
`npm-parser` for lockfile pruning is trying to run `Object.entries` on a
potentially null or undefined object (packageJson.dependencies).

## Expected Behavior
Ensure `?? {}` is used when evaluating `Object.entries`
2025-07-23 08:24:04 -04:00
Nicholas Cunningham 87b04d4617 fix(bundling): fix stylus installation error due to npm security (#32036)
### Changes

The stylus npm registry has been compromised.
So can resolve `stylus` with `npm:ignore@*` it tells the package manager
to replace the dependency with the ignore package from npm registry.

Until we can merge: https://github.com/nrwl/nx/pull/32035
2025-07-23 10:58:06 +00:00
MaxKless b879e7e0d2 chore(misc): change cursor mcp.json to use streamable http instead of sse (#31994) 2025-07-23 12:46:52 +02:00
Leosvel Pérez Espinosa dd57e0faf0 fix(core): render the correct output in the tui terminal pane when pinning task (#31975)
## Current Behavior

In the TUI, opening the Terminal Pane for a task with the space bar,
navigating to another task, and pressing "1" to pin it, results in the
terminal pane displaying the output of the task for which the space bar
was pressed initially instead of the pinned task.

## Expected Behavior

Pinning tasks in the TUI should work correctly and always display the
output of the pinned task.
2025-07-23 09:37:39 +02:00
Victor Savkin 51b702e67f cleanup(misc): point to the guide with next steps (#32026)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-22 17:52:33 -04:00
Caleb Ukle eb2392a515 docs(core): add "next steps" for nx init docs (#32025)
improve doc page where people land after running `nx init` 
- clarify how to use nx after setup
- make sure to update CI configs
- how to finish nx cloud setup if opted-in for cloud
2025-07-22 18:11:13 +00:00
Emily Xiong 862bc4bbb0 chore(gradle): document build-ci target (#31660)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
add documentation for build-ci target for gradle

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
currently there is no build-ci target documented

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-22 13:00:09 -04:00
Caleb Ukle 0348faa7c5 docs(core): update intro language for tutorials (#32005)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
tutorial intro language is subpar
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
improve tutorial intro language

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-22 09:37:47 -05:00
Leosvel Pérez Espinosa 0bbb473f4f fix(testing): add missing package updates for ts-jest and jest-util for jest v30 migrations (#32017)
## Current Behavior

The migration for Jest v30 is missing package updates for `ts-jest` and
`jest-util`.

## Expected Behavior

The migration for Jest v30 should have package updates for `ts-jest` and
`jest-util`.
2025-07-22 13:13:12 +02:00
Leosvel Pérez Espinosa a64af8b59b fix(testing): normalize spec files correctly in jest replace-removed-matcher-aliases migration (#31995)
## Current Behavior

When running the Jest `replace-removed-matcher-aliases` migration on
Windows, it resolves the spec files incorrectly and fails.

## Expected Behavior

Running the Jest `replace-removed-matcher-aliases` migration should work
correctly regardless the OS.

## Related Issue(s)

Fixes #31991
2025-07-22 13:12:53 +02:00
Leosvel Pérez Espinosa aad2e81eaa fix(nextjs): infer relevant tasks with the typescript sync generator when using ts project references (#31996)
## Current Behavior

When using the TS solution setup, tasks inferred by the
`@nx/next/plugin` do not have the `@nx/js:typescript-sync` generator
set.

## Expected Behavior

When using the TS solution setup, tasks inferred by the
`@nx/next/plugin` should have the `@nx/js:typescript-sync` generator
set.

## Related Issue(s)

Fixes #31983
2025-07-22 09:10:21 +02:00
Jack Hsu 5163bcddfd docs(misc): remove CI tutorials and redirect to their setup guides (#32004)
This PR removes the two CI tutorials (GitHub Actions and CircleCI) and
redirect them to the setup guides:
- https://nx.dev/ci/recipes/set-up/monorepo-ci-github-actions
- https://nx.dev/ci/recipes/set-up/monorepo-ci-circle-ci

There's not much value in having separate CI tutorials now that CI is a
central part of the main tutorials, rather than an optional step. e.g.
https://nx.dev/getting-started/tutorials/typescript-packages-tutorial

The guides are sufficient for users that want to learn how to set up
their CI with Nx Cloud.
2025-07-21 21:10:15 +00:00
Mike Hartington 105ce6af06 docs(nx-dev): add 21.3 changelog (#32000)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-21 13:18:30 -04:00
Leosvel Pérez Espinosa 59496ed446 fix(linter): update lint executor to correctly handle --fix and --quiet (#31970)
## Current Behavior

When running ESLint using the `@nx/eslint:lint` executor with `--quiet`
and `--fix`, and there are errors, no fix is made, and the task
incorrectly succeeds.

This is a regression introduced by
https://github.com/nrwl/nx/commit/9406d2bfdb15e33ad85345533f96f6136130e817,
which updated the executor to not fix warnings when `--quiet` is used,
but the solution was incorrect.

## Expected Behavior

When running ESLint using the `@nx/eslint:lint` executor with `--quiet`
and `--fix`, and there are errors, fixes should be applied, and the task
should succeed if there are no remaining errors. It should not fix
warnings.

## Related Issue(s)

Fixes #31868
2025-07-21 19:03:03 +02:00
Victor Savkin 84a6f9da35 fix(misc): fix setup selection (#31997)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-07-21 15:44:10 +00:00
James Henry 27330b53bd docs(core): update self-healing-ci.md (#31993) 2025-07-21 15:37:00 +02:00
Jason Jean 4720175b1e chore(repo): update nx to 21.4.0-beta.0 (#31985)
Updating Nx from 21.3.0-rc.0 to 21.4.0-beta.0
2025-07-20 10:07:34 -04:00
Victor Savkin 82ba3b71fa cleanup(misc): small tweaks to cnw and init (#31986)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-20 10:02:26 -04:00
Jason Jean 21c528e706 fix(jest): revert back to Jest 30 after synckit compatibility fix (#31984)
## Current Behavior

Jest is currently pinned to version 29 due to compatibility issues with
synckit@0.11.10 that caused TypeErrors in Jest tests.

## Expected Behavior

With the synckit compatibility issue resolved in v0.11.11, Jest can be
safely upgraded back to version 30, providing users with the latest Jest
features and improvements.

## Related Issue(s)

The underlying synckit compatibility issue has been fixed:
https://github.com/un-ts/synckit/issues/252

This reverts the temporary downgrade that was applied in #31981.

Fixes the Jest version regression by restoring Jest 30 support.
2025-07-19 11:57:26 -04:00
Nicholas Cunningham 34c5b614f4 fix(core): adjust artifacts path for publish (#31979)
Update native `.wasm` paths to be `./artifacts`
2025-07-18 19:08:44 -06:00
Nicholas Cunningham 91acf8c792 fix(jest): revert version back to 29 (#31981)
### Changes

Newly create projects fail when using jest v30 so lets revert this for
now
2025-07-18 19:39:17 -04:00
Nicholas Cunningham 0ca4aacd0b feat(repo): use ts solution in the nx repo (#31654)
This PR updates the Nx repo to use ts solution to improve build
processes and module resolution via the `@nx/js/typescript` plugin.

- Added `@nx/js/typescript` (adding new targets `typecheck` and
`build-base`)
- Updated all e2e test projects for consistent module resolution. (Now
contains `package.json` for all dependencies)
- Fixed module resolution conflicts by streamlining `NODE_PATH` handling
in e2e tests.
- Added `legacy-post-build` executor merging `copy-asset` and
`package.json` cleanup.
- Added `package.json` to e2e projects for proper dependency management.

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
Co-authored-by: Emily Xiong <xiongemi@gmail.com>
Co-authored-by: yarden-island <yarden@island.io>
Co-authored-by: Julien Marcou <julien.marcou@convelio.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Colum Ferry <cferry09@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-18 14:49:03 -04:00
Jason Jean ccbc750b7b chore(repo): update nx to 21.3.0-rc.0 (#31968)
Updating Nx from 21.3.0-beta.7 to 21.3.0-rc.0

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-07-18 15:22:25 +00:00
Jason Jean 98383131a0 fix(core): allow nx-cloud commands to run without local Nx installation (#31974)
## Current Behavior

When running nx-cloud commands like `nx start-ci-run` in environments
without local Nx installation, users get this error:

```
NX   Could not find Nx modules at "/path/to/workspace".
Have you run npm/yarn install?
```

This prevents legitimate use of nx-cloud commands in CI environments
that don't have local Nx modules installed.

## Expected Behavior

nx-cloud commands should be able to run using the global Nx installation
without requiring local Nx modules, since they're designed to work
independently of the local workspace setup.

## Related Issue(s)

This fixes scenarios where users run `nx start-ci-run` in CI
environments without local Nx installation.

## Changes Made

- Added `isNxCloudCommand()` function to identify nx-cloud commands:
`start-ci-run`, `login`, `logout`, `connect`, `view-logs`, `fix-ci`,
`record`
- Modified the missing local installation check to exclude nx-cloud
commands
- Added execution path for nx-cloud commands when no local Nx is
available - they now run via the global nx-commands module
- Preserves the error check for regular Nx commands that require local
installation

## Testing

- Verified that nx-cloud commands are properly identified
- Confirmed that regular Nx commands still show the error when local Nx
is missing
- Ensured nx-cloud commands can run without local Nx installation
2025-07-18 10:30:10 -04:00
Iulian Marcu 2f2764d695 feat(release): releaseTagPatternStrictPreid option to match git tag based on semver preid (#31756) 2025-07-18 16:30:18 +04:00
Jason Jean 30ca911ab0 feat(core): add GitHub repository creation and push functionality (#31936)
## Current Behavior

The `create-nx-workspace` command only creates local git repositories
and does not provide any integration with GitHub for pushing the newly
created workspace to a remote repository.

## Expected Behavior

The `create-nx-workspace` command should offer users the option to
automatically create a GitHub repository and push their new workspace to
it using the GitHub CLI (`gh`), streamlining the workflow from workspace
creation to remote repository setup.

## Changes Made

- **New Options**: Added `skipGitHubPush` and `verbose` command-line
options
- **GitHub Integration**: Integrated GitHub repository creation and push
workflow into the main create-workspace process
- **Interactive Prompts**: Added user-friendly prompts for GitHub
repository creation with validation
- **Async Refactor**: Converted git utilities from sync to async/await
pattern for better error handling
- **Bug Fix**: Fixed `gh repo create` command to include `--source` flag
for proper directory specification
- **Error Handling**: Added comprehensive error handling with optional
verbose logging

## Implementation Details

### New CLI Options
- `--skipGitHubPush`: Skip pushing to GitHub via gh CLI (default: false)
- `--verbose` (`-v`): Enable verbose logging for detailed error messages

### Workflow Integration
- After successful git initialization and commit, prompts user if they
want to push to GitHub
- Uses `gh` CLI to authenticate and create repository
- Provides default repository name format (`username/workspace-name`)
- Validates repository name format
- Handles errors gracefully with helpful fallback instructions

### Technical Changes
- Refactored `git.ts` utilities to use `execAndWait` and `spawnAndWait`
for better async handling
- Added `pushToGitHub` function with comprehensive error handling
- Updated `CreateWorkspaceOptions` interface with new optional
properties
- Enhanced command-line argument parsing in `yargs-options.ts`

## Testing

The changes maintain backward compatibility - existing workflows
continue to work unchanged. The new GitHub integration is opt-in and
gracefully handles cases where:
- GitHub CLI is not installed
- User is not authenticated with GitHub
- Network issues prevent repository creation
- User chooses not to push to GitHub

## Related Issue(s)

This PR enhances the user experience by providing seamless integration
between workspace creation and GitHub repository setup.
2025-07-17 23:41:36 -04:00
Colum Ferry 9f1c811f50 fix(module-federation): ensure react deps are eagerly loaded #31612 (#31961)
## Current Behavior
The static build for a React Module Federation application can suffer
from issues where react is not initialised on load.
This is caused by Module Federation trying to lazily instantiate the
library.

## Expected Behavior
Ensure that React deps are marked as eager in the module federation
config to allow them to be instantiated on load

## Related Issue(s)

Fixes #31612

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Colum Ferry <Coly010@users.noreply.github.com>
2025-07-17 17:23:46 +00:00
Colum Ferry b9066a91d3 fix(core): lockfile pruning uess project name to identify workspace nodes (#31959)
## Current Behavior
The workspace packages logic for pruning lockfile assumes the
jsPackageName is the same as the node name.
This is not always the case.

## Expected Behavior
Ensure the actual node name is used to reference the node in the project
graph
2025-07-17 12:42:42 -04:00
Craigory Coppola 394b5b5461 feat(core): add env var for cache size (#31609)
## Summary
- support configuring max cache size via NX_MAX_CACHE_SIZE env var
- show max cache size from env var in `nx report`
- document the new `NX_MAX_CACHE_SIZE` option
- test NX_MAX_CACHE_SIZE in e2e cache tests

## Testing
- `pnpm nx run-many -t lint,test,build` *(failed: NX Lexer error)*
- `pnpm test:e2e` *(failed: Command "test:e2e" not found)*
- `pnpm e2e` *(failed: Failed to process project graph)*

------
https://chatgpt.com/codex/tasks/task_e_68503bff022c832c8c014c61432aa2ed

Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-07-17 12:18:50 -04:00
Craigory Coppola f94f608ca8 fix(core): shutdown running tasks properly when recieving sigterm (#31534)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
When running Nx tasks without the daemon, tui, and using run-commands w/
serially running tasks, its possible that Nx will not properly terminate
on receiving SIGTERM.

## Expected Behavior
Nx properly shuts down child tasks on receiving SIGTERM

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-17 12:18:05 -04:00
Craigory Coppola d207a5cedc fix(core): improve parent gitignore handling for nested Nx workspaces (#31911)
## Current Behavior

When an Nx workspace exists inside a subdirectory of another git
repository or when parent directories contain `.gitignore` files, those
ignore patterns can affect file traversal within the Nx workspace,
making project resolution non-deterministic.

For example, if a workspace is inside a directory with `*` in its
`.gitignore`, Nx fails to properly traverse workspace files.

## Expected Behavior

Nx should respect `.gitignore` files in a smart way:
- **Workspace is git root**: Ignores all parent gitignore files 
- **Workspace nested in git repo**: Respects gitignore files within the
git repository but ignores any gitignore files above the git root
- **No git repo found**: Respects all parent gitignore files (backwards
compatibility)

This ensures deterministic project resolution regardless of where the
workspace is located.

## Related Issue(s)

Fixes #27368, #28000, #27295, #28123, #29413

Supersedes #29245 (incorporates feedback from @Cammisuli and @adamalton)

## Implementation Details

The fix implements smart gitignore boundary detection that:

1. **Finds the nearest git repository root** by walking up the directory
tree
2. **Uses built-in git ignore handling** for maximum compatibility  
3. **Disables automatic parent discovery** and manually adds only
relevant `.gitignore` files
4. **Stops at git repository boundaries** to prevent external gitignore
files from affecting the workspace

This approach addresses the feedback from the original PR #29245 to
handle both:
- Standalone workspaces (where workspace root = git root)
- Workspaces nested within larger git repositories

The solution leverages the `ignore` crate's existing functionality while
providing precise control over which ignore files are considered.

## Test Plan

- [x] Unit tests covering all three scenarios
- [x] Workspace is git root: ignores parent gitignores
- [x] Workspace nested in git repo: respects repo gitignores, ignores
external ones
- [x] No git repo: uses all parent gitignores (backwards compatibility)
- [x] All existing walker tests continue to pass

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Adam Biggs <adam.biggs@lmpm.com>
2025-07-17 12:13:55 -04:00
Craigory Coppola 07a6feafd6 feat(core): add --initialRun flag to nx watch command (#31910)
## Current Behavior

The `nx watch` command currently requires a file change before executing
the specified command for the first time.

## Expected Behavior

Add support for running the watch command once before watching for
changes. This is useful when you want to see results immediately without
having to make a file change first.

## Related Issue(s)

N/A - Feature addition

## Implementation Details

- Added a new `--initialRun` flag (alias `-i`) to the `nx watch` command
- When the flag is set to `true`, the command executes once before
setting up the file watcher
- Works with both `--all` mode and specific project selections
- Default value is `false` to maintain backward compatibility
- Documentation has been updated to reflect this new option

## Usage Examples

```bash
# Run the command initially, then watch for changes
nx watch --all --initialRun -- echo "Running command"

# Or with the alias
nx watch --projects=myapp -i -- npm run test
```

## Test Plan

- [ ] Manual testing with `--all` flag
- [ ] Manual testing with specific projects
- [ ] Verify command runs initially when flag is set
- [ ] Verify command does not run initially when flag is not set
(default behavior)
- [ ] Documentation generated correctly

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-17 12:04:52 -04:00
Nicholas Cunningham a42d7a398d fix(testing): update yarn integration tests for remix and enable previously skipped tests (#31933)
These tests were skipped previously, we should re-enable them so that we
have coverage.
2025-07-17 11:55:25 -04:00
Philip Fulcher a044e062e1 docs(nx-dev): add Conformance article (#31939)
https://nx-dev-git-philip-conformance-article-nrwl.vercel.app/blog/nx-cloud-conformance-automate-consistency

---------

Co-authored-by: Juri Strumpflohner <juri.strumpflohner@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-17 08:49:34 -06:00
Craigory Coppola b1e647d9eb chore(core): add more logging by default on daemon server (#31948)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The daemon doesn't log several things which would be helpful when
troubleshooting issues

## Expected Behavior
There are several more logs

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-17 09:55:30 -04:00
Colum Ferry 1aa2f10697 fix(webpack): ensure less and less-loader deps are ranges (#31958)
## Current Behavior
The `@nx/webpack` and `@nx/rspack` packages depend on a pinned version
of `less` and `less-loader`.
This causes an issue with dependency resolution for packages that
require a different version of these packages.

## Expected Behavior
Use a range for `less` and `less-loader` to aid package managers in
resolution and hoisting.

## Related Issue(s)

Fixes #31953
2025-07-17 13:04:35 +01:00
Colum Ferry 0d8c32b7fe fix(webpack): use loadPaths instead of includePaths (#31946)
## Current Behavior
Nx switched to use sass-loader with `modern-compiler` api. However, it
did not update to use `loadPaths` instead of `includePaths`.

## Expected Behavior
Use `loadPaths`.

## Related Issue(s)

Fixes #30340
2025-07-17 10:46:57 +01:00
Craigory Coppola 8b4b3e94b6 fix(core): preserve scroll position when tasks complete and scroll faster (#31898)
## Current Behavior
<!-- This is the behavior we have today -->
Scroll position gets reset when unrelated tasks finish. Additionally,
scrolling is just really slow.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
This pull request introduces momentum-based scrolling and improves
scroll position preservation across terminal panes and pseudo-terminal
instances (`PtyInstance`). It also adds a new `ScrollMomentum` module to
manage scrolling behavior dynamically based on user input patterns. The
changes enhance user experience by making scrolling smoother and more
intuitive, especially during rapid or sustained scrolling.

### Scroll Momentum Enhancements:
* Added the `ScrollMomentum` module to calculate dynamic scrolling
behavior based on time intervals and direction changes, allowing for
accelerated scrolling during sustained input.
(`packages/nx/src/native/tui/scroll_momentum.rs`,
[packages/nx/src/native/tui/scroll_momentum.rsR1-R101](diffhunk://#diff-60e4cfcd0a48b7d32e565a9254f89f142587e07a37536ca103b1ae76a760135eR1-R101))
* Integrated momentum-based scrolling into `TerminalPaneData` and
`PtyInstance`, replacing static scroll methods with dynamic ones
(`scroll_up` and `scroll_down`) that use calculated momentum values.
(`packages/nx/src/native/tui/components/terminal_pane.rs`,
[[1]](diffhunk://#diff-494d587e52e864f34496326a7453461a9a15e5c136d504a54db36a59cae7c446L45-R66);
`packages/nx/src/native/tui/pty.rs`,
[[2]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14L122-R158)
[[3]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14L148-R192)
[[4]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14L175-R231)

### Scroll Position Preservation:
* Enhanced `PtyInstance` to preserve scroll position during terminal
resize operations, ensuring better continuity when dimensions change.
(`packages/nx/src/native/tui/pty.rs`,
[[1]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14L76-R91)
[[2]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14L91-R120)

### Code Improvements:
* Added momentum reset logic when switching interactive modes or
changing scroll direction to avoid abrupt changes in scrolling behavior.
(`packages/nx/src/native/tui/components/terminal_pane.rs`,
[[1]](diffhunk://#diff-494d587e52e864f34496326a7453461a9a15e5c136d504a54db36a59cae7c446R150-R169);
`packages/nx/src/native/tui/scroll_momentum.rs`,
[[2]](diffhunk://#diff-60e4cfcd0a48b7d32e565a9254f89f142587e07a37536ca103b1ae76a760135eR1-R101)
* Updated `TerminalPaneData` and `PtyInstance` constructors to
initialize `ScrollMomentum` instances for consistent scrolling state
management. (`packages/nx/src/native/tui/components/terminal_pane.rs`,
[[1]](diffhunk://#diff-494d587e52e864f34496326a7453461a9a15e5c136d504a54db36a59cae7c446R38);
`packages/nx/src/native/tui/pty.rs`,
[[2]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14R53)
[[3]](diffhunk://#diff-1e180729578f1157895b8cd0df25b87ba902ac7804e3a944601d28d3cf437b14R67)

These changes collectively improve the usability of terminal panes and
pseudo-terminal instances by making scrolling more responsive and
preserving user context during resize events.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-16 22:22:28 +00:00
Nicholas Cunningham 06c01571f2 fix(react): Ensure react-router e2e test are generated with the correct config (#31945)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
When we generate a router-router app the e2e test generated expects the
server to be ran on port `4300`.
Which fails because react-router serves from only one port and it's the
dev port which is defaults to `4200`.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
This should work out of the box

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-16 17:46:15 -04:00
Philip Fulcher 088cdb3449 docs(nx-dev): update webinar notifier to workshop (#31947) 2025-07-16 19:42:05 +00:00
Leosvel Pérez Espinosa 71b958c053 fix(react): normalize paths correctly when generating stories (#31944)
## Current Behavior

When generating stories, the generation can fail due to a bad path
normalization with:

```bash
 NX   Failed to read src/src/app/app.tsx

Pass --verbose to see the stacktrace.
```

## Expected Behavior

Generating stories should work correctly.
2025-07-16 14:54:36 +00:00
Juri 074b398490 docs(core): align typescript query param for cloud onboarding in tutorials 2025-07-16 13:36:01 +02:00
Jack Hsu 46d21c77ff docs(core): update tutorial intros to match the new onboarding (#31895)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-07-15 20:10:27 -04:00
Victor Savkin db2b52289d cleanup(nx-dev): minor home page cleanup (#31931)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-07-15 17:03:48 -04:00
Jason Jean 89c784b059 fix(core): remove accidental additional line (#31930)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This line was added by accident.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This line is removed.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-15 18:54:22 +00:00
Jason Jean f9295bd057 fix(core): remove affected comment and improve CI setup messages (#31913)
## Current Behavior

Currently, the CI workflow templates and setup messages contain
potentially confusing or outdated information:

1. CI workflow templates include a comment about "Nx Affected runs only
tasks affected by the changes in this PR/commit. Learn more:
https://nx.dev/ci/features/affected." which may be redundant or
confusing
2. The setup messages for CI and remote cache simply say "Finish it by
visiting: {url}" which doesn't provide clear next steps

## Expected Behavior

With these changes:

1. The redundant affected comment is removed from CI workflow templates
to reduce noise
2. The setup messages are improved to say "Push your repository and
finish the setup: {url}" which provides clearer guidance on what the
user needs to do next
3. Jest snapshot test references are updated to use the current Jest
documentation URL

## Related Issue(s)

This is a minor cleanup improvement to reduce confusion and provide
better user guidance in the CI setup flow.
2025-07-15 14:20:13 -04:00
Leosvel Pérez Espinosa 5217e53513 fix(misc): improve the generation of storybook stories (#31893)
Improve the generation of Storybook stories:

- Import relevant types from the appropriate packages
- Use TypeScript `satisfies` operator
- Simplify the selector in the generated interaction test example
- Fix an issue when source root is not set in the project configuration
2025-07-15 10:37:09 -06:00
Nicholas Cunningham d4a2072e76 fix(testing): when we generate a random port we should start from 1024 (#31927)
When we generate a random port in our node e2e tests we should ensure
that the random generation port generation range starts from 1024.

Also, move the `getRandomPort` function to `e2e-utils` so that other
tests benefit from this change.
2025-07-15 11:46:58 -04:00
Craigory Coppola 4d7b17687c fix(misc): nx should error if atomization brings in invalid file paths (#31675)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
In some rare occurences we've observed our atomization plugins returning
an invalid list of test files. We've only seen this in the jest plugin
in our internal monorepo under a very specific yet hard to repro area.

## Expected Behavior
If this occurs, the plugin errors.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-07-15 11:44:20 -04:00
Colum Ferry 434cf4556c feat(core): allow {args} to be fully interpolated in run-commands (#31824)
## Current Behavior
Currently, there is no way for a target using `run-commands` to define
where in the command args are attached.
This is problematic in some tooling cases where args positional location
matters

## Expected Behavior
Placing `{args}` into the command should allow for interpolation of any
and all args provided.
Therefore commands can be written such as `docker run {args} imageRef`
2025-07-15 11:11:21 -04:00
Emily Xiong 1f56eadb65 fix(react-native): app creation should sync deps (#31839)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
currently, when options.install=true (need to do pod install), it only
syncs deps.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
make it sync deps regardless of options.install, so when developers
choose to run `pod-install` after, it will work right away.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-15 10:48:42 -04:00
Emily Xiong 51bf772048 fix(react-native): fix react native web configuration (#29608)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
when serve up the react-native app using web configuration, it defaults
tsconfig to
```
tsConfig: joinPathFragments(options.projectRoot, 'tsconfig.app.json'),
```
which is not right

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
not hard code ts config path, add a function determineTsConfig for that

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-15 10:48:22 -04:00
Leosvel Pérez Espinosa 2527519fdd feat(core): add live durations for running tasks in the tui (#31897)
## Current Behavior

The TUI doesn't display live durations for running tasks.

<img width="506" height="384" alt="image"
src="https://github.com/user-attachments/assets/0c9d2ad6-810c-4785-9e0e-a9e56c86ba7f"
/>

## Expected Behavior

The TUI should display live durations for running tasks.

<img width="499" height="378" alt="image"
src="https://github.com/user-attachments/assets/2a675c42-3268-4faf-83d7-f747ad52ce35"
/>

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
2025-07-15 09:57:43 -04:00
Julien Marcou 83d2d3b9bf feat(module-federation): bump @module-federation/node & @module-federation/enhanced to fix esbuild vulnerability (#31924)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior

NX has a dependency to a [vulnerable version of
esbuild](https://github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99)

## Expected Behavior

Updating several `@module-federation` dependencies to update esbuild to
v0.25.5 and fix the vulnerability

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31923
2025-07-15 14:04:25 +01:00
Leosvel Pérez Espinosa 8d6fa3fe4c fix(core): ensure non-pty tasks have output in terminal pane when finish (#31925)
## Current Behavior

When a task with no PTY (e.g. a task using the `nx:noop` executor) has
its output pane open and it finishes successfully, no output is shown,
and there's a blank space to the right of the task list where the output
pane is meant to be.

<img width="1366" height="413" alt="image"
src="https://github.com/user-attachments/assets/fc34cc18-1bed-4d73-9b94-5a25069e8a3d"
/>

## Expected Behavior

When a task with no PTY (e.g. a task using the `nx:noop` executor) has
its output pane open and it finishes successfully, the output pane
should be correctly rendered in a successful status.

<img width="1365" height="411" alt="image"
src="https://github.com/user-attachments/assets/cb8862d5-f1c2-4aa6-a098-f710020e64f4"
/>
2025-07-15 11:46:57 +00:00
yarden-island ce2dbd244f feat(rspack): add support for proxyConfig in the dev-server executor (#31909)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

This PR adds support for the `proxyConfig` option in the
@rspack/dev-server executor, similarly to the existing option in the
matching Webpack executor. This new options is another step for allowing
simpler migration to Rspack when coming from Webpack, adding to the
feature parity of the Rspack executor.

## Current Behavior

The `@nx/rspack:dev-server` executor does not allow for passing a
`proxyConfig` as an option, opposed to the matching Webpack executor,
that does.

## Expected Behavior

The `@nx/rspack:dev-server` executor allows for passing a `proxyConfig`
option, same as the `@nx/webpack:dev-server` executor.

## Related Issue(s)

None.
2025-07-15 12:21:21 +01:00
Nicholas Cunningham cf994dfbe4 chore(core): update nx dependencies to 21.3.0-beta.7 (#31919)
### Changes
Update nx dependencies to `21.3.0-beta.7`
2025-07-14 19:14:55 -04:00
Nicholas Cunningham eb61103850 fix(core): update our caching for ts-node service from plugins (#31917)
## Current Behaviour

We are having a lot of cache misses due to using `compilerOptions` the
key for registering the `ts-node` service.
This can cause out-of-memory errors due to several registrations of the
`ts-node` service consecutively.

https://github.com/nrwl/nx/actions/runs/16233768215/job/45840886378

## Expected Behaviour
The `ts-node` service _should_ have cache hits so that the knock-on
effect of multiple registration (out-of-memory) does not happen via
plugins.

## MISC
If we set `NX_PREFER_TS_NODE` env variable we should not show the
warning fallback message.
2025-07-14 14:04:17 -06:00
Benjamin Cabanes d99c200dc1 docs(nx-dev): update team list (#31916)
Updated the team list.
2025-07-14 18:27:23 +00:00
Tomáš Čarnecký db4b0d3a45 fix(misc): await load in config-utils.ts
Fixes #31408

Change verified by patching the file in my local node_modules, `nx
run-many --target build` works with this change.
2025-07-14 13:24:06 -04:00
Victor Savkin eef293ce86 cleanup(nx-dev): clean up get started buttons 2025-07-12 23:24:37 -04:00
Juri 18e5d95916 docs(nx-cloud): remove obsolete callout 2025-07-11 23:20:00 +02:00
Craigory Coppola 89495db0ab fix(core): swap from gray -> dark gray for light theme secondary foreground (#31901)
## Current Behavior
Gray for secondary light foreground has low contrast in light themes

## Expected Behavior
This pull request includes a small change to the `Theme` implementation
in the `packages/nx/src/native/tui/theme.rs` file. The change updates
the `secondary_fg` color from `Color::Gray` to `Color::DarkGray` to
improve visual contrast.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-11 17:15:06 -04:00
Jack Hsu cf7ffd391b docs(misc): update react and angular monorepo tutorials to match new onboarding and include self-healing CI (#31870)
This is an update to the React and Angular monorepo tutorial to match
new onboarding experience.

Notes: 
- The link to create new workspace uses the querystring `?preset=...` --
this requires a deployment to cloud.nx.app to work
- This tutorial assumes the generated `ci.yml` comes with `npx nx-cloud
fix-ci` out of the box -- this is only in beta (but should be released
soon)

Previews:
-
https://nx-dev-git-docs-react-tutorial-update-nrwl.vercel.app/getting-started/tutorials/react-monorepo-tutorial
-
https://nx-dev-git-docs-react-tutorial-update-nrwl.vercel.app/getting-started/tutorials/angular-monorepo-tutorial
2025-07-11 17:05:35 -04:00
Jason Jean d3206e662e chore(repo): update nx to 21.3.0-beta.6 (#31900)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This repo is using Nx `21.3.0-beta.5`

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This repo is using Nx `21.3.0-beta.6`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-11 20:59:57 +00:00
Benjamin Cabanes 61e8479a36 docs(nx-dev): update contact button link in plans section (#31899)
Changed the contact button link in the pricing section to point to the sales page.
2025-07-11 13:39:40 -04:00
Nicholas Cunningham 8123d4c62f fix(node): preserve existing test target options (#31891)
We should preserve the test target options if they are provided.
2025-07-11 11:16:28 -06:00
Benjamin Cabanes b1b332fe50 docs(nx-dev): update contact button link in plans section (#31896)
Changed the contact button link in the pricing section to point to the sales page.
2025-07-11 16:19:49 +00:00
Leosvel Pérez Espinosa f7e2256b1f fix(core): improve column display decision logic in tui (#31885)
## Current Behavior

When the available space in the TUI task list is small, task names can
be cropped while still displaying the Duration column.

## Expected Behavior

When the available space is insufficient, task names should be
prioritized over duration. Additionally, update the overall column
display decision logic to better use the available space.

### Before

<img width="622" height="368" alt="image"
src="https://github.com/user-attachments/assets/bd486408-abef-4601-9339-b2bf3c589287"
/>

### After

<img width="618" height="369" alt="image"
src="https://github.com/user-attachments/assets/5331172a-23b8-4924-8f3f-b2b107d011d8"
/>
2025-07-11 17:46:44 +02:00
Leosvel Pérez Espinosa 856cb30660 feat(testing): support jest v30 (#31853)
## Current Behavior

Jest v30 is not supported.

**Note**: this is currently awaiting for `jest-preset-angular` to
support Jest v30:
https://github.com/thymikee/jest-preset-angular/pull/3175.

## Expected Behavior

Jest v30 should be supported.

## Related Issue(s)

Fixes #31778
2025-07-11 11:17:14 -04:00
Jason Jean 29f9e76925 feat(core): add comprehensive dependency tracking with continuous task support (#31861)
## Current Behavior

When tasks are pending (not started yet), the TUI shows an empty
terminal pane with no information about why the task is waiting. Users
have no visibility into task dependencies or their status.

## Expected Behavior

When a task is pending, the TUI now displays a comprehensive dependency
view showing:
- Progress header indicating how many dependencies are complete vs total
- Scrollable list of all dependencies (direct and transitive) with
real-time status updates
- Support for continuous tasks where InProgress/Stopped are considered
complete
- Keyboard navigation (arrow keys, j/k vim keys, page up/down)
- Dependencies sorted by complexity (most dependencies first), then
alphabetically

### Dependencies Pending

![image](https://github.com/user-attachments/assets/c704dac9-500c-4ff8-a658-24fd23276a29)

### Dependencies Ready but waiting for thread

![image](https://github.com/user-attachments/assets/834dcbc8-6801-4392-b047-0c5115a5ad06)


### Scrollable

![image](https://github.com/user-attachments/assets/338c4486-6268-48c2-a91c-cfa282101565)


## Related Issue(s)

This enhancement improves the TUI experience by providing clear
visibility into task dependencies, making it easier to understand build
pipelines and debug issues.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-11 09:40:18 -04:00
Jason Jean be6d35bc26 chore(repo): update nx to 21.3.0-beta.5 2025-07-10 20:45:10 -04:00
Emily Xiong fb7f38edda fix(gradle): allow excludeDependsOn to be false (#31890)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
excludeDependsOn is true by default, but got this error when running `nx
run nx-api:compileTestKotlin`:
```
* What went wrong:
Execution failed for task ':nx-api:compileTestKotlin'.
> Error while evaluating property 'friendPathsSet$kotlin_gradle_plugin_common' of task ':nx-api:compileTestKotlin'.
   > Querying the mapped value of provider(java.util.Set) before task ':nx-api:compileJava' has completed is not supported
   ```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
have a way to turn off excludeDependsOn

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. -->

Fixes #
2025-07-10 18:38:18 -04:00
Craigory Coppola 819ac4442f feat(core): add support for --tui and --no-tui (#31621)
## Summary
- support `--tui` flag alongside `--output-style`
- expose tui option in NxArgs
- respect `tui` CLI option in TUI detection
- warn when environment can't display TUI even if flag is set
- test tui CLI flag parsing

## Testing
- `pnpm nx run-many -t lint,test,build` *(fails: Failed to process
project graph)*
- `pnpm test:e2e` *(fails: Command "test:e2e" not found)*

------
https://chatgpt.com/codex/tasks/task_e_68517adad738832c81ecdfba7f4a1feb

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Craigory Coppola <AgentEnder@users.noreply.github.com>
2025-07-10 17:47:31 -04:00
Benjamin Cabanes 7c9f6cadcc docs(nx-dev): add credit pricing reference & update navigation (#31875)
Introduced a new "Credit Pricing" reference page for Nx Cloud, detailing credit consumption and pricing metrics. Updated documentation structure, menus, sitemap, and headers to integrate the new page. Removed outdated FAQ entries and replaced the "Pricing" reference with the new "Credits Pricing" link in navigation. Adjusted related redirects and UI components for consistency.
2025-07-10 13:22:59 -04:00
Jason Jean 3bdc0ccd90 docs(misc): update nx fix-ci documentation link (#31884)
## Current Behavior

The CI workflow generators for both @nx/workspace and @nx/gradle
currently reference the old documentation URL `https://nx.dev/ai` when
explaining the `nx fix-ci` command.

## Expected Behavior

The CI workflow generators should reference the correct self-healing CI
documentation URL `https://nx.dev/ci/features/self-healing-ci`.

## Related Issue(s)

<\!-- Please link the issue being fixed so it gets closed when this is
merged. -->

This is a follow-up to update the documentation links to point to the
correct self-healing CI feature page.

## Changes Made

- Updated @nx/workspace CI workflow generator to use the correct
documentation URL
- Updated @nx/gradle CI workflow generator to use the correct
documentation URL
- Updated all snapshot tests to reflect the new URLs
- Updated tutorial documentation that shows the CI workflow examples

**Files Updated:**
- `packages/workspace/src/generators/ci-workflow/ci-workflow.ts`
- `packages/gradle/src/generators/ci-workflow/generator.ts`
-
`packages/workspace/src/generators/ci-workflow/__snapshots__/ci-workflow.spec.ts.snap`
-
`packages/gradle/src/generators/ci-workflow/__snapshots__/generator.spec.ts.snap`
- `packages/workspace/src/generators/ci-workflow/ci-workflow.spec.ts`
- `docs/shared/tutorials/react-monorepo.md`
- `docs/shared/tutorials/typescript-packages.md`
- `docs/shared/tutorials/angular-monorepo.md`
- `docs/shared/tutorials/gradle.md`

All changes ensure users are directed to the correct self-healing CI
documentation when using the `nx fix-ci` command in their CI workflows.
2025-07-10 12:41:02 -04:00
Leosvel Pérez Espinosa bc939973a9 feat(angular): support angular v20.1 (#31845)
## Current Behavior

Angular v20.1 is not supported.

## Expected Behavior

Angular v20.1 should be supported.

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-07-10 16:21:03 +00:00
Leosvel Pérez Espinosa a7800c47d6 fix(misc): add fallback for missing source root (#31759)
## Current Behavior

The `sourceRoot` project configuration property is optional. Several
places in the codebase do not properly handle this, which can result in
issues.

## Expected Behavior

A missing `sourceRoot` project configuration property should be handled
correctly throughout the codebase.

## Related Issue(s)

Fixes #30638
2025-07-10 16:19:06 +00:00
Leosvel Pérez Espinosa b8f139016b fix(angular): generate ngrx facade spec file correctly (#31850)
## Current Behavior

When generating a facade with the NgRx generators, the spec file imports
a non-existent `readFirst` from `@nx/angular/testing`. That helper was
deprecated for a long time and removed in Nx v21, but this usage was
missed, causing those tests to fail.

The e2e tests that cover this were disabled for the pnpm package
manager, so it was not caught in the PR/main CI pipeline. It was
correctly failing in the Nightly CI pipeline. The tests are now enabled
for all package managers.

Nightly failure:
https://staging.nx.app/runs/uRlR20Fzt9/task/e2e-angular%3Ae2e-local

## Expected Behavior

When generating a facade with the NgRx generators, the spec file for the
facade should be correct.

## Related Issue(s)

Fixes #
2025-07-10 11:13:57 -04:00
Juri ecee1c34fc docs(core): updates to the getting started pages 2025-07-10 16:12:50 +02:00
Leosvel Pérez Espinosa b5d406dee8 fix(core): allow opting out of sorting root tsconfig path mappings with an env var (#31763)
## Current Behavior

Currently, users can opt out of sorting the root tsconfig file path
mappings by providing `--sort-root-tsconfig-paths=false` to the `nx
format` commands, or by providing `{ sortRootTsconfigPaths: false }` to
the `formatFiles` function when invoked programmatically. Still, Nx
generators sort the root tsconfig file path mappings by default, and the
only way to bypass that is to run two different commands:

```bash
nx g component path/to/component --skip-format
nx format:write --sort-root-tsconfig-paths=false
```

## Expected Behavior

Users should be able to easily opt out of sorting the root tsconfig file
path mappings by setting the `NX_FORMAT_SORT_TSCONFIG_PATHS` environment
variable to `false`. With that set, all the relevant commands, including
`nx generate` will respect it.

## Related Issue(s)

Fixes #29043
2025-07-10 09:58:52 -04:00
Leosvel Pérez Espinosa 3782d7edac Revert "fix(core): add option to use v8 for daemon message serializat… (#31881)
…ion to avoid issues when JSON.stringify would fail (#30516)"

This reverts commit a59e6eb559.
2025-07-10 13:34:38 +00:00
Jason Jean 13551c9457 feat(core): add fix-ci command to CI workflows (#31833)
## Current Behavior

Nx-cloud commands are scattered across different directories in the
command-line structure, making them harder to find and maintain.
Commands like `record`, `start-ci-run`, and `fix-ci` don't exist as
direct nx commands. The fix-ci command in CI workflows doesn't run when
previous steps fail.

## Expected Behavior

All nx-cloud related commands are organized in a dedicated directory
with consistent patterns and shared utilities. New commands provide
better CI/CD integration. The fix-ci command always runs to provide
AI-powered recommendations even when builds fail.

## Related Issue(s)

Improves code organization and adds missing CI workflow commands for
better developer experience.

## Changes Made

### 🏗️ **Reorganized nx-cloud commands**
- Created `/packages/nx/src/command-line/nx-cloud/` directory structure
- Moved existing commands (`login`, `logout`, `connect`) to new location
- Extracted shared utility function to eliminate code duplication

### 🆕 **Added new nx-cloud commands**
- `nx record` - Records command execution for distributed task execution
- `nx start-ci-run` - Starts new CI run for distributed execution  
- `nx fix-ci` - Fixes CI configuration issues with AI-powered
suggestions

### 🔧 **Code quality improvements**
- Reduced code duplication by 80+ lines across command implementations
- All commands now follow consistent patterns using shared utilities
- Fixed import paths throughout codebase after reorganization

### 🚀 **Enhanced CI workflow support**
- **Gradle Generator**: Added `alwaysRun` property to Command type for
conditional execution
- **Template Updates**: GitHub Actions and CircleCI templates now handle
`alwaysRun` property
- **Fix-CI Integration**: The `fix-ci` command now always runs
regardless of previous step failures

### 📚 **Comprehensive documentation updates**
- Updated all CI provider documentation (GitHub Actions, Azure DevOps,
GitLab, Bitbucket, CircleCI, Jenkins)
- Updated Nx Cloud tutorial documentation (GitHub Actions, CircleCI)
- **Framework Tutorials**: Added `if: always()` condition to fix-ci
commands in:
  - Gradle tutorial (`/docs/shared/tutorials/gradle.md`)
- Angular monorepo tutorial
(`/docs/shared/tutorials/angular-monorepo.md`)
  - React monorepo tutorial (`/docs/shared/tutorials/react-monorepo.md`)
- TypeScript packages tutorial
(`/docs/shared/tutorials/typescript-packages.md`)
- Added proper documentation linking for all new commands
- All validation passes (TypeScript, formatting, documentation)

### 🎯 **Key Technical Improvements**
- **Always-Run Logic**: Fix-ci command uses platform-specific
conditional execution:
  - GitHub Actions: `if: always()`
  - CircleCI: `when: always`
  - Azure DevOps: `condition: always()`
- **Consistent Patterns**: All nx-cloud commands follow unified
implementation approach
- **Backward Compatibility**: All existing functionality preserved
during reorganization

All nx-cloud commands now provide a more cohesive experience with better
CI integration, ensuring users get AI-powered recommendations even when
builds fail.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
2025-07-09 18:20:59 -04:00
Philip Fulcher baa28ab697 docs(nx-dev): remove references to July 9th webinar (#31874) 2025-07-09 13:48:29 -06:00
Juri b67deeefe3 docs(nx-cloud): add new self-healing ci feature page 2025-07-09 19:22:17 +02:00
Jack Hsu 5eec205959 docs(misc): fix command in self-healing ci blog post 2025-07-09 18:01:35 +02:00
Craigory Coppola a59e6eb559 fix(core): add option to use v8 for daemon message serialization to avoid issues when JSON.stringify would fail (#30516)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
For really large objects (particularly those containing large strings)
JSON.stringify can fail

## Expected Behavior
Daemon serialization doesn't fail for the same strings when setting
`NX_USE_V8_SERIALIZER=true`. This should become the default behavior.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Jason Jean <jasonjean1993@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-07-09 10:53:23 -04:00
Brandon Roberts 4a09116283 fix(vite): bump @analogjs/vite-plugin-angular to 1.19.x (#31866)
## Current Behavior

AnalogJS installs 1.17.1 for Vitest support

## Expected Behavior

AnalogJS installs 1.19.1 for Vitest support
2025-07-09 16:49:07 +02:00
Miroslav Jonaš f432f78028 docs(nx-dev): remove problematic GitHub parallelization (#31865)
The existing parallelization example does not work correctly due to the
encapsulated run_command swallowing the status codes and passing the
runs with a failed command.

If users are interested in how to parallelize the tasks they can easily
find it today. We should provide minimal example like we do for other CI
providers.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-09 10:35:16 +00:00
Jason Jean 2077a4ac4b Revert "feat(core): add CI warning for missing remote cache solution (#31678)" (#31860)
This reverts commit
[a745ca5dd6fac1c91233976b9fe3713a7018cfe3](https://github.com/nrwl/nx/pull/31860/commits/a745ca5dd6fac1c91233976b9fe3713a7018cfe3).

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes https://github.com/nrwl/nx/issues/31837
2025-07-08 18:54:27 -04:00
Jack Hsu a024760e1d chore(repo): rename rawdocs to upstream docs (#31859)
Just a rename for https://github.com/nrwl/upstream-docs
2025-07-08 13:58:10 -04:00
Leosvel Pérez Espinosa ffb80d10ab chore(core): optionally infer all package.json files as projects (#31843)
Add an env var to allow inferring projects from all `package.json` files
when there's no `package.json` file at the workspace root.
2025-07-08 12:12:14 -04:00
Benjamin Cabanes ea5cd30e42 docs(nx-dev): update nx-cloud page (#31844)
The main Nx Cloud page was completely rebuilt with a new component structure, replacing the old sections (`Hero`, `TrustedBy`, `FasterAndCheaper`, etc.) with new ones like `NxCloudHero`, `CiBottleneck`, `TimeToGreen`, `Features`, and others.
2025-07-07 14:47:56 -04:00
Colum Ferry 16e3e7aa8d feat(release): allow for semver requirements to be disabled in version and changelog (#31794) 2025-07-07 13:53:27 +04:00
James Henry 7f674e1406 fix(core): improve tui contrast on some terminal themes (#31299) 2025-07-07 12:54:56 +04:00
Miguel 0fce02a7f5 fix(core): consider virtual trees in globAsync (#31805) 2025-07-07 12:31:02 +04:00
Jonathan Gelin 31661c8340 fix(plugin): fix e2e-project generator when the e2e target is inferred (#31809) 2025-07-07 12:22:15 +04:00
Jason Jean 666da3eaeb feat(core): refactor CI workflow generator to use centralized command generation (#31787)
## Summary

This PR refactors the @nx/workspace CI workflow generator to adopt the
same centralized command generation pattern used by the Gradle
generator, making it more maintainable and consistent.

## Key Changes

### 1. Centralized Command Generation
- Added `getCiCommands()` function that generates command arrays for all
CI providers
- Replaced hardcoded commands in templates with dynamic command
substitution
- All CI providers now use identical commands with provider-specific
formatting

### 2. Performance Improvement  
- Replaced `nx affected` with `nx run-many` for better performance
- Updated all CI workflow templates and snapshots accordingly

### 3. Better Code Organization
- Separated nx-cloud record comments from nx-affected comments
- Added helper functions `getCiPrefix()` and `getCiArgs()` for cleaner
code
- Improved comment clarity to guide users on when to switch to nx
affected

### 4. Bitbucket Prefix Fix
- Fixed inconsistent YAML formatting in Bitbucket pipelines
- Pull requests section: no prefix for comments
- Branches section: proper "- " prefix for comments

### 5. Template Consistency
- All CI providers (GitHub, Azure, GitLab, CircleCI, Bitbucket) now
generate identical commands
- Consistent comment structure across all templates
- Updated tutorial template to match new format

## Test Results
-  All 114 tests passing
-  All 95 snapshots updated and verified
-  100% backward compatibility maintained

## Benefits
1. **Maintainability**: Changes to commands only need to be made in one
place
2. **Consistency**: All CI providers use identical commands and comments
3. **Performance**: nx run-many provides better performance than nx
affected
4. **Extensibility**: Easy to add new CI providers or modify existing
ones
5. **Clean Architecture**: Follows the same pattern as other generators
2025-07-04 15:02:47 +00:00
Nicholas Cunningham e92cbee9f6 chore(repo): bump nx version to 21.3.0-beta.2 (#31819)
Bump the Nx version to 21.3.0-beta.2
2025-07-03 16:01:55 -04:00
Victor Savkin 6fdca3d539 fix(core): return current nx init date when no git available yet 2025-07-03 12:51:13 -04:00
Emily Xiong 2a0153e839 fix(gradle): handle custom build gradle files (#31817)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
for spring-framework
```
rootProject.children.each {project ->
	project.buildFileName = "${project.name}.gradle"
}
```
it got custom build file name

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- change nxProjectGraph plugin, add buildFiles in the output json like:
```
{
  "nodes": {},
...
  "buildFiles": ["build.gradle"]
}
```
then, it get the build files from reports, combine build files from
build.gradle and custom build files from reports.
```
    const allBuildFiles = Array.from(
      new Set([...buildFilesFromSplitConfigFiles, ...buildFiles])
    );
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-03 10:49:52 -04:00
Benjamin Cabanes 62d7bf6d17 docs(nx-dev): update team list (#31784)
Standard team list updates.
2025-07-02 21:44:26 -06:00
Benjamin Cabanes 84ce8311a4 docs(nx-dev): add Nx Essentials workshop announcement (#31816)
Inserted an announcement callout highlighting the upcoming Nx Essentials Online Workshop (July 29-30) in the Getting Started and Quick Start documentation pages. Includes a link for registration and early bird details.
2025-07-02 19:05:40 -04:00
Emily Xiong 2abf1116d6 fix(gradle): add dependsOn outputs to inputs dependentTasksOutputFiles (#31683)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
for gradle, its inputs depends on outputs of its dependsOn task. (e.g.
jar task)
however, if the output file does not exist, (for example, running for
1st time in ci), it will not add to inputs.
when getting inputs, it would give a warning like
```
file or directory '/Users/emily/code/ocean/dist/libs/shared/db-schema-kotlin/classes/java/main', not found
file or directory '/Users/emily/code/ocean/dist/libs/shared/db-schema-kotlin/classes/kotlin/main', not found
file or directory '/Users/emily/code/ocean/dist/libs/shared/db-schema-kotlin/resources/main', not found
```
it is a warning, not an error, so can't be caught.

```
In Gradle's file resolution internals:

When you call task.inputs.files → Gradle resolves each file/directory.

If a declared file or dir does not exist AND it's allowed to be missing, Gradle does not throw an error — instead it logs:
file or directory '...' not found
This log is just an INFO or DEBUG message.
Gradle's normal file resolution is designed to be tolerant —
so missing files do NOT stop the build by default
```

## Expected Behavior
this solution basically take AL
<img width="1106" alt="Screenshot 2025-06-22 at 1 02 33 PM"
src="https://github.com/user-attachments/assets/7a6e8a50-44ec-4c83-bf3d-dc52346b331d"
/>
L of outputs of dependsOn tasks and add to inputs.


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-02 16:17:29 -04:00
Jason Jean 46e8cd198c chore(workspace): format new generator code (#31815)
## Current Behavior

The getPackageManagerCommand call in the new generator has a long line
that doesn't follow the codebase's formatting standards.

## Expected Behavior

The code should be properly formatted with line breaks for better
readability.

## Related Issue(s)

Code formatting improvement - no related issue.
2025-07-02 20:16:43 +00:00
Nicholas Cunningham 2c121f64f9 fix(linter): refactor checking if the identifier is a function via tsquery (#31792)
This PR addresses the issue where the `eslint-plugin` rules fail to
`require()` modules during development when working with ts source
files. The problem occurs because `require.resolve()` finds .js paths in
package.json exports, but the actual .js files don't exist in
development mode - only .ts files are present.

So when you `require()` and the file is loaded NodeJS throws an error
because the `.js` imports cannot be resolved.
This can occur in a ts solution workspace environment where the failure
is not accommodating.

Instead, we can use `tsquery` to check if the file has a valid named
function export.
2025-07-02 15:21:34 -04:00
Jason Jean fca5650869 feat(core): enhance native cache operations with comprehensive logging (#31652)
## Current Behavior

The native cache system has minimal logging, making it difficult to
debug issues or understand what's happening during cache operations.
When problems occur, there's insufficient visibility into:
- File copying operations and their progress
- Output expansion and glob pattern matching
- Cache PUT operation timing and success/failure details
- Directory creation and cleanup processes

## Expected Behavior

With these changes, the native cache system provides comprehensive
logging that:
- Tracks all file operations with sizes and timing
- Provides detailed visibility into glob pattern expansion
- Logs cache PUT operations with performance metrics
- Includes trace-level debugging for troubleshooting
- Makes it easier to diagnose cache-related issues

## Related Issue(s)

This enhancement improves the observability and debugging capabilities
of the native cache system without changing its core functionality.

## Changes Made

- **Enhanced cache PUT operations**: Added timing metrics and detailed
logging for each step
- **Improved file copying**: Added progress tracking, size reporting,
and detailed trace logs
- **Better output expansion**: Added comprehensive logging for glob
pattern analysis and path validation
- **Fixed borrow checker error**: Resolved compilation issue in file_ops
copy function
- **Comprehensive tracing**: Added trace and debug logging throughout
the cache operations

The logging follows a structured approach:
- `trace\!()` for detailed step-by-step operations
- `debug\!()` for summary information and timing metrics
- Proper error context for debugging issues

This makes the native cache system much more observable and easier to
debug when issues arise.
2025-07-02 13:54:32 -04:00
Rares Matei 157a34ae40 docs(nx-cloud): update release notes (#31802)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-07-01 16:02:39 +00:00
Chau Tran bfdf892a0a docs(misc): add info about Okta advanced configuration (#31791)
This is to make sure enterprises set the configuration required for our
saml integration
2025-06-30 21:36:59 +00:00
Philip Fulcher 2a10953c52 docs(nx-dev): add CTAs for July 9 webinar (#31769) 2025-06-30 14:59:03 -06:00
Benjamin Cabanes 487f8e6d42 chore(core): replace hardcoded registry URLs with placeholder (#31789)
Updated tests to utilize the `customRegistryUrl` variable instead of hardcoded `http://localhost:7190` URLs, improving maintainability and flexibility.
2025-06-30 18:36:52 +00:00
Jason Jean 784a14a5b0 fix(core): allow any framework value in preset generator schema (#31665)
## Current Behavior

When using third-party presets with `npx create-nx-workspace`, passing
framework values other than the predefined backend frameworks fails with
a schema validation error:

```
Error: Property 'framework' does not match the schema. 'angular' should be one of express,koa,fastify,nest,none.
```

For example:
```bash
npx create-nx-workspace --preset=@rig/cli@alpha --framework=angular --theme=pcb --name=hello-world
```

## Expected Behavior

Third-party presets should be able to pass any framework value without
schema validation errors, allowing for greater flexibility in the Nx
ecosystem.

## Related Issue(s)

This fixes the issue where third-party presets cannot pass framework
values like 'angular', 'react', 'vue', etc., due to overly restrictive
schema validation.

## Changes

- Removed the `enum` constraint from the `framework` property in the
workspace preset generator schema
- The property remains a string type but now accepts any value
- Maintains backward compatibility with existing functionality

The built-in Nx preset generators still only handle frameworks they know
about, but the schema validation no longer blocks third-party presets
from passing other framework values.

## Test plan

- [x] Workspace package builds successfully
- [x] Schema validation allows any string value for framework property
- [x] Backward compatibility maintained for existing presets
- [ ] Manual test: `npx create-nx-workspace --preset=@rig/cli@alpha
--framework=angular` should work without schema validation errors

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
Co-authored-by: Claude <claude@anthropic.com>
2025-06-30 14:22:53 -04:00
Benjamin Cabanes a73855c74e feat(core): add CI warning for missing remote cache solution (#31678)
Running Nx in CI without a remote cache is a common misconfiguration that leads to slow, inefficient builds. This change introduces a proactive warning to prevent this "silent failure" and guide users toward a performant setup.

A new `NxCloudCIMessageLifeCycle` hook now checks for a remote cache configuration at the start of any command run within a CI environment.

The warning is only displayed if no remote caching is detected. It is intelligently suppressed if the workspace has:

* An Nx Cloud access token configured.
* A dependency on nx-cloud or @nrwl/nx-cloud.
* An on-premise cache provider (s3, gcs, azure, sharedFs) configured in nx.json.
* The NX_SELF_HOSTED_REMOTE_CACHE_SERVER environment variable set.
* `tasksRunnerOptions` is configured

This ensures we only notify users who are genuinely missing out on caching, improving the out-of-the-box developer experience.
2025-06-30 13:53:23 -04:00
Nicholas Cunningham 8b3fc7fba0 fix(node): reorder addPlugin in normalizeOptions return object (#31785)
When creating a node app If you want plugins to be added and
`applicationGeneratorInternal` is called instead of
`applicationGenerator` the option will be overwritten by the default
`false`.
2025-06-30 13:32:19 -04:00
Nicholas Cunningham f8a23eef96 fix(core): update nx to version 21.3.0-beta.0 (#31771)
Update nx repo package version
2025-06-30 09:32:40 -04:00
Nicholas Cunningham 7430238529 fix(core): resolve package.json for @nx/js to improve plugin detection (#31770)
This PR updates the package.json inferred target to resolve package.json
instead of the entry file.
2025-06-27 23:22:38 +00:00
Nicholas Cunningham ad14f2f477 chore(repo): update e2e nightly report adding more golden test and updating the report (#31752)
This PR changes our Nightly GHA status reporting from a
per-project-per-environment basis to a per-project basis.
This consolidation will make the status reports easier to understand by
reducing the granularity of reporting.

Additionally, we now capture timed-out jobs as a failure instead of
being overlooked.

Sample:
```

Golden Test Failure
 : Golden Projects
 : Passing: 15
 : Failing: 1
🚨 : Failed Golden Projects
| Failed project                 |
|--------------------------------|
| e2e-node                       |
```
2025-06-27 17:08:04 -04:00
Nicholas Cunningham 9d5030b253 fix(js): improve typescript plugin build detection (#31533)
This PR enhances the typescript plugin build detection. Notably the
changes include:
- Add absolute path handling for package.json entry points.
- Simplify the buildable verification
- Add glob pattern matching for `include` patterns.

MISC: 
- Also fixes `e2e-rollup` test failing due to the typescript plugin
having the same build target as rollup so it created an unexpected
output.

closes: #29670
2025-06-27 11:23:03 -06:00
Colum Ferry 47e1a9ce05 fix(storybook): handle hyphenated framework names in pnpm dependency installation (#31760)
## Current Behavior

When installing Storybook dependencies with pnpm, the regex for
extracting base framework names from compound framework packages (e.g.,
@storybook/web-components-vite) was not properly handling hyphens in
framework names. This
caused it to extract incorrect base framework names like @storybook/web
instead of @storybook/web-components, leading to attempts to install
non-existent packages.

 ## Expected Behavior

The regex should properly extract base framework names that include
hyphens, correctly identifying @storybook/web-components as the base
framework for packages like @storybook/web-components-vite. This ensures
that only valid
  Storybook packages are installed during dependency resolution.

  ## Related Issue(s)

  Fixes #31292
2025-06-27 17:18:59 +00:00
Nicholas Cunningham e78f9e308a fix(node): improve error handling during cleanup in Node application tests (#31767)
This PR Improves the test cleanup logging for `killPorts`.

Instead of asserting that no error is thrown during cleanup, we now log
the error message when one occurs. This helps surface common but
non-critical errors (like `ECONNRESET`) without failing the test
unnecessarily.

So a test like this:
https://github.com/nrwl/nx/actions/runs/15918605455/job/44900857152
won't fail although the primary body of the test has passed
successfully.
2025-06-27 13:06:07 -04:00
Jack Hsu beb95ccce2 fix(core): clarify TypeScript configuration requirements for applications in project references migration (#31764)
The documentation for migrating to TypeScript project references only
shows examples for library projects, making it unclear whether the same
configuration requirements apply to application projects.

This PR clarifies that the steps apply to both libs and apps, with the
latter typically using `tsconfig.app.json` instead of
`tsconfig.lib.json`.

Fixes #31715

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 11:02:02 -04:00
Colum Ferry 3c248961c7 fix(bundling): ensure lockfile creation doesnt error with bun (#31762)
## Current Behavior

When using bun as a package manager with Nx bundling operations
(webpack, vite,
   etc.), lockfile creation was failing with various errors:

  - "Unable to create bun lock files" warnings
  - "argument 'value' must be either string or Buffer" errors
  - External dependencies not being found (next, webpack-cli, etc.)
  - Build failures when using generatePackageJson option
  - Project graph issues with bun text-based lockfiles

  This affected multiple bundlers and scenarios across the Nx ecosystem.

 ## Expected Behavior

Bun lockfile creation should work seamlessly across all Nx bundling
operations
without errors. Users should be able to use bun with any Nx bundler
(webpack,
  vite, esbuild) and the generatePackageJson option without encountering
  lockfile-related build failures.

 ## Related Issues

  Fixes #30568
  Fixes #26640
2025-06-27 15:49:45 +01:00
Colum Ferry 4553748d8c fix(vite): ensure vue-tsc is used for typecheck of vue projects (#31761)
## Current Behavior

When Vite projects use Vue, the typecheck target still uses the standard
TypeScript compiler (tsc) instead of vue-tsc, which is the recommended
TypeScript compiler for Vue projects. This can lead to incomplete type
checking as
tsc doesn't understand Vue's single-file components (.vue files) and
their specific syntax.

 ## Expected Behavior

When a Vite project uses the Vue plugin (vite:vue), the typecheck target
should automatically use vue-tsc instead of tsc for type checking. This
ensures proper type checking of Vue components and maintains
compatibility with
Vue's TypeScript integration. The external dependencies and help
metadata are also updated to reflect the use of vue-tsc when
appropriate.

 ## Related Issue(s)

  Fixes #31647
2025-06-27 15:46:50 +01:00
Colum Ferry cae6df7096 fix(bundling): respect decision to create babelrc file (#31755)
## Current Behavior

When generating a JS library with the rollup bundler, the generator
would always create a .swcrc file regardless of the includeBabelRc flag
setting. This meant that even when users explicitly requested a Babel
configuration by
setting includeBabelRc: true, the generator would ignore this preference
and still use SWC configuration.

## Expected Behavior

When generating a JS library with any bundler (including rollup), the
generator should respect the includeBabelRc flag. If includeBabelRc is
set to true, it should create a .babelrc file and skip creating a .swcrc
file. Only
when includeBabelRc is false or not set should it fall back to creating
the appropriate transformer configuration file (.swcrc for swc/rollup
bundlers).

## Related Issue(s)

  Fixes #31582
2025-06-27 13:37:52 +01:00
Colum Ferry 3131f4aa29 fix(node): ensure args are set in target correctly (#31758)
## Current Behavior

The Nest.js webpack build target configuration was generating
webpack-cli arguments without the required -- prefix, resulting in
node-env=production and node-env=development instead of proper CLI
arguments.

  ## Expected Behavior

The Nest.js webpack build target should generate proper webpack-cli
arguments with the -- prefix: --node-env=production and
--node-env=development for correct command line execution.

  ## Related Issue(s)

  Fixes #31578
2025-06-27 13:37:40 +01:00
Leosvel Pérez Espinosa 7651f6343e fix(linter): update lint executor to always log errors and stack traces (#31757)
## Current Behavior

When the `@nx/eslint:lint` executor runs and an unexpected error occurs,
only the error message is displayed and not the stack trace. This
requires users to re-run with `--verbose` to see the stack trace.

## Expected Behavior

When the `@nx/eslint:lint` executor runs and an unexpected error occurs,
the error message and the stack trace should be logged.

## Related Issue(s)

Fixes #21630
2025-06-27 08:34:15 -04:00
Leosvel Pérez Espinosa 2d028f7ad5 fix(angular): expand nx tokens in project configurations when running schematic migrations (#31526)
## Current Behavior

Running Angular CLI schematic migrations that update project
configurations that contain Nx tokens (e.g. `{workspaceRoot}`,
`{projectRoot}`, `{projectName}`) does not work correctly. The schematic
migrations receive the project configuration option values with the
non-expanded tokens, which is not something handled.

## Expected Behavior

The Nx adapter for Angular should expand Nx tokens in project
configurations so schematic migrations can correctly process them. When
writing the project configuration back, the tokens should be restored on
a best-effort basis.

## Related Issue(s)

Fixes #29052
2025-06-27 12:41:47 +02:00
Leosvel Pérez Espinosa 6305922e32 fix(expo): respect --unit-test-runner=none properly when generating expo apps and libs (#31754)
## Current Behavior

When generating Expo apps and libs with `--unit-test-runner=none` some
test-specific files and dependencies are generated.

## Expected Behavior

When generating Expo apps and libs with `--unit-test-runner=none` no
test-specific files and dependencies should be generated.

## Related Issue(s)

Fixes #30366
2025-06-27 10:47:00 +02:00
Leosvel Pérez Espinosa 99f38b8770 fix(vite): ensure path aliases are not replaced when building vite projects and using ts path mappings (#31747)
## Current Behavior

Projects generated with Vite that import from another project will
produce incorrect declaration files when built in an integrated
workspace (using TS path mappings).

## Expected Behavior

Projects generated with Vite that import from another project should
produce the correct declaration files when built in an integrated
workspace (using TS path mappings).

## Related Issue(s)

Fixes #30814
2025-06-27 09:08:44 +02:00
Caleb Ukle 07233f0e03 docs(nx-cloud): callout templates use nx-cloud features (#31733)
template examples use nx-cloud record feature which will fail if cloud
isn't enable making for bad user experience. We instead commend out the
usage and call attention to how to connect to cloud so the template will
work OOTB

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-06-26 15:46:57 -05:00
Isaac Mann c8bad17bba docs(core): webinar for july 9 2025 (#31751)
Add banner for July 9th webinar
2025-06-26 19:24:54 +00:00
Victor Savkin 4a666b7854 chore(nx-dev): update remote cache docs 2025-06-26 14:52:23 -04:00
Craigory Coppola 402d946534 feat(core): pass in progress task outputs to tui for non-direct child processes (#31655)
## Current Behavior
Currently the TUI is disabled on windows due to poor support for the
pseudoterminal and some lingering issues.

## Expected Behavior
This PR starts tackling this by making the TUI more usable without the
pty. The first step here is enabling processes created without the pty
to display live outputs in the TUI, which was currently not possible.

## Copilot Summary
This pull request introduces enhancements to task execution and output
handling in the Nx task runner. The changes focus on improving the
handling of progressive output for the TUI (Text User Interface), adding
support for pseudo-terminal processes, and refining the orchestration of
tasks. Below are the most important changes grouped by theme:

### Enhancements to Task Execution and Output Handling:
*
[`packages/nx/src/tasks-runner/running-tasks/node-child-process.ts`](diffhunk://#diff-8c0c3712ab796458d8f6fc6cb685f68a45c01fb94f2210d9b60eaabb07610a7cR12):
Added a new `onOutput` method to allow streaming output to the TUI via
callbacks. Updated `stdout` and `stderr` handlers to invoke these
callbacks for progressive output. Introduced a
`canProvideProgressiveOutput` method to indicate whether a task can
stream output.
[[1]](diffhunk://#diff-8c0c3712ab796458d8f6fc6cb685f68a45c01fb94f2210d9b60eaabb07610a7cR12)
[[2]](diffhunk://#diff-8c0c3712ab796458d8f6fc6cb685f68a45c01fb94f2210d9b60eaabb07610a7cL55-R80)
[[3]](diffhunk://#diff-8c0c3712ab796458d8f6fc6cb685f68a45c01fb94f2210d9b60eaabb07610a7cL88-R112)

### Support for Pseudo-Terminal Processes:
*
[`packages/nx/src/tasks-runner/forked-process-task-runner.ts`](diffhunk://#diff-9e7468f39e004b5e6087ab9a309150efa755b4f9f8047514b63fc71f8034c930L143-R143):
Added comments to clarify when pseudo-terminal processes are used for
interactive tasks and when non-interactive processes with piped output
are used. These changes improve readability and understanding of the
trade-offs involved.
[[1]](diffhunk://#diff-9e7468f39e004b5e6087ab9a309150efa755b4f9f8047514b63fc71f8034c930L143-R143)
[[2]](diffhunk://#diff-9e7468f39e004b5e6087ab9a309150efa755b4f9f8047514b63fc71f8034c930R155-R165)

### Improvements to Task Orchestration:
*
[`packages/nx/src/tasks-runner/task-orchestrator.ts`](diffhunk://#diff-e9bae83332b3d6e57c023959ab2e5f191c97e0a154a8c1d36dd81f8f869e1bdfL637-R637):
Enhanced the registration of tasks in the TUI lifecycle. Added checks to
ensure tasks that support progressive output but are not interactive
(e.g., `NodeChildProcessWithNonDirectOutput`) are registered correctly.
Introduced a fallback for tasks that don't support progressive output.
[[1]](diffhunk://#diff-e9bae83332b3d6e57c023959ab2e5f191c97e0a154a8c1d36dd81f8f869e1bdfL637-R637)
[[2]](diffhunk://#diff-e9bae83332b3d6e57c023959ab2e5f191c97e0a154a8c1d36dd81f8f869e1bdfL649-R655)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-06-26 13:50:13 -04:00
Rares Matei c7d2c77641 docs(nx-cloud): update release notes (#31749)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-26 17:17:21 +00:00
Leosvel Pérez Espinosa afb94afd7d fix(testing): unset customConditions when running the open-cypress inferred task (#31687)
## Current Behavior

Cypress `open-cypress` inferred task in a workspace with the
`customConditions` TypeScript compiler option set, fail with the error:

```bash
TSError: ⨯ Unable to compile TypeScript:
error TS5098: Option 'customConditions' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'.
```

This happens because Cypress forces `ts-node` to use `module: commonjs`
and `moduleResolution: node10`, which is incompatible with the
`customConditions` TypeScript compiler option.

## Expected Behavior

Cypress `open-cypress` inferred task in a workspace with the
`customConditions` TypeScript compiler option set should work as
expected.

## Related Issue(s)

Fixes #31616
2025-06-26 10:48:54 -04:00
Leosvel Pérez Espinosa 2daa73dd10 fix(testing): prefer using tsconfig.spec.json when loading jest config in plugin (#31726)
## Current Behavior

The `@nx/jest/plugin` loads the Jest config file using the project's
`tsconfig.json` file.

## Expected Behavior

The `@nx/jest/plugin` should try to load the Jest config file using the
`tsconfig.spec.json` file (or other common filenames also handled by the
nx jest resolver). If those files don't exist, it should fall back to
the project's `tsconfig.json` file.

## Related Issue(s)

Fixes #31351
2025-06-26 10:31:33 -04:00
Jack Hsu 948c985925 fix(linter): correct lintFilePatterns documentation to show it's optional (#31744)
- Updated documentation to clarify lintFilePatterns is optional
- Added default value information ['{projectRoot}']

Fixes #29648
2025-06-26 09:56:06 -04:00
Leosvel Pérez Espinosa 54b36a6da0 fix(testing): do not re-add vscode recommended extension for jest after initial jest setup (#31745)
## Current Behavior

The `@nx/jest:configuration` generator always adds the
`firsttris.vscode-jest-runner` to the VSCode recommended extensions if
it's missing.

## Expected Behavior

The `@nx/jest:configuration` generator should only add the
`firsttris.vscode-jest-runner` to the VSCode recommended extensions when
configuring `@nx/jest` for the first time.

## Related Issue(s)

Fixes #29345
2025-06-26 13:54:55 +00:00
Leosvel Pérez Espinosa 768a11aee4 fix(core): improve error handling in daemon server (#31728)
## Current Behavior

When a message handler in the Daemon server throws an error, the process
exits, and nothing is printed to the terminal.

## Expected Behavior

Errors thrown by message handlers in the Daemon server should be handled
appropriately and printed to the output.

## Related Issue(s)

Fixes #31407 
Fixes #31567
2025-06-26 15:44:51 +02:00
Colum Ferry 836defed4a feat(bundling): add useLegacyTypescriptPlugin option to migrate from rollup-plugin-typescript2 (#31718)
## Current Behavior

  When using the Rollup executor with TypeScript, the build process uses
`rollup-plugin-typescript2` which can fail when importing types from
external dependencies.
This results in errors like "Invalid value for option 'files' - entry
does not exist" when
the TypeScript plugin tries to resolve type imports from node_modules.

  ## Expected Behavior

Users should be able to build TypeScript projects with Rollup without
encountering errors
when importing types from external packages. Additionally, users should
have the option to
migrate to the newer `@rollup/plugin-typescript` which handles external
dependencies more
  gracefully.

  ## Related Issue(s)

  Fixes #30488
2025-06-26 14:38:50 +01:00
Jack Hsu 35d5074dde fix(angular): improve indexHtmlTransformer documentation (#31742)
This PR updates the description for `indexHtmlTransformer` for Angular
webpack browser executor to clarify what it accepts. Also adds an
example

<img width="1192" alt="Screenshot 2025-06-26 at 8 22 23 AM"
src="https://github.com/user-attachments/assets/883d9d91-21a9-4806-ae1d-336779b09061"
/>


<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30831
2025-06-26 09:10:01 -04:00
Jack Hsu 57405e6a22 fix(testing): correct Playwright grep documentation from glob to regex (#31743)
- Fixed documentation to clarify grep uses regex not glob patterns
- Updated examples to show proper regex usage
- Corrected both --grep and --grepInvert documentation

Fixes #30181
2025-06-26 09:09:46 -04:00
Colum Ferry eb03e22cb2 fix(vite): resolve outDir path correctly for nested monorepos (#31741)
## Current Behavior

The Vite build executor uses naive string manipulation to calculate the
output directory path, which fails in nested monorepo structures where
the workspace root and project root have different relative paths.

## Expected Behavior

The Vite build executor properly resolves the output directory path
using Node.js path utilities, ensuring correct path calculation
regardless of monorepo nesting structure.

## Related Issue(s)

  Fixes #31234
2025-06-26 13:36:39 +01:00
Colum Ferry 71d60a910d fix(react): add .js extensions to subpath imports in module federation templates (#31730)
## Current Behavior

  Module federation templates in React generators use subpath imports
  without explicit file extensions (e.g., @nx/rspack/app-plugin,
  @nx/module-federation/webpack). This causes compatibility issues with
  Node.js 24's native TypeScript support, which requires explicit file
  extensions for ESM package subpath imports.

  ## Expected Behavior

Module federation templates should include .js extensions on all subpath
   imports to ensure compatibility with Node.js 24 while maintaining
  backwards compatibility with earlier Node.js versions. The imports
  should be in the format @nx/rspack/app-plugin.js,
  @nx/module-federation/webpack.js, etc.

  ## Related Issue(s)

  Fixes #31448
2025-06-26 13:22:24 +01:00
Benjamin Cabanes 110318291e docs(nx-dev): update headers to reference "Nx Enterprise" (#31731)
Revised "Enterprise" references to "Nx Enterprise" across headers for consistency. Added a new link to "AI" in the documentation header.
2025-06-26 08:18:42 -04:00
Colum Ferry babf86a456 fix(angular): respect skipTsConfig option in library generator (#31738)
## Current Behavior

The Angular library generator ignores the `skipTsConfig` option and
always modifies the `tsconfig.base.json` file, even when users
explicitly set `skipTsConfig=true` to avoid TypeScript configuration
changes.

  ## Expected Behavior

When `skipTsConfig=true` is passed to the Angular library generator, the
`tsconfig.base.json` file should not be modified. Project-specific
tsconfig files should still be created as expected, but the
workspace-level TypeScript
   configuration should remain untouched.

  ## Related Issue(s)

  Fixes #31185
2025-06-26 12:18:41 +01:00
Colum Ferry 316c9cd651 fix(docs): add missing --project parameter to Angular service generation command (#31735)
The command `nx g @nx/angular:service
libs/shared/data-access-user/src/lib/user` was missing the required
`--project` parameter. Added `--project=data-access-user` to fix the
error "Required property 'project' is missing".

Fixes #31410

Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
2025-06-26 11:58:46 +01:00
MaxKless 03faab1ee7 docs(nx-dev): write blog post about autofix notifications in JetBrains (#31666)
Co-authored-by: Juri Strumpflohner <juri.strumpflohner@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-06-26 00:47:59 -07:00
Colum Ferry 8b6ad42244 fix(module-federation): restore support for relative URLs in module federation remotes (#31723)
## Current Behavior

Module federation configurations with relative URLs are broken due to PR
   #30615, which forced all remote URLs to be parsed as absolute URLs
  using `new URL()`. This breaking change prevents developers from using
relative URLs in their module federation setups, causing runtime errors
  when the application tries to load remote modules.

  ## Expected Behavior

  Module federation should support both relative and absolute URLs
  seamlessly:
  - Relative URLs should work as they did before, maintaining backward
  compatibility
  - Absolute URLs should continue to work with enhanced query parameter
  support
  - The URL processing should be consistent across all module federation
  helpers (Angular and React)

  ## Related Issue(s)

  Fixes #31538
2025-06-25 18:18:43 +01:00
Nicholas Cunningham 92e9133165 feat(graph): enhance migration state management and introduce migration stopping functionality. (#31626)
## Overview
This PR enhances the Migrate UI by adding a "Stop" button that allows
users to halt in-progress migrations at any point during execution.
It works in tandem with https://github.com/nrwl/nx-console/pull/2567

### Currently
When a migration is running and needs to be stopped for any reason:
- User accidentally triggered the migration
- Migration is taking longer than expected
- Changes are needed before completion

Users must wait for the migration to complete before using the available
"Undo" or "Skip" options.

### Expected
Users should be able to stop a currently running migration at any time
before it completes, providing immediate control over the migration
process.

### Key Features:

- Refactor guards to improve migration state checks and add conditions
for running and completing migrations.
- Update the state machine to handle new states for running, stopped,
and evaluating migrations.
- Implement logic to track running migrations and allow for stopping
them gracefully.
- Introduce a new process for running migrations in a separate child
process to support cancellation.
- Enhance metadata management to include stopped migrations and update
UI accordingly. (The UI is completely driven by the backend now aka Nx
Console)
- Add tests to cover new migration states and behaviours.
2025-06-25 11:11:52 -06:00
Jason Jean b7e73feb1d docs: clarify that gitignored files are excluded from inputs (#31594)
Add callout box to the inputs documentation explaining that .gitignored
files are automatically excluded from inputs and won't affect task hash
computation.

Fixes #31574

Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jason Jean <FrozenPandaz@users.noreply.github.com>
2025-06-25 12:06:55 -04:00
Jordan 39954181bc docs(core): add ThisDotLabs and Angular Architects to partners page (#31670)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
This adds new partners `Angular Architects` and `This Dot Labs`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-25 10:58:51 -04:00
Leosvel Pérez Espinosa 08b8e717ba fix(vite): fix the build command for the deps in the vite tsconfig paths plugin (#31729)
## Current Behavior

The `nxViteTsPaths` plugin determines the buildable libraries by
checking the existence of the following target:

```ts
process.env.NX_TASK_TARGET_TARGET === 'serve'
  ? 'build'
  : process.env.NX_TASK_TARGET_TARGET
```

But it later creates the command to build the dependencies to always run
the `process.env.NX_TASK_TARGET_TARGET` target. This is wrong and
results in trying to run the `serve` task for the dependencies when the
root task is `serve`.

## Expected Behavior

The `nxViteTsPaths` plugin should use the same task name to determine
the buildable libraries and run the command to build the dependencies.

## Related Issue(s)

Fixes #31333
2025-06-25 16:58:16 +02:00
Isaac Mann e4694efeb8 docs(core): remove june webinar 2025-06-25 15:11:30 +02:00
Colum Ferry c706a4e89e fix(webpack): respect user config when applying node target #30937 (#31700)
## Current Behavior
When a user sets `target: node` in their Webpack or Rspack config,
`NxAppRspackPlugin` and `NxAppWebpackPlugin` do not respect additional
user config for `library.target`.

## Expected Behavior
The user config should be respected.

## Related Issue(s)

Fixes #30937
2025-06-25 11:50:54 +01:00
Juri 25521f89ab docs(nx-dev): add blog post about being able to query CI 2025-06-25 12:14:26 +02:00
Juri d347d976ad fix(nx-dev): update sorting of pinned posts 2025-06-25 11:59:24 +02:00
Philip Fulcher fe687a003c docs(nx-dev): add creep vulnerability article (#31710) 2025-06-24 17:39:31 -06:00
Philip Fulcher c01d65e3f0 docs(nx-dev): add polygraph launch article (#31696)
https://nx-dev-git-philip-polygraph-release-article-nrwl.vercel.app/blog/nx-cloud-introducing-polygraph

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-06-24 13:16:49 -06:00
Jack Hsu 13da36e63e fix(nextjs): use next/jest.js for Jest configuration to support modern JSX transform (#31705)
This PR fixes and issue with Next.js + Jest to remove warnings about
outdated transforms.

## Changes Made

- Updated Next.js application generator to use next/jest.js instead of
manual babel-jest configuration
- Updated Next.js library generator to use the same modern configuration
approach
- Added e2e tests to verify the new Jest configuration works correctly
- Kept same CJS vs ESM logic for JS vs TS config (existing behavior)

## Current Behavior

When using React 19 with Next.js applications in Nx, developers receive
a warning about outdated JSX transform because the Jest configuration
uses
manual babel-jest setup instead of Next.js's recommended approach.

## Expected Behavior

Next.js applications and libraries generated by Nx should use
next/jest.js configuration which automatically handles the modern JSX
transform
(runtime: 'automatic') and provides proper Jest setup for Next.js
projects without warnings.

## Related Issue(s)

Fixes #27900
2025-06-24 15:09:16 -04:00
Jack Hsu 819abe9337 docs(js): update tsconfig examples so extend from the root properly to remove confusion (#31707)
## Current Behavior

  Documentation examples show `tsconfig.lib.json` and
  `tsconfig.spec.json` extending from `./tsconfig.json`.

  ## Expected Behavior

  Examples should extend directly from `../../tsconfig.base.json` to
  match Nx's recommended TypeScript configuration structure.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31704
2025-06-24 14:03:39 -04:00
Colum Ferry 52af4238eb fix(nuxt): fix TypeScript configuration chain for Nuxt components and composables (#31701)
- Modified create-ts-config.ts to make tsconfig.json extend
./.nuxt/tsconfig.json instead of root tsconfig
- Updated nuxt.config.ts template to make .nuxt/tsconfig.json extend the
root tsconfig with correct relative path
- Added relativePathToRootTsConfig parameter to template generation
- Updated test snapshots to reflect the new configuration chain

This ensures IDEs can properly recognize Nuxt components, composables,
and auto-imports by establishing the correct TypeScript configuration
inheritance chain: tsconfig.app.json → tsconfig.json →
.nuxt/tsconfig.json → tsconfig.base.json

## Related Issues
#30742

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-24 17:51:01 +01:00
Colum Ferry 82ddc1abfc fix(module-federation): ensure manifest path not prepended with workspace root (#31698)
## Current Behavior

When users provide an absolute path for the Module Federation manifest
file
that already includes the workspace root, the plugin incorrectly
prepends the
  workspace root again, resulting in an invalid path like
  `/workspace/root/workspace/root/path/to/manifest.json`.

  ## Expected Behavior

The plugin should detect if the provided manifest file path already
starts with
the workspace root and avoid prepending it again. This allows users to
provide
either relative or absolute paths for the manifest file, and both will
work
  correctly.

  ## Related Issue(s)

  Fixes #31524
2025-06-24 14:47:20 +01:00
Julien Marcou 014d774bff feat(module-federation): bump @module-federation/enhanced version to 0.15.0 to fix vulnerability (#30806)
## Current Behavior

`@module-federation/enhanced` v0.9.0 has a dependency to
`@module-federation/dts-plugin` v0.9.0, which has a dependency to `koa`
v2.15.4, which has a [security vulnerability
](https://github.com/koajs/koa/security/advisories/GHSA-x2rg-q646-7m2v)

And because `@module-federation/enhanced` is pinned with `^0.9.0` it
won't automatically update it to a version greater than `0.9.x`

## Expected Behavior

Until `@module-federation/enhanced` releases a v1, it needs to be
manually updated when we want to benefit from a newer "minor" version.

Pinning `@module-federation/enhanced` to `^0.15.0` allows to benefit
from the latest release and security fix.

## Related Issue(s)

Fixes #30502
Fixes #30748

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-06-24 14:30:15 +01:00
Colum Ferry e703e0bb3b feat(js): add prune-lockfile executor (#31557)
## Current Behavior
In the new TS Soln Setup with Package Manager Workspaces, there is
currently no builtin method for creating a pruned lockfile that is
agnostic across bundlers and compilers.
This is problematic for apps that must be containerized.

## Expected Behavior
Add a new `@nx/js:prune-lockfile` executor that can be used to produce a
pruned lockfile in the build artifact output directory, ready for
containerization.

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Colum Ferry <Coly010@users.noreply.github.com>
2025-06-24 14:10:34 +01:00
Juri ebb1716a99 fix(nx-dev): pinning logic on blog entry page 2025-06-24 10:57:37 +02:00
Caleb Ukle 0ef88573b2 docs(nx-cloud): initial polygraph docs (#31657)
add docs over polygraph features

https://nx-dev-git-docs-polygraph-nrwl.vercel.app/ci/recipes/enterprise/polygraph

---------

Co-authored-by: Mike Hartington <mhartington@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Mike Hartington <mikehartington@gmail.com>
2025-06-23 18:23:20 -04:00
Benjamin Cabanes a74bbaf32c docs(nx-dev): add Nx Labs page (#31679)
Created a new contact page for Nx Labs to highlight services and provide a form for inquiries. Updated the professional services section in the header menu to include a link to this page.
2025-06-23 15:09:01 -04:00
MaxKless a8cd1c77e3 chore(repo): add .cursor/mcp.json to gitignore (#31691)
people use it locally with different ports so we should just add it to
gitignore
2025-06-23 15:25:09 +00:00
Benjamin Cabanes 4e55020b1b docs(nx-dev): update ai page (#31669)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-06-23 13:42:11 +00:00
Juri 755de341a4 docs(nx-dev): add self-healing CI blog post 2025-06-23 14:53:57 +02:00
Jonathan Gelin fd31fa633d fix(js): resolve asset paths relative to workspace root instead of cwd (#31664)
## Description

This PR fixes an issue where asset files copied during a build using the
`@nx/js:tsc` executor are placed in the wrong directory depending on the
current working directory from which the `nx` command is executed.

This behavior becomes particularly problematic in scenarios like release
workflows that rely on `preVersionCommand` to run E2E tests. For
instance, when using tools like Jest from the root of an E2E project,
scripts like `start-local-registry` may trigger a build and run the
`preVersionCommand`. However, instead of placing assets in the expected
`dist` folder of the project, they are incorrectly copied relative to
the E2E folder’s location.


## Reproduction Steps

1. Create a new Nx workspace:

   ```bash
npx --yes create-nx-workspace assets-issue --preset=ts --no-interactive
   cd assets-issue
   ```

2. Add the Nx Plugin package:

   ```bash
   nx add @nx/plugin
   ```

3. Generate a new plugin:

   ```bash
nx g @nx/plugin:plugin packages/my-plugin --linter eslint
--unitTestRunner jest
   ```

4. Add a generator to the plugin:

   ```bash
nx g @nx/plugin:generator packages/my-plugin/src/generators/my-generator
   ```

5. Build the plugin from the workspace root:

   ```bash
   nx build my-plugin
   ```

    Assets are copied correctly:

   ```
   dist/packages/my-plugin/generators/files/src/index.ts.template
   dist/packages/my-plugin/generators/schema.json
   dist/packages/my-plugin/generators/schema.d.ts
   ```

6. Now build the same project from a nested folder:

   ```bash
   mkdir e2e && cd e2e
   nx build my-plugin --skip-nx-cache
   ```

    Assets are copied relative to the current folder:

   ```
   e2e/packages/my-plugin/dist/generators/files/src/index.ts.template
   e2e/packages/my-plugin/dist/generators/schema.json
   e2e/packages/my-plugin/dist/generators/schema.d.ts
   ```

## Expected Behavior

The build output—especially copied assets—should always respect the
project’s `outputPath` configuration regardless of where the `nx`
command is invoked from. The behavior should be consistent and **not
influenced by `process.cwd()`**.
2025-06-23 08:42:59 +02:00
Jack Hsu 57e70d0e91 feat(js): deprecate simpleName option in library generator (#31673)
The simpleName option is no longer useful as we've moved to using
options "as provided" without transformation. Users should provide the
exact name, directory, and import path they want to use.

## Changes
- Add x-deprecated to schema.json marking for removal in Nx 22
- Add runtime warning when simpleName is used


🤖 Generated with [Claude Code](https://claude.ai/code)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Users are confused with `--simpleName` with using `--name` AND
`--directory`

## Expected Behavior
We should tell users that only `--name` should be used.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #29508

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-20 21:39:55 -04:00
Benjamin Cabanes 8026885128 docs(nx-dev): fix typo (#31677)
Update callout type from 'warn' to 'warning' in CVE blog post.
2025-06-20 20:59:15 +00:00
Nicholas Cunningham df75799ed7 fix(js): failing e2e test due to dependency (#31676)
This PR updates our `e2e-js` test to include dependencies for all
package managers and not just pnpm.

E2E Matrix for `e2e-js` is now passing:
https://github.com/nrwl/nx/actions/runs/15786673606/job/44504580439
2025-06-20 20:28:49 +00:00
Jack Hsu 1f493bf251 docs(react): update tutorial for ESLint flat config format (#31672)
Update React monorepo tutorial:
- Fix reference to .eslintrc.base.json (now eslint.config.mjs)

🤖 Generated with [Claude Code](https://claude.ai/code)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30199

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-20 16:21:35 -04:00
Jack Hsu c452821bfa docs(nextjs): fix incorrect build output path and vite.config.ts mention (#31671)
## Changes

- Update build output path from {workspaceRoot}/dist/{projectRoot} to
.next folder
- Replace vite.config.ts example with next.config.js distDir
configuration
- Add note about legacy executor configuration vs inferred tasks
- Clarify that sourceRoot may not exist in all Next.js projects


🤖 Generated with [Claude Code](https://claude.ai/code)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
The docs for Next.js says output can be configured in `vite.config.ts`,
which is nonsense. It also mentions the output directory that is only
applicable in the legacy setup.

## Expected Behavior
Fix configuration example, and show different ways to configure output
(both new crystal setup, and legacy executor-based setup).

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31037

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-20 16:21:31 -04:00
Benjamin Cabanes acae2eca89 docs(nx-dev): enhance AI feature descriptions & update links (#31659)
Refined AI features including new capabilities (self-healing CI, AI data analysis), updated descriptions, and rearranged feature order. Adjusted section ID for CI security and added links to highlight AI integrations in pricing plans.
2025-06-20 20:07:01 +00:00
Jack Hsu 55251ca0bf fix(react): do not set styles.tailwind for executor options for projects not using inferred targets (#31667)
This PR fixes an issue when you use React with Webpack/Rspack, and
aren't using `@nx/webpack/plugin` or `@nx/rspack/plugin`.



<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Project configuration contains this for build options:

```
"styles": ["src/myapp/styles.tailwind"]
```

## Expected Behavior


It shoud be :

```
"styles": ["src/myapp/styles.css"]
```

Which is what we actually generate.
2025-06-20 15:02:27 -04:00
Leosvel Pérez Espinosa 9e8c1a1062 cleanup(angular): set target version to v22 for the decorate cli script deprecation warning (#31170)
## Current Behavior

The deprecation warning for the old script to decorate the Angular CLI
doesn't state the version in which it will be removed. This was
intentional to allow sufficient time for users to migrate away from it.

## Expected Behavior

The deprecation warning for the old script to decorate the Angular CLI
should state that it will be removed in Nx v22. It has been a long time
since it was deprecated, and it should have provided more than enough
time for users to move away from it.

## Related Issue(s)

Fixes #
2025-06-20 09:48:50 -04:00
Leosvel Pérez Espinosa 617b8d49cb fix(testing): do not update component configuration in cypress set-inject-document-domain migration (#31614)
## Current Behavior

The `set-inject-document-domain` migration updates the component
configuration. This is incorrect since the `inject-document-domain` is
not a property supported by the component configuration.

## Expected Behavior

The `set-inject-document-domain` migration should not update the
component configuration.

## Related Issue(s)

Fixes #31610
2025-06-20 09:45:36 -04:00
Leosvel Pérez Espinosa 6b2175bfcb fix(core): do not auto-exit tui when there are multiple failed tasks (#31631)
## Current Behavior

When the user hasn't interacted with the TUI and has not disabled the
auto-exit functionality, it will always auto-exit regardless of the
number of failed tasks.

## Expected Behavior

When the user hasn't interacted with the TUI and has not disabled the
auto-exit functionality, it should not auto-exit if there are multiple
failed tasks. Additionally, as long as no terminal output panes are open
(e.g., the run one command will always display the initiating task
terminal pane), it should focus and open the first failed task.

If all tasks succeed or there's only one failure, it should continue to
auto-exit.
2025-06-20 10:12:38 +02:00
Victor Savkin bd898d3220 fix(nx-dev): small adjustment to the blog post 2025-06-19 19:18:47 -04:00
Juri 9e9345b5e1 docs(nx-dev): new blog post on how to use sync generators for Tailwind globs 2025-06-20 00:15:08 +02:00
James Henry 4c7586c82d chore(repo): migrate to conformance v3 (#31475) 2025-06-19 21:37:16 +00:00
Jack Hsu ec457f72df chore(repo): add raw-docs (#31640)
This PR adds `raw-docs` integration. See here for more details:
https://github.com/nrwl/raw-docs
2025-06-19 12:53:01 -04:00
Juri 460d2114dd docs(nx-cloud): embed course widget to give full course more visibility 2025-06-19 14:25:00 +02:00
Jack Hsu 64d0294e4e docs(core): clarify package.json vs project.json usage and capabilities (#31642)
Adds comprehensive explanation that both files support executors and all
Nx features through the 'nx' property in package.json. Clarifies that
project.json is optional.

Preview:
https://nx-dev-git-issues-28715-nrwl.vercel.app/reference/project-configuration#project-level-configuration-files

## Current Behavior

The documentation for project configuration does not clearly explain
that both package.json and project.json support the same Nx features,
including executors.

## Expected Behavior

The documentation now clearly states that:
- Both package.json and project.json support targets through the "nx"
property in package.json
- The choice between the two is primarily a matter of preference
- Includes an updated example showing how to use `nx.targets` in
package.json

## Related Issue(s)

Fixes #28715
2025-06-19 08:23:15 -04:00
Jason Jean 29b14b1bd3 fix(core): prevent duplicate nx cloud logs from global and local nx invocations (#31641)
## Current Behavior

When Nx is invoked from a global install, both the global and local
versions register process exit handlers that flush captured logs. This
causes Nx Cloud logs to be displayed twice - once from the global
installation and once from the local installation.

## Expected Behavior

Only the local Nx installation should handle log flushing, preventing
duplicate log output. The process exit handler is moved from the global
entry point (nx.ts) to the local entry point (init-local.ts) so that log
flushing only occurs once.

## Related Issue(s)

This change requires users to update their globally installed Nx to
fully resolve the duplicate logging issue, as the fix is now in the
local version that gets invoked.
2025-06-18 14:23:43 -04:00
Benjamin Cabanes 1c8f964c33 docs(nx-dev): add CVE reference on security (#31627)
Improved the clarity of caching risks, added detailed explanations on CREEP vulnerability, and linked to the CVE-2025-36852 publication.
2025-06-18 14:17:25 -04:00
Benjamin Cabanes 9b756bef7e docs(nx-dev): add CVE reference on remote cache (#31639)
Improved the clarity of caching risks, added detailed explanations on CREEP vulnerability, and linked to the CVE-2025-36852 publication.
2025-06-18 14:17:10 -04:00
Leosvel Pérez Espinosa 1a9405b0bc chore(repo): fix the regex to validate commits (#31630)
## Current Behavior

The string regex the script uses to validate commits is not correctly
escaped.

## Expected Behavior

The string regex the script uses to validate commits should be correctly
escaped.
2025-06-18 13:36:14 -04:00
Mike Hartington db6e0d1217 docs(misc): update cve blog (#31638)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-18 11:49:28 -04:00
Juri Strumpflohner fa7d37e5ed feat(core): improve message when workspace is not detected (#31632)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Adds the path to the terminal output s.t. you can at least debug what's
going on


![image](https://github.com/user-attachments/assets/2aed9a24-d88d-4e54-8581-94210979ded4)


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-18 10:34:42 -04:00
Jack Hsu 84796d011e docs(misc): add titles to intro/overview pages (#31636)
## Current Behavior

- Documentation pages under "technologies" and "core-api" sections with
"introduction"/"overview" IDs lack H1 titles after front matter
- Some remote caching package links point to parent sections instead of
overview pages

## Expected Behavior

- All affected documentation pages should have H1 titles for consistency
- Links should point directly to overview pages

## Related Issue(s)

Fixes #

## Changes Made

### 1. Updated Remote Caching Links (commit fae9055f8c)

Updated links in 3 files to point directly to overview pages:
- `docs/blog/2025-01-06-nx-update-20-3.md`
- `docs/shared/deprecated/custom-tasks-runner.md`
- `docs/shared/recipes/running-tasks/self-hosted-caching.md`

Changed links from:
- `/reference/core-api/azure-cache` →
`/reference/core-api/azure-cache/overview`
- `/reference/core-api/gcs-cache` →
`/reference/core-api/gcs-cache/overview`
- `/reference/core-api/s3-cache` →
`/reference/core-api/s3-cache/overview`
- `/reference/core-api/shared-fs-cache` →
`/reference/core-api/shared-fs-cache/overview`

### 2. Added H1 Titles to Documentation Pages

Added H1 titles to 29 documentation files that were missing them:

#### Core API Overview Pages (6 files)
- `docs/shared/packages/azure-cache/azure-cache-plugin.md` → `#
@nx/azure-cache`
- `docs/shared/packages/conformance/conformance-plugin.md` → `#
@nx/conformance`
- `docs/shared/packages/gcs-cache/gcs-cache-plugin.md` → `#
@nx/gcs-cache`
- `docs/shared/packages/owners/owners-plugin.md` → `# @nx/owners`
- `docs/shared/packages/s3-cache/s3-cache-plugin.md` → `# @nx/s3-cache`
- `docs/shared/packages/shared-fs-cache/shared-fs-cache-plugin.md` → `#
@nx/shared-fs-cache`

#### Technology Introduction Pages (23 files)
- `docs/shared/packages/angular/angular-plugin.md` → `# @nx/angular`
- `docs/shared/packages/esbuild/esbuild-plugin.md` → `# @nx/esbuild`
- `docs/shared/packages/rspack/rspack-plugin.md` → `# @nx/rspack`
- `docs/shared/packages/vite/vite-plugin.md` → `# @nx/vite`
- `docs/shared/packages/webpack/plugin-overview.md` → `# @nx/webpack`
- `docs/shared/packages/eslint/eslint.md` → `# @nx/eslint`
- `docs/shared/packages/gradle/gradle-plugin.md` → `# @nx/gradle`
- `docs/shared/packages/express/express-plugin.md` → `# @nx/express`
- `docs/shared/packages/node/node-plugin.md` → `# @nx/node`
- `docs/shared/packages/nest/nest-plugin.md` → `# @nx/nest`
- `docs/shared/packages/expo/expo-plugin.md` → `# @nx/expo`
- `docs/shared/packages/react/react-plugin.md` → `# @nx/react`
- `docs/shared/packages/next/plugin-overview.md` → `# @nx/next`
- `docs/shared/packages/react-native/react-native-plugin.md` → `#
@nx/react-native`
- `docs/shared/packages/remix/remix-plugin.md` → `# @nx/remix`
- `docs/shared/packages/cypress/cypress-plugin.md` → `# @nx/cypress`
- `docs/shared/packages/detox/detox-plugin.md` → `# @nx/detox`
- `docs/shared/packages/jest/jest-plugin.md` → `# @nx/jest`
- `docs/shared/packages/playwright/playwright-plugin.md` → `#
@nx/playwright`
- `docs/shared/packages/storybook/plugin-overview.md` → `#
@nx/storybook`
- `docs/shared/packages/js/js-plugin.md` → `# @nx/js`
- `docs/shared/packages/vue/vue-plugin.md` → `# @nx/vue`
- `docs/shared/packages/nuxt/nuxt-plugin.md` → `# @nx/nuxt`

Note: The Angular Rspack introduction page
(`docs/shared/guides/angular-rspack/introduction.md`) already had an
appropriate H1
title "# Introduction" and was left unchanged.

All changes improve documentation consistency and navigation by ensuring
proper titles and direct links to overview pages.
2025-06-18 09:50:44 -04:00
Colum Ferry 06089663c6 feat(js): add copy-workspace-modules executor (#31545)
## Current Behavior

When building applications that depend on workspace libraries for
deployment (particularly in containerized environments like Docker),
developers must manually handle copying workspace dependencies and
updating package.json references.

This creates friction when trying to deploy applications that consume
workspace libraries, as the build output doesn't contain the necessary
workspace dependencies and the package.json still references them with
`workspace:` protocol which doesn't work outside the workspace context.

  ## Expected Behavior

With the new `@nx/js:copy-workspace-modules` executor, developers can
automatically prepare their built applications for deployment by:

1. **Automatically copying workspace dependencies**: The executor scans
the application's package.json for workspace dependencies (those with
`workspace:` or `file:` version specifiers) and copies the source code
of these dependencies into a `workspace_modules` directory within the
build output

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-06-18 13:50:01 +01:00
Leosvel Pérez Espinosa e1dfe6ea09 fix(angular): handle inferred projects without project configuration files in migrations (#31633)
## Current Behavior

Some Angular migrations collect the Angular projects from the project
graph using the dependencies information. When reading the project
configuration for those projects, it can throw an error if trying to do
it for a completely inferred project (it doesn't have a project
configuration file).

## Expected Behavior

The Angular migrations collecting Angular projects from the project
graph using the dependencies information should gracefully handle
projects that were completely inferred when trying to read the project
configuration.

In fact, the current migrations didn't need to read the project
configuration and could use the project graph information directly, so
the call to read the project configuration was removed.

## Related Issue(s)

Fixes #31607
2025-06-18 12:31:48 +02:00
bkp-ttd 9406d2bfdb fix(linter): respect the --quiet option when running with --fix (#31403)
## Current Behavior

`nx run lint --quiet --fix` doesn't respect `--quiet` and fixes all
issues, even silenced ones. This is different from how `eslint --quiet
--fix` behaves.

## Expected Behavior

`nx run lint --quiet --fix` should only fix issues that aren't silenced
by `--quiet`, like `eslint` does

## Related Issue(s)

Fixes #31401
2025-06-18 09:33:02 +00:00
Jonathan Gelin 578405862d feat(js): support publishing with registryConfigKey when pnpm >=9.15.7 <10.0.0 || >=10.5.0 (#31622) 2025-06-18 09:16:59 +00:00
Juri 5c2fdc9e31 docs(devkit): callout to disable the daemon when developing plugins 2025-06-17 22:26:52 +02:00
Nicholas Cunningham 1ef43d0b95 fix(core): ensure destination directories are created before copying files (#31624)
This PR updates the `copy-local-native.js` script to ensure destination
directories are created before copying files.
2025-06-17 13:50:29 -04:00
Jack Hsu 11691d141a docs(core): add NX_TUI environment variables documentation (#31619)
This PR added two TUI environment variables to the reference page:
- NX_TUI to enabled/disable
- NX_TUI_AUTO_EXIT to control auto-exit behavior

## Current Behavior

The environment variables documentation does not include the new
Terminal UI (TUI) environment variables `NX_TUI` and `NX_TUI_AUTO_EXIT`
that were recently added to control the interactive terminal interface
for task
execution.

## Expected Behavior

The documentation now includes comprehensive information about the TUI
environment variables:
- `NX_TUI`: Controls whether the Terminal UI is enabled or disabled for
running tasks
- `NX_TUI_AUTO_EXIT`: Controls the auto-exit behavior of the TUI after
tasks complete, supporting boolean values or a number for countdown
seconds

## Related Issue(s)

Fixes #31111
2025-06-17 13:27:37 -04:00
Emily Xiong 3aa546ffe3 fix(gradle): add build-ci target even if atomized=false (#31537)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
when atomized=false, it does not generate build-ci and check-ci targets

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- when atomized=false, it should still generate build-ci and check-ci
targets
- upgrade dev.nx.gradle.project-graph version to 0.1.2

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-17 13:06:24 -04:00
Jack Hsu b89ca32a01 docs(ci): add Bun to supported package managers list (#31618)
This PR adds bun to list of package managers that can be used on the CI
deployment page.

Fixes #31431

##  Current Behavior

The CI deployment documentation at
https://nx.dev/ci/recipes/other/ci-deployment only mentions npm, yarn,
and pnpm as supported package managers. However, Bun is actually
supported by Nx as shown in the PackageManager type
   definition which includes 'bun' as a valid option.

##  Expected Behavior

The documentation should accurately reflect all supported package
managers, including Bun. Users should be aware that they can use Bun as
their package manager when following the CI deployment recipes.

## Related Issue(s)

Fixes #31431
2025-06-17 12:59:55 -04:00
Emily Xiong 7f349fb6bf fix(gradle): fix gradle on windows (#31595)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
fix to run gradle on windows
./gradlew command is only macos

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
use @nx/gradle:gradle executor instead of command ./gradlew

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-17 11:35:01 -04:00
Leosvel Pérez Espinosa d0d62846a2 fix(core): show the correct content in the tui terminal pane for skipped tasks (#31559)
## Current Behavior

When a task is skipped (e.g. some dep(s) failed), the terminal pane is
completely empty. If you navigate to another task and see its output and
navigate back to the skipped task, then you see the correct title and
borders but the output is wrong: it shows the output of the previous
task.


![image](https://github.com/user-attachments/assets/8d304019-a17e-4a5a-9369-30fb4025aeb3)


![image](https://github.com/user-attachments/assets/c43b9019-2438-46a1-8ebb-cf28c662afa6)

## Expected Behavior

The TUI terminal pane should be correctly rendered for skipped tasks. It
should correctly show the title, border and content (`Task was
skipped`).


![image](https://github.com/user-attachments/assets/f4f80b39-79c4-41c8-a2e5-cfdcb46030fa)
2025-06-17 09:45:15 -04:00
Akos Komuves 17507ad023 docs(core): update package names for run-task feature (#31617)
## Summary

This pull request updates the documentation to reflect changes in
project names for task dependencies. The documentation was referring to
the `modules-shared-ui` and `modules-products` packages on the chart,
but these packages are called differently.


![image](https://github.com/user-attachments/assets/c924ad1f-f13f-4b6c-9f0e-a95317e73987)
2025-06-17 13:22:38 +00:00
Caleb Ukle b97222ded4 docs(nx-dev): fix issue with related docs not loading (#31605)
make sure new paths work for related docs resolution
include related docs for 'legacy' fallback page logic


## before: 
on the `/features/manage-releases` route
![WKMac
2025-06-16T15-37-13](https://github.com/user-attachments/assets/570493bb-571c-47fb-9dd8-dae6b138f951)

on the `/ci/features/affected` route
![WKMac
2025-06-16T15-37-53](https://github.com/user-attachments/assets/f269c6fe-01ec-43a4-a98a-37448d486a54)


## after:
on the `/features/manage-releases` route
![WKMac
2025-06-16T15-38-43](https://github.com/user-attachments/assets/98ed4e98-ea99-485b-b09e-82079bd88fdd)

on the `/ci/features/affected` route
![WKMac
2025-06-16T15-36-17](https://github.com/user-attachments/assets/31bf3be2-3104-4c3c-bdbf-c8701e99ce10)

rename recipes to guides for the related docs card
![WKMac
2025-06-16T16-01-05](https://github.com/user-attachments/assets/4fd6dcf9-dd02-4042-9102-b1d9e72e3866)
2025-06-16 12:03:28 -05:00
Leosvel Pérez Espinosa 87234da015 docs(misc): fix broken links in tutorials (#31603)
## Current Behavior

Some links in the Angular and React tutorials are broken.

## Expected Behavior

The links in the Angular and React tutorials work correctly.

## Related Issue(s)

Fixes #31601
2025-06-16 14:23:58 +02:00
Leosvel Pérez Espinosa bf9c677e79 fix(angular): fix import from ng-packagr (#31600)
## Current Behavior

Using the `ng-packagr` executors in an Angular version lower than v20
results in an error due to a bad import.

## Expected Behavior

The `ng-packagr` executors should work correctly regardless of the
Angular version used.

## Related Issue(s)

Fixes #31597
2025-06-16 10:20:13 +02:00
Philip Fulcher db86a355c6 docs(nx-dev): add 21.2 release article (#31585)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-06-13 17:03:52 +00:00
Benjamin Cabanes 363058ee54 docs(nx-dev): add support for 'announcement' type callout (#31583)
Extended the `Callout` component and schema to support a new 'announcement' type with corresponding styles and icon. Updated documentation example for the new type.
2025-06-13 11:55:49 -04:00
Juri Strumpflohner 7c5faba41b docs(devkit): fix instructions for creating sync generators (#31576)
Co-authored-by: Caleb Ukle <caleb@nrwl.io>
2025-06-13 14:31:55 +00:00
Jack Hsu 40cf21b10c feat(react): support port option for react app generator (#31552)
This PR adds the ability to set the port of the React application when
using the generator.

e.g.

```shell
npx nx g @nx/react:app --port 8080
```

This is useful when generating multiple apps and then running them in
parallel.
2025-06-13 08:53:14 -04:00
Juri Strumpflohner 6bc4ef47ec feat(nx-dev): read description from markdown frontmatter for index pages (#31566)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior

Index pages read from the map.json description which is missing for a
lot of entries.

<img width="853" alt="image"
src="https://github.com/user-attachments/assets/8c0db9a2-d293-482d-8597-647cda47cc93"
/>


## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The new logic

- checks the corresponding markdown file `description` property which is
also used for the HTML meta description tags
- falls back to the `map.json` description

<img width="809" alt="image"
src="https://github.com/user-attachments/assets/716358f0-bab9-4bd4-97b2-b31fa151ebe0"
/>



## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-13 08:52:53 -04:00
Juri d2d18a6cb4 docs(core): update getting started pages 2025-06-13 13:39:21 +02:00
Miguel 8ef39c1140 docs(nx-dev): Fix typo in 2025-01-27-project-references (#31571)
Small typo in docs :)
2025-06-13 11:02:09 +02:00
Rares Matei 18155f4574 docs(nx-cloud): update release notes (#31563)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-12 12:01:36 -05:00
Jack Hsu 51dced2469 docs(misc): update getSchemaViewModel to return new API path rather than /nx-api/:plugin (#31561)
This PR updates pages like
`/technologies/typescript/api/executors/verdaccio`, such that the
backlink to the API index is correct. Even though we redirect `/nx-api`
pages, the Next.js pages router does not respect them and users see 404
instead.
2025-06-12 12:28:47 -04:00
Caleb Ukle 5ac1c08d34 docs(nx-dev): add CVE-2025-36852 ref post (#31560) 2025-06-12 11:00:05 -05:00
Nicholas Cunningham 4e187e1c35 fix(core): update Node.js version to 22.16.0 since the rust-docker-lts version is not updated (#31547)
This PR updates the Nodejs version installed on our docker images
contained in the publish script to be consistent with the Nx repository
Node compatibility version.

The current Nodejs version being pulled from the docker image is Node
v18 but our repository requires Node v20.19.0.

A test run can be found here:
https://github.com/nrwl/nx/actions/runs/15593332649
2025-06-12 11:36:20 -04:00
Ashkan 8ddd697a07 fix(bundling): correctly handle .cjs.js .mjs.js in rollup for type definitions (#29366)
…le extensions for type definitions.

Updated the Rollup plugin's logic for generating type definition files
to ensure compatibility with additional file extensions, including
.cjs.js and .mjs.js.

This change improves the handling of entry points and ensures that
corresponding .d.ts files are correctly named and emitted in all
supported scenarios.

Added a comprehensive test case to validate the new behavior.

closed #29308

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-06-11 15:06:49 +01:00
Nicholas Cunningham ec0eda513d fix(repo): MacOS failures in our E2E Tests (#31528)
This PR modifies the populate-local-registry-storage inputs to
invalidate the cache when the native task is updated (which includes
OS/architecture information).

This change addresses MacOS failures we've been encountering in our
nightly GitHub Actions runs. The issue stems from incorrect cache
restoration when running multiple OS and Node.js version combinations,
which explains why native modules were consistently missing in most
MacOS tests.

Here is the result: https://github.com/nrwl/nx/actions/runs/15562011534
2025-06-10 15:41:01 -04:00
Caleb Ukle 001c7a1dde docs(core): add port conflict resolution guidance for multiple apps (#31509)
## Current Behavior

Docs do not callout potential port conflict issues with running e2e in
parallel

## Expected Behavior

Docs mention how to avoid parallel port collisions

## Related Issue(s)


Fixes #
2025-06-10 15:40:04 -04:00
Jason Jean c3c9ba39b3 fix(core): simplify Nx Console installation prompt (#31532)
## Current Behavior

The Nx Console installation prompt has verbose and redundant wording
that makes the message unclear.

## Expected Behavior

The prompt is simplified and more concise, focusing on the key benefits
of installing Nx Console while being more direct about what users will
gain.

## Related Issue(s)

This change improves the user experience when prompted to install Nx
Console.
2025-06-10 19:10:02 +00:00
Jack Hsu 28b48ad1f3 docs(misc): update URls that should point to intro pages rather than API index pages (#31531)
This PR fixes an issue introduced when we removed `/nx-api` pages:
https://github.com/nrwl/nx/pull/31453.

Most of the old `/nx-api/<plugin>` URLs should now go to
`/technologies/<plugin>/introduction`, since those pages contain what
was on the previous "overview" pages.

The only exception are places where we explicitly link to
`.../api/{generators,executors,migrations}` URLs, and the following
three blog posts that we want users to land on the API index.

-
https://github.com/nrwl/nx/blob/master/docs/blog/2022-03-29-the-react-cli-you-always-wanted-but-didnt-know-about.md?plain=1#L132
(https://nx.dev/blog/the-react-cli-you-always-wanted-but-didnt-know-about)
-
https://github.com/nrwl/nx/blob/master/docs/blog/2022-04-08-what-is-new-in-nx-13-10.md?plain=1#L245
(https://nx.dev/blog/what-is-new-in-nx-13-10)
-
https://github.com/nrwl/nx/blob/master/docs/blog/2022-05-02-nx-v14-is-out-here-is-all-you-need-to-know.md?plain=1#L253
(https://nx.dev/blog/nx-v14-is-out-here-is-all-you-need-to-know)
2025-06-10 15:08:29 -04:00
Jason Jean df4f1363f7 fix(core): scope native logging to nx module by default (#31530)
## Current Behavior

The native logging is currently set to a global 'info' level, which can
produce verbose output that may not be relevant to users.

## Expected Behavior

Native logging should be scoped to the 'nx::native' module by default
with 'info' level, reducing noise while still allowing users to control
logging verbosity through the `NX_NATIVE_LOGGING` environment variable.

## Related Issue(s)

This improves the developer experience by providing more focused logging
output and reduces unnecessary verbosity in the console.

Fixes https://github.com/nrwl/nx/issues/31518
2025-06-10 13:43:38 -04:00
Emily Xiong 7a53477adc fix(gradle): fix gradle test running gaps (#31313)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
- for the atomized test, currenly, its testClassName is just the 1st
class name in the file

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- upgrade gradle to latest version from 8.13 to 8.14
- for test task, exclude all its depends on tasks
  - it currently only exclude its direct depends on, its children
- now it will go down the dependency tree and exclude all of its depends
on, its children and grandchildren
- for the atomized test target, its testClassName will be the full
package name
- e.g.
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfigurationCustomObjectMapperProviderTest
   - add logics to handle nested class
   - exclude private class name
<img width="1081" alt="Screenshot 2025-06-06 at 2 53 39 PM"
src="https://github.com/user-attachments/assets/285792fb-f098-4511-85dc-ee1263d75929"
/>
- add build-ci target
<img width="1140" alt="Screenshot 2025-06-10 at 10 21 06 AM"
src="https://github.com/user-attachments/assets/25db4a3e-2794-4654-9a95-1b66d229340b"
/>


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-10 13:23:09 -04:00
Colum Ferry 8daad98992 chore(node): refactor application generator for more clarity (#31523)
## Current Behavior

The Node.js application generator
(`packages/node/src/generators/application/application.ts`) is
implemented as a single large file containing ~469 lines of code. All
generator logic is mixed together in one file including:

- Option normalization and validation
- Project configuration creation  
- File generation
- Build/serve target setup
- Dependency management
- ESLint configuration
- Proxy setup

This makes the code harder to maintain, test, and understand as the file
handles multiple responsibilities.

## Expected Behavior

The generator is now refactored into smaller, focused modules organized
in a `lib/` directory:

- `normalize-options.ts` - handles option normalization and validation
- `normalized-schema.ts` - defines the normalized schema interface  
- `create-project.ts` - handles project configuration creation (exported
as `addProject`)
- `create-files.ts` - handles file generation (exported as
`addAppFiles`)
- `create-targets.ts` - handles build/serve target configuration
- `add-dependencies.ts` - handles dependency management (exported as
`addProjectDependencies`)
- `add-linting.ts` - handles ESLint setup (exported as
`addLintingToApplication`)
- `add-proxy.ts` - handles proxy configuration (exported as `addProxy`)
- `index.ts` - exports all the functions

The main `application.ts` file is now much cleaner at ~15 lines,
focusing on orchestrating the generator workflow by calling the
extracted functions. This separation of concerns improves:

- **Maintainability**: Each file has a single responsibility
- **Testability**: Individual functions can be tested in isolation
- **Readability**: Easier to understand what each part does
- **Reusability**: Functions can be potentially reused by other
generators
2025-06-10 16:57:46 +01:00
Isaac Mann 8bfa9f90de docs(core): enterprise webinar section (#31527)
Create WebinarSection component for enterprise docs
2025-06-10 10:35:15 -04:00
Benjamin Cabanes 8767f0d9ec docs(nx-dev): consolidate enterprise menus (#31517)
Replaced the "Enterprise" drop-down menu with a direct link to the Enterprise page for simpler navigation. Updated mobile menus to integrate enterprise items alongside solutions.
2025-06-10 14:08:57 +00:00
Jack Hsu 719c5f55fb docs(core): update Nx installation steps to prefer global installs (#31513)
This PR makes the global install more prominent. This is important for
non-JS workspaces since they may not have node or npm available. The
installation flow should be:

1. Install Nx (e.g. `brew install nx`)
2. Run `nx init` in your project

The `create-nx-workspace` is removed since it's already mentioned on the
intro page, and it is covered in tutorials. It is also not technically
an "install" command.

Preview:
https://nx-dev-git-docs-update-installation-nrwl.vercel.app/getting-started/installation

**Note:** The cross-platform NPM install is still featured first because
it'll work for everyone. It shouldn't be a concern for non-JS devs since
other tools like Claude Code also has `npm install --global` as their
install step.
2025-06-10 09:34:10 -04:00
Jason Jean 92d9d13da4 Experimental TaskHashPlanInspector (#27809)
## Current Behavior
<!-- This is the behavior we have today -->

There is no easy way to inspect the hash plan for a task.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

There is a `TaskHashPlanInspector` which can be used to provide details
about the hash plan for a task.

## Example Usage

```js
const { createProjectGraphAsync } = require('@nx/devkit');
const { HashPlanInspector } = require('nx/src/hasher/hash-plan-inspector');

(async () => {
  const graph = await createProjectGraphAsync();
  const hashPlanInspector = new HashPlanInspector(graph);
  await hashPlanInspector.init();
  const target = {
    project: 'nx',
    target: 'build-native',
  };
  console.log(
    JSON.stringify(hashPlanInspector.inspectTask(target), null, 2)
  );
})();
```

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: Craigory Coppola <craigorycoppola@gmail.com>
2025-06-10 07:39:59 -04:00
Colum Ferry 61eb47f0d3 fix(js): enhance TypeScript transformer loading to support function-based plugins (#31443)
## Current Behavior

TypeScript transformer loading in the js package was limited to standard
Nx/TypeScript transformer plugins and didnt handle different exports

## Expected Behavior

TypeScript transformer loading should support various function-based
transformer formats in a generic way

## Related Issue(s)

Fixes #31411

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-06-10 12:10:15 +01:00
Jason Jean 55f33c582d chore(repo): update nx to 21.2.0-beta.4 (#31481)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This repo uses Nx `21.2.0-beta.1`

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This repo uses Nx `21.2.0-beta.4`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: AgentEnder <AgentEnder@users.noreply.github.com>
2025-06-10 11:09:43 +02:00
Jason Jean c8ff3394e6 fix(core): remove log_error function and standardize logging (#31515)
## Current Behavior

The codebase has separate `logError` and `logDebug` functions in the
native logging infrastructure, with both error and debug logging paths.

## Expected Behavior

Consolidate logging to use a single standardized approach. Error
messages are now logged through the debug channel for consistency.

## Related Issue(s)

This change standardizes the logging interface by removing the separate
error logging function and routing all log messages through the debug
logger.
2025-06-09 22:22:19 +00:00
Isaac Mann 445338c496 docs(core): add polygraph webinar (#31511)
Adds the Polygraph webinar
Adds a link to the Bitovi webinar recording
2025-06-09 19:08:09 +00:00
Jordan 2ac98045e6 docs(core): add zephyr cloud to partners page (#31472)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
PR Adds Zephyr Cloud to Partners Page

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-09 14:51:46 -04:00
Jason Jean 022789202e chore(repo): fix publish workflow (#31510)
## Current Behavior

The publish workflow was failing because the preinstall script was
exiting with code 1 when detecting an older Node.js version, causing the
entire publishing process to fail.

## Expected Behavior  

The preinstall script should warn about Node.js version requirements but
not exit with an error code during publishing, allowing the workflow to
continue.

## Related Issue(s)

This fixes a critical issue preventing package publishing due to Node.js
version check failures in CI environments.

The fix changes:
- `console.error()` to `console.warn()` for better log categorization
- Removes `process.exit(1)` to prevent workflow termination  
- Adds the actual Node.js version to the warning message for better
debugging

This ensures the publish workflow can complete successfully while still
providing visibility into Node.js version mismatches.
2025-06-09 14:39:06 -04:00
Benjamin Cabanes 51bddad10f docs(nx-dev): update analytics event identifier (#31506)
Update event identifier for newsletter subscription clicks in Solutions' hero components.
2025-06-09 12:30:52 -04:00
Jason Jean 35f54044ca fix(core): default to 'run' target when only project is specified (#31452)
## Current Behavior

When running `nx run <project>` without specifying a target, the command
always fails with an error message "Both project and target have to be
specified", even if the project has a "run" target defined.

## Expected Behavior

When running `nx run <project>` without specifying a target, the command
should check if the project has a "run" target defined. If it does, use
it as the default target. This improves developer experience by allowing
simpler commands like `nx run myapp` instead of `nx run myapp:run`.

## Related Issue(s)

This change improves the developer experience for projects that have a
"run" target defined, making the CLI more intuitive.

## Changes Made

- Modified `packages/nx/src/command-line/run/run-one.ts` to check for a
"run" target when no target is specified
- Added comprehensive test coverage in `e2e/nx/src/run.test.ts` to
verify:
- Projects with a "run" target default to it when no target is specified
- Projects without a "run" target still show the original error message
- Maintains full backward compatibility

## Testing

- All existing tests pass
- Added new e2e tests to verify the behavior
- Ran full validation suite (`nx prepush`) successfully
2025-06-09 12:13:47 -04:00
Leosvel Pérez Espinosa c49b941ad0 cleanup(js): fix outdated test snapshots (#31507)
Update some outdated test snapshots.
2025-06-09 16:01:31 +00:00
Nicholas Cunningham a5544e371b feat(repo): migrate to pnpm 10 (#31427)
- Added .pnpmrc for pnpm 10 configuration, enabling peer dependencies
and lifecycle scripts.
- Updated package.json to reflect pnpm version change to 10.11.1 and
added onlyBuiltDependencies.
- Update pipelines to reflect pnpm version update to 10.11.1

## Upgrading your pnpm version
Now to upgrade your `pnpm` version you can run `pnpm
migrate-to-pnpm-version 10`. Which would upgrade your `pnpm` and it will
run the upgrade script.

Later on if you want to upgrade to pnpm v11 you can run `pnpm
migrate-to-pnpm-version 11`.
Additionally, if you just want to upgrade to the version that is inside
of `package.json` you would run
`pnpm migrate-to-pnpm-version` without passing in a major version.
2025-06-09 10:29:16 -04:00
Allen Ngorora 4fa95c21c7 docs(module-federation): update creating-a-remote.md (#30462)
Without explicitly specifying the --name option nx adds the full
workspace name ie @workspace/remote-app of which that fails the name
validation

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-06-09 15:17:24 +01:00
Jason Jean 62bd2f8f0a chore(testing): disable flaky e2e test (#31504)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This test is flaky.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This test is disabled and should be investigated to see why it is flaky.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-09 13:48:38 +00:00
Jason Jean 25dc8b64ae fix(core): add conditional compilation for WASM build compatibility (#31491)
## Current Behavior

The `pnpm build:wasm` command fails with compilation errors due to
missing dependencies and system-dependent features being included in
WASM builds.

## Expected Behavior

WASM builds should compile successfully by excluding features that
require system access (IPC, terminals, file locking, etc.) while
maintaining these features for native builds.

## Related Issue(s)

Fixes WASM build compatibility issues

## Changes Made

### Core Changes
- Added conditional compilation flags (`#[cfg(not(target_arch =
"wasm32"))]`) to IDE console modules
- Made `socket_path` module conditional for non-WASM targets only
- Fixed unused import warnings for WASM builds in `file_lock.rs` and
`walker.rs`

### Generated File Updates  
- Updated TypeScript definitions and JavaScript bindings to reflect
conditional compilation
- WASM builds now exclude system-dependent features like terminal UI and
database connections

### Technical Details
The IDE console functionality depends on:
- `interprocess` crate for IPC communication
- `jsonrpsee` crate for JSON-RPC messaging  
- Terminal and file system features not available in WASM

These features are now properly isolated for native targets only while
maintaining full functionality for standard Node.js builds.

## Testing
-  `pnpm build:wasm` now passes successfully
-  Generated bindings properly exclude WASM-incompatible features
-  Native builds retain all existing functionality
2025-06-09 13:43:22 +00:00
Leosvel Pérez Espinosa e68d884d63 fix(core): handle external node without default version when generating a pnpm pruned lockfile (#31503)
## Current Behavior

When generating a pruned pnpm lockfile, if there's no external node with
a default version for a given package and the dependency specification
for the package includes a Semver range specifier, an error is thrown.

## Expected Behavior

When generating a pruned pnpm lockfile, the parser should correctly
handle the scenario where there's no external node with a default
version for a given package, and the dependency specification for the
package includes a Semver range specifier.

## Related Issue(s)

Fixes #28627
2025-06-09 09:31:33 -04:00
Torin f1c090b640 fix(linter): update allowed ESLint config file extensions (#30127)
ESLint added experimental support for typescript config files since
[9.9.0](https://eslint.org/blog/2024/08/eslint-v9.9.0-released/#experimental-typescript-configuration-files),
and as of
[9.18.0](https://eslint.org/blog/2025/01/eslint-v9.18.0-released/#stable-typescript-configuration-file-support)
that support is stable. This PR add ts/mts/cts to the list of known
eslint config files, and adds the same extensions to config file
generators

## Current Behavior
When using the eslint executor with a ts file, returns error "When using
the new Flat Config with ESLint, all configs must be named
eslint.config.js or eslint.config.cjs and .eslintrc files may not be
used. See
https://eslint.org/docs/latest/use/configure/configuration-files"

When using the eslint plugin, the inferred task is not created for
projects that do not have a non-ts eslint config.

### Workarounds
- Compiling ts rules/configs in a project. Introduces other issues
- Using jiti or comparable
- For plugin users, having a fake eslint.config.js at the root allows
the inferred task to be created. ESLint will still use the ts config.
  - Cache targets are wrong
  - Complications in non-monorepo workspaces

## Expected Behavior
When using the eslint executor with a ts file, no error is thrown.

When using the eslint plugin with a ts file, the inferred task is
created.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
No issues, but addresses [this
discussion](https://github.com/nrwl/nx/discussions/29710#discussion-7856165)

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
2025-06-09 09:29:19 -04:00
Colum Ferry f9c427a80b fix(webpack): handle package.json exports field for non-buildable libs (#31444)
Current Behavior
The webpack and rspack plugins for handling non-buildable libraries
don't properly process the exports field in package.json. They
incorrectly assume libraries have only a single entry point, typically
through a barrel file (index.ts).

When a library defines multiple export paths using the exports field
(e.g., "./*": "./src/*.ts"), the plugins fail to generate the correct
allowlist patterns for webpack externals. This causes build failures
when trying to use non-buildable libraries that expose multiple entry
points without barrel files.

Expected Behavior
The webpack and rspack plugins should properly parse the exports field
from package.json and generate appropriate allowlist patterns for all
exported subpaths. This includes:

Handling wildcard patterns ("./*": "./src/*.ts")
Processing conditional exports (import/require/development)
Supporting exact subpath exports ("./utils": "./src/utils.ts")
Escaping special characters in package names for regex patterns
Gracefully falling back to reading package.json directly when metadata
is unavailable

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-09 13:58:57 +01:00
Matthias Stemmler 659149d87c fix(bundling): do not normalize tsconfig path for Windows with rollup (#30567)
## Current Behavior
Rollup build fails on Windows with errors like this:
```
[plugin rpt2] error TS6059: File '/foo/bar/baz.ts' is not under 'rootDir' 'C:/foo/bar'. 'rootDir' is expected to contain all source files.
```

This is because since
https://github.com/nrwl/nx/commit/81fe7bb278826ece0bec9ff794fa5b1ef5c0c295
the `tsconfig` path passed to `rollup-plugin-typescript2` is built using
`joinPathFragments`, which removes the drive letter on Windows.

## Expected Behavior
Rollup build should not fail.
2025-06-09 11:31:20 +01:00
Jacob S 5f7d46354e fix(react): allow for buildTargetWebpack to have an executor of @nx/webpack:webpack or @nx/rspack:rspack (#30253)
closed #30235

## Current Behavior
nxComponentTestingPreset for webpack cannot use rspack as an executor.

## Expected Behavior
nxComponentTestingPreset for webpack can use webpack or rspack as an
executor.

## Related Issue(s)
#30235

Fixes #30235
2025-06-09 11:15:33 +01:00
dpnolte 438457ab12 fix(rspack): must run type check with @nx/rspack:rspack when skipTypeChecking is false (#31027)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
- Create a project that uses @nx/rspack:rspack as build target with
SkipTypeChecking set to false.
- Run build target for project.
- Type check has not been run and will not bail in case of any
typescript errors

<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- It should run type checking as documented:
https://nx.dev/nx-api/rspack/executors/rspack#skiptypechecking
I looked at the webpack executor and there it also runs the type check
based on `skipTypeChecking` and not the `typeCheck` alias. So I've
adjusted it accordingly for the rspack executor.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31026

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2025-06-09 11:08:01 +01:00
Rui Lima b38f966707 fix(node): esbuild breaks and does not cleanup (#30469)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
esbuild breaks on function checks and improperly handles dangling
promises, preventing the program to exit successfully.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
The program should exit properly and no zombie processes kept running.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-09 10:50:57 +01:00
Paul Bohm c9021b0e39 fix(vite): NxReporter compatible with Vitest ≥0.29 (#31425)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(vite): must begin with lowercase` -->

## Current Behavior
Running `nx test … --reporter=verbose` (or any additional Vitest
reporter) on
projects that use **Vitest ≥ 0.29** hangs indefinitely at the end of the
run.
`vitest` itself finishes, but the Nx task-runner never receives the
*done*
signal because **`NxReporter` only implements the legacy
`onFinished()` hook**.  
When multiple reporters are configured, Vitest now emits
`onTestRunEnd()` instead of `onFinished()`, so the promise in
`NxReporter`
remains unresolved and the worker process stays alive forever.

## Expected Behavior
`nx test` (and affected `nx run-many --target=test`) exits cleanly on
**all**
Vitest versions, regardless of how many reporters are passed.

* `NxReporter` resolves its internal promise via **either**
  `onTestRunEnd` (Vitest ≥ 0.29) **or** `onFinished` (Vitest ≤ 0.28).
* No functional change in watch-mode.
* No extra timers or fallbacks – just one shared helper.

## Implementation Notes
* Added `onTestRunEnd` method that delegates to a private
`_handleFinished`.
* Re-implemented `onFinished` as a thin delegate to the same helper.
* Original error-detection logic is untouched.

## Related Issue(s)
Closes nrwl/nx#<insert-issue-number-if/when-one-exists>

Co-authored-by: Paul Bohm <{{GITHUB_NOREPLY_EMAIL}}>
2025-06-09 10:50:04 +01:00
Petr Plenkov ddaf77b109 feat(bundling): use tsconfig.lib.json for rollup.config.ts (#30453)
## Current Behavior

Currently when we're using `rollup.config.ts` rollup is picking up wrong
tsconfig. Because of this not everything works as expected:

- `You are using one of Typescript's compiler options 'declaration',
'declarationMap' or 'composite'. In this case 'outDir' or
'declarationDir' must be specified to generate declaration files.` error
appears , because lib tsconfig.json doesn't have outputDir at all
- even if we add outDir to `tsconfig.base.json` we'll have another error
`[!] (plugin typescript) RollupError: [plugin typescript]
@rollup/plugin-typescript TS6377: Cannot write file
'/workspaces/abapify-docs/dist/tsconfig.tsbuildinfo' because it will
overwrite '.tsbuildinfo' file generated by referenced project
'/workspaces/abapify-docs/packages/abap-to-markdown'`
This happens becase it tries to write all tsbuildinfo files into a root
dist folder.

## Expected Behavior
Using rollup.config.ts should just work in a similar way as js|cjs|mjs
config work.

## Solution

According to docs:

> This option supports the same syntax as the
[--plugin](https://rollupjs.org/command-line-interface/#p-plugin-plugin-plugin)
option i.e., you can specify the option multiple times, you can omit the
@rollup/plugin- prefix and just write typescript and you can specify
plugin options via ={...}.

So it means we can use something like this:
```
rollup -c rollup.config.ts --configPlugin typescript={tsconfig:\'tsconfig.lib.json\'}
```

## Related Issue(s)
Solution is taken from this issue::
https://github.com/rollup/plugins/issues/1713#issuecomment-2201138846
2025-06-09 10:41:49 +01:00
Leosvel Pérez Espinosa 73e2c506bb docs(angular): update tutorial and docs with angular v20 changes (#31356)
Updates the Angular Monorepo tutorials to reflect the changes in Angular
v20.
2025-06-09 10:27:53 +02:00
Leosvel Pérez Espinosa 2d33862c43 feat(angular): update angular eslint packages to v20 (#31489)
## Current Behavior

The Angular ESLint packages are installed with a v20 beta version.

## Expected Behavior

The Angular ESLint packages should be installed with the stable v20
version.
2025-06-06 23:16:30 +00:00
Jason Jean 635dd06368 fix(core): remove tabs from local workspace plugins section in nx report (#31490)
## Current Behavior

The `nx report` command uses tab characters for indenting local
workspace plugins in its output, which creates inconsistent formatting
compared to other sections like 'Registered Plugins' and 'Community
plugins'.

## Expected Behavior

Local workspace plugins should be formatted consistently with other
plugin sections in the report output, without tab indentation.

## Related Issue(s)

This is a minor formatting improvement for better consistency in the nx
report output. No specific issue was filed for this change.
2025-06-06 18:40:44 -04:00
Leosvel Pérez Espinosa 8941362d1a fix(core): scope typescript resolution cache correctly when processing the graph (#31455)
## Current Behavior

When using Node.js subpath imports with the same name in different
projects, the Nx graph incorrectly picks up seemingly random
dependencies between projects that shouldn't exist.

This happens because the result of the resolution performed with
TypeScript is cached using the import path as the cache key. The problem
with that is that multiple projects can have the same subpath import
name pointing to internal files of the project, so when the resolution
is made for the first project (say `project1`), the result will be
cached and incorrectly reused for other projects with the same subpath
import name. So, all projects with the same subpath import name would
resolve the dependency to the first project (`project1`).

The same could happen to projects with TS path mappings defined in the
project's tsconfig file. These TS path mappings would only apply to the
project internally and therefore, other unrelated projects could also
define them with the same name pointing to different files.

## Expected Behavior

The Node.js subpath imports should be handled correctly. The TypeScript
resolution result should be cached safely and scoped to the project from
which the import is being done.

## Related Issue(s)

Fixes #31223
2025-06-06 13:18:08 -04:00
Jason Jean 77ff63f356 feat(misc): enhance IDE integration with Nx Console auto-installation and improved logging (#31462)
## Current Behavior

Currently, IDE integration setup requires manual configuration and lacks
streamlined auto-installation capabilities for Nx Console. The logging
system also needs improvement for better developer experience.

## Expected Behavior

With these changes, the IDE integration provides:
- Prompt for automatic Nx Console installation with user preferences
- Enhanced native logger with proper formatting and levels
- Better development documentation for IDE setup
- Updated documentation links to use the new format

## Related Issue(s)

<\!-- Please link the issue being fixed so it gets closed when this is
merged. -->

This PR implements IDE integration improvements including Nx Console
auto-installation and enhanced logging capabilities.
2025-06-06 17:15:50 +00:00
Leosvel Pérez Espinosa 6613dd29ea fix(linter): infer lint tasks with inputs using {workspaceRoot} to support nested projects (#31488)
## Current Behavior

When running the `lint` task on a project that contains nested projects,
the task runs over all the files, including the ones inside the nested
projects, but the task cache status is not affected by changes to the
files in nested projects. This only happens when the inputs are defined
with `{projectRoot}/...` (what the `@nx/eslint/plugin` infers). The
`{projectRoot}` token scopes the files inside the project without files
in other nested projects. While the `{workspaceRoot}` token would
include every file and wouldn't scope them to any particular project.

## Expected Behavior

The `@nx/eslint/plugin` should infer `lint` tasks with their inputs
using the `{workspaceRoot}` token to support nested projects. This would
be more aligned with what the tool itself does, which runs over all the
files inside the project root regardless of them being inside nested Nx
projects.

Additionally, the difference in behavior between `{workspaceRoot}` and
`{projectRoot}` should be documented.

## Related Issue(s)

Fixes #31264
2025-06-06 12:52:15 -04:00
Colum Ferry e73a1411a0 feat(storybook)!: support storybook 9 (#31172)
## Current Behavior
We currently do not have support for Storybook 9, nor any migrations to
help users switch to it.


## Expected Behavior
Support Storybook 9 and add a migration for users to switch to v9

BREAKING CHANGE: Remove deprecated generators:
`@nx/storybook:cypress-project`,
`@nx/react-native:storybook-configuration`, `@nx/react-native:stories`,
`@nx/react-native:component-story`
2025-06-06 12:51:47 -04:00
Jonathan Cammisuli 9c366d39c4 chore(core): fix editor detection tests when running in cursor (#31478)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Running tests in the Cursor terminal fails. 

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Running tests in the Cursor terminal should pass. 

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-06 12:03:43 -04:00
Paweł Tymczuk c5146d1b5f fix(release): changelog filtering logic for the project commits (#31449) 2025-06-06 19:25:54 +04:00
Leosvel Pérez Espinosa 601fecdf0c feat(angular): support angular v20 (#31369)
Add support for Angular v20.

BREAKING CHANGE: Support for Angular v17 was dropped.

### TODO

- [x] Update Angular packages to the stable v20
- [x] Update `jest-preset-angular` when it releases support for Angular
v20
  - [x] PR: https://github.com/thymikee/jest-preset-angular/pull/3119
- [x] Release:
https://github.com/thymikee/jest-preset-angular/releases/tag/v14.6.0
- [ ] Update Angular ESLint packages to the v20 stable version once
released
  - [ ] PR: https://github.com/angular-eslint/angular-eslint/pull/2448
- [x] Update AnalogJS packages when they are released with support for
Angular v20
  - [x] PR: https://github.com/analogjs/analog/pull/1751
- [x] Release: https://github.com/analogjs/analog/releases/tag/v1.17.0
- [x] Fix for `@analogjs/vitest-angular` peer deps:
https://github.com/analogjs/analog/pull/1754
    - [x] Release:
- [x] Beta:
https://github.com/analogjs/analog/releases/tag/v1.17.1-beta.1
- [x] Stable: https://github.com/analogjs/analog/releases/tag/v1.17.1
- [ ] Update Storybook packages
- [x] PRs: https://github.com/storybookjs/storybook/pull/31602 and
https://github.com/storybookjs/storybook/pull/31611
- [x] Storybook 9 Release:
https://github.com/storybookjs/storybook/releases/tag/v9.0.3
  - [ ] Storybook 8 Release??: PENDING
- [ ] Remaining issue:
https://github.com/storybookjs/storybook/issues/31652
2025-06-06 10:55:26 -04:00
Jason Jean 66c4dae6b6 fix: add .ts extension to nx-release script reference in project.json (#31483)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Node 24 is more strict for module resolution and was not able to resolve
this path.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Node 24 is now able to resolve this path.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-06 09:33:00 -04:00
Miguel fa9290abf4 fix(release): sort groups topologically bottom-up and fix typo to allow multi-level group dependencies (#31374) 2025-06-06 13:05:13 +04:00
Jason Jean c43d2f2d62 feat(repo): add ndcunningham to Claude workflow authorized users (#31479)
## Current Behavior

Currently, ndcunningham is not included in the list of authorized users
who can trigger the Claude AI assistant in GitHub workflows.

## Expected Behavior

With this change, ndcunningham will be able to trigger the Claude AI
assistant by mentioning @claude in GitHub issue comments, PR comments,
and PR reviews.

## Related Issue(s)

This change adds ndcunningham to the authorized user list for the Claude
workflow, enabling them to use the AI assistant for development tasks.
2025-06-05 17:24:26 -04:00
Nadav Shatz 1afe6acabe fix(rspack): Add missing return for rspack composoable plugin (#31372)
This was broken in https://github.com/nrwl/nx/pull/29691

it's missing this return.
2025-06-05 15:04:39 -06:00
Nicholas Cunningham ce9ff9220a fix(core): Update macos pipelines configuration (#31476)
This PR updates the CI workflow in `.github/workflows/ci.yml` to improve
the setup and management of iOS simulators.
The change includes
- Enhanced error handling
- Better diagnostics 
- Configurations for M-series Macs.

This change is similar to what we in `.github/workflows/e2e-matrix.yml`
so the result should be consistent across workflows.
2025-06-05 14:24:03 -06:00
Nicholas Cunningham ae89efb8d1 fix(nextjs): add extension alias support for handling ESM libs (#31323)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Currently, if you try to import a ESM lib after you generate a Next.js
application it fails to build due to how the module exports `export *
from './lib/lib8446520.js';`.

This has been addressed with webpack and needs to be extended to
Next.js.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

You should work out of the box and you should be able to import a lib
defined like: `export * from './lib/lib8446520.js';.`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
This is also related to our webpack and rspack packages. Changes have
also been made to them to ensure consistency across bundlers.

Fixes #30714
2025-06-05 13:54:29 -06:00
Jack Hsu 5c405fa72f docs(misc): add missing angular-rspack and angular-rsbuild API docs and add missing redirects (#31473)
This PR fixes some 404s in the production nx.dev docs.

These were picked up by the script provided here:
https://linear.app/nxdev/issue/NXC-2628/create-a-test-for-verifying-the-redirect-rules

```
https://nx.dev/nx-api → Status: 404
https://nx.dev/nx-api/azure-cache/documents/overview → Status: 404
https://nx.dev/nx-api/owners/documents/overview → Status: 404
https://nx.dev/nx-api/gcs-cache/documents/overview → Status: 404
https://nx.dev/nx-api/s3-cache/documents/overview → Status: 404
https://nx.dev/nx-api/shared-fs-cache/documents/overview → Status: 404
https://nx.dev/nx-api/angular-rspack/documents/create-config → Status: 404
https://nx.dev/nx-api/angular-rspack/documents/create-server → Status: 404
https://nx.dev/nx-api/angular-rsbuild/documents/create-config → Status: 404
https://nx.dev/nx-api/angular-rsbuild/documents/create-server → Status: 404
https://nx.dev/nx-api/angular-rspack/documents → Status: 404
https://nx.dev/nx-api/angular-rsbuild/documents → Status: 404
https://nx.dev/nx-api/angular-rspack/executors → Status: 404
https://nx.dev/nx-api/angular-rsbuild/executors → Status: 404
https://nx.dev/nx-api/angular-rspack → Status: 404
https://nx.dev/nx-api/angular-rsbuild → Status: 404
https://nx.dev/nx-api/angular-rspack/migrations → Status: 404
https://nx.dev/nx-api/angular-rsbuild/migrations → Status: 404
https://nx.dev/nx-api/angular-rspack/generators → Status: 404
https://nx.dev/nx-api/angular-rsbuild/generators → Status: 404
```

**Changes:**
- The `/nx-api` goes to `/plugin-registry` since the intend is to list
out plugins.
- Remote Cache and Owners do not have overview API doc since this is now
a proper overview page (e.g. `/reference/core-api/azure-cache/overview`
NOT `/reference/core-api/azure-cache/api/documents/overview`
- Angular Rspack and Rsbuild had missing API docs that did not get
ported
2025-06-05 14:16:53 -04:00
Leosvel Pérez Espinosa 93234039c9 fix(core): use ts-node option from tsconfig files when creating transpiler (#31469)
## Current Behavior

When creating a `ts-node` transpiler, only `compilerOptions` are
provided. Because we instruct `ts-node` to skip reading the tsconfig
(this was previously done to avoid some edge cases), other options in
the tsconfig files are lost (e.g. `ts-node` specific options).

This was previously reported at https://github.com/nrwl/nx/issues/21695
and fixed by https://github.com/nrwl/nx/pull/21723, but a rework at a
later point caused a regression.

## Expected Behavior

When creating a `ts-node` transpiler, we should provide
`compilerOptions` and the `ts-node` options.
2025-06-05 14:04:36 -04:00
Nicholas Cunningham 6fe9d297e2 feat(repo): add golden list of projects to our Nightly CI (#31414)
This pull request introduces several updates to the CI/CD workflows and
matrix configuration files.

The aim is to highlight critical Nx failures contained in each project
for maintainers to address.

### Changes
- Improvements to workflow caching.
- Improvements to macOS simulator handling.
- Updates to Slack notifications.
- Update matrix data processing for golden projects. 
- Support for Windows has been temporarily disabled due to build issues.
2025-06-05 14:03:42 -04:00
James Henry 7a45f53d9a Revert "chore(core): temporarily remove conformance check" (#31471)
Reverts nrwl/nx#31463
2025-06-05 17:06:23 +00:00
Jack Hsu 2f8eb24504 docs(core): add docs for tui options in nx.json (#31459)
This PR adds the missing `tui` property in `nx.json` on this page:
https://nx.dev/reference/nx-json

<img width="884" alt="Screenshot 2025-06-04 at 1 10 04 PM"
src="https://github.com/user-attachments/assets/d7edb8dd-7b1a-4e3e-a738-4eb0dbb1feba"
/>

Preview:
https://nx-dev-git-docs-add-tui-option-nrwl.vercel.app/reference/nx-json
2025-06-05 08:29:57 -04:00
Miroslav Jonaš 9715da7be9 docs(nx-dev): fix the nx cloud version (#31466)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-05 13:09:51 +01:00
Colum Ferry bc01bbaca1 fix(angular): optimize ng-packagr-lite watch mode file writing (#31434)
## Current Behavior

In ng-packagr-lite watch mode, all output files are written to disk on
every incremental build regardless of whether their content actually
changed. This causes downstream watchers (like Vite) to see all files as
"changed" and trigger full rebuilds instead of incremental ones.

## Expected Behavior

Only files with changed content should be written to disk during
incremental builds in watch mode. This allows downstream watchers to
properly detect which files actually changed and perform efficient
incremental rebuilds.

## Related Issue(s)

Fixes #31033

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-06-05 11:07:23 +01:00
Altan Stalker 5ffd82ea57 chore(core): temporarily remove conformance check (#31463)
## Current Behavior
Conformance is broken

## Expected Behavior
Conformance is not broken...or just doesn't run so we can't tell it's
broken
2025-06-05 00:04:47 +00:00
Nicholas Cunningham 33bfc51ec2 fix(node): add project name sanitization for Docker commands. (#31461)
This PR improves our Docker support by sanitizing project names for
compatibility with Docker commands and Linux systems.

closes: #31421
2025-06-04 15:18:51 -06:00
Jack Hsu 66eaf2fc74 docs(misc): remove /nx-api pages (#31453)
This PR removes the `/nx-api` pages from `nx-dev`. They are already
redirected from `/nx-api` to either `/technologies` or
`/reference/core-api` URLs.

e.g. `/nx-api/nx` goes to `/reference/core-api/nx` and `/nx-api/react`
goes to `/technologies/react/api`

**Changes**:
- Remove old `nx-api.json` from being generated in
`scripts/documentation/generators/generate-manifests.ts` -- this was
used to generate the sitemap
- Remove `pages/nx-api` from Next.js app since we don't need them
- Remove workaround from link checker
`scripts/documentation/internal-link-checker.ts` -- the angular
rspack/rsbuild and other workarounds are gone now that they are proper
docs in `map.json`
- Update Powerpack/Remote Cache reference docs to exclude API documents
(since they are duplicated in the Intro page) --
`nx-dev/models-document/src/lib/mappings.ts`
- All content in `docs` have been updated with new URL structure

**Note:** Redirects are already handled, and Claude Code was used to
verify the updated `docs/` URLs (see report below). The twelve 404s
links were updated by hand.

## Verification Report

https://gist.github.com/jaysoo/c7863fe7e091cb77929d1976165c357a
2025-06-04 16:57:01 -04:00
Benjamin Cabanes 733122bc9d docs(nx-dev): update hero section (#31460)
Update tagline.
2025-06-04 15:48:19 -04:00
Juri Strumpflohner ee7dbf9c3a feat(nx-dev): add rss and atom feeds 2025-06-04 20:40:07 +02:00
Benjamin Cabanes 6fd55300f9 chore(nx-dev): remove references to live webinar banners (#31456)
Commented out `WebinarNotifier` and all instances of the live event banner in hero components across the project.
2025-06-04 12:26:07 -04:00
Rares Matei 207c869e51 docs(nx-cloud): update release notes (#31450)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-04 16:27:23 +01:00
Jack Hsu 3320883f1d docs(misc): update broken URL (#31451)
This PR updates fixes a broken URL on
https://nx.dev/concepts/module-federation/nx-module-federation-technical-overview.
2025-06-04 09:05:02 -04:00
Jack Hsu 283ec76966 docs(misc): fix up /plugin-registry URLs a devkit URLs (#31441)
This PR fixes two issues with the docs restructure:

1. `/plugin-registry` was reading from `new-nx-api.json`, which had the
wrong base path for API docs -- it was not using `mapping.ts`
2. `/reference/core-api/devkit/documents` did not statically generate
all URLs -- this required a change specifically to handle legacy devkit
documents
2025-06-03 16:48:06 -04:00
Jordan 60495e4af6 docs(core): add nStudio and LiveLoveApp to partners page (#31396)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
Add LiveLoveApp and nStudio to our partners page

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-03 16:44:49 -04:00
Juri Strumpflohner 41387af458 feat(nx-dev): update hero tagline 2025-06-03 22:00:35 +02:00
Chau Tran 49b346b912 docs(nx-cloud): update github vcs docs with fine-grained pat permissions (#31442)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-03 13:26:29 -05:00
Caleb Ukle 4f57f01d01 docs(core): move plugin api docs to tech plugin guides (#31402)
# before

plugin api docs where stuck in `api` section which doesn't make sense

# after

move plugin api docs into `guides` section and add redirect for better
discoverability
2025-06-03 13:43:24 -04:00
Jack Hsu 5176f10c23 docs(misc): fix link in blog post (#31438)
The link in the post does not start with `/`, so it is going to
`/blog/blog/...` instead. The `new Terminal UI` URL is going to
`https://nx.dev/blog/blog/nx-21-terminal-ui`.

Fixes: https://nx.dev/blog/nx-generators-ai-integration
2025-06-03 12:18:43 -04:00
Jack Hsu 9be3d20fe3 docs(misc): update installation via Homebrew (#31439)
Now that Nx is merged into
[`homebrew-core`](https://github.com/Homebrew/homebrew-core/pull/225452)
we no longer need to tap to access a non-official formula.

This PR updates our brew install to remove `brew tap nrwl/nx`. It also
mentions Linux for Homebrew since it is supported across different Linux
distros.
2025-06-03 12:08:33 -04:00
Philip Fulcher 79122afb2a docs(core): add changelog entries for 20.x and 21.x (#31322)
This PR backfills the missing changelog entries.

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-06-03 11:39:34 -04:00
Leosvel Pérez Espinosa 77b34bd788 fix(angular): generate correct output for buildable libraries on windows (#31437)
## Current Behavior

The `@nx/angular:ng-packagr-lite` executor is generating a wrong output
on Windows.

## Expected Behavior

The `@nx/angular:ng-packagr-lite` executor should generate the correct
output on Windows.

## Related Issue(s)

Fixes #31436
2025-06-03 17:09:41 +02:00
Colum Ferry 34cf5a243f fix(rspack): ensure nest applications generated correctly #31204 (#31424)
- fix(rspack): choosing nest as framework should not result in error
#31204
- fix(rspack): add deprecation message for application generator
- fix(rspack): ensure application generated projects are added to
excludes

## Current Behavior
Running the `@nx/rspack:application` generator with `--framework=nest`
results in an error due to mix of inferred and executor usage throughout
the generation process.

## Expected Behavior
Running the generator should pass without failure and create a working
project.
Deprecate the generator in favour of using project specific packages
(@nx/react etc)

## Related Issue(s)

Fixes #31204

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-06-03 13:41:17 +00:00
Leosvel Pérez Espinosa d3faf53c56 fix(core): print installation logs when installing latest version during nx migrate and using --verbose (#31432)
## Current Behavior

By default, `nx migrate` installs the latest version of `nx` in a
temporary directory to run the migration process. When this installation
fails, no helpful information is printed even when running with
`--verbose`; it only prints a generic message that the package manager
install process failed. This doesn't help when debugging/troubleshooting
issues with the installation.

## Expected Behavior

When installing the latest version of `nx` during `nx migrate` fails,
the installation logs should be printed when running with `--verbose`.

## Related Issue(s)

Fixes #
2025-06-03 08:15:15 -04:00
Leosvel Pérez Espinosa cb930d006a fix(core): ensure nx init implementation for angular correctly resolves @angular/core (#31430)
## Current Behavior

When running `nx init` in an Angular CLI repo located in a directory
that has an ancestor directory with an Nx installation, it silently
exits when trying to determine the compatibility of the Angular version.
The migration is not performed, and no feedback is given to the user.
This happens because the current implementation will determine that
ancestor directory (outside the workspace root) as the workspace root
(when starting the migration, there's no `nx` in the repo).

## Expected Behavior

Running `nx init` should work correctly, and proper feedback should be
printed to the user if it can't determine the compatibility of the
Angular version. It should correctly resolve the `@angular/core` package
from the Angular CLI workspace root.

## Related Issue(s)

Fixes #31291
2025-06-03 12:55:29 +02:00
Colum Ferry b97ee099c8 fix(vite): resolve project-specific tsconfig before workspace fallback (#31423)
## Current Behavior

The Nx Vite TsConfig paths plugin incorrectly resolves to workspace root
tsconfig files instead of project-specific ones, causing path aliases
like `@/contexts` to fail resolution.

## Expected Behavior

The plugin should check for project-specific tsconfig files
(`tsconfig.app.json`, `tsconfig.lib.json`, `tsconfig.json`) before
falling back to workspace root configurations.

## Related Issue(s)

Fixes #28945

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Coly010 <Coly010@users.noreply.github.com>
2025-06-03 10:27:44 +01:00
laney 88c51965e6 fix(core): update getTouchedProjectsFromLockFile to handle deleted/moved projects correctly (#31361) 2025-06-02 17:41:13 -04:00
Jason Jean fc99ded082 fix(core): implement missing --print flag for nx graph command (#31406)
## Current Behavior

The `nx graph --print` flag is documented and shows in CLI help, but
when used, it opens the graph UI in a browser instead of printing the
dependency graph to the console.

## Expected Behavior

With this PR, `nx graph --print` correctly prints the dependency graph
JSON to stdout in the terminal and exits, matching the documented
behavior and CLI help description.

## Related Issue(s)

Fixes #30255

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: FrozenPandaz <FrozenPandaz@users.noreply.github.com>
2025-06-02 21:18:51 +00:00
Jack Hsu 7990930cd0 docs(misc): set up redirect rules for recipes and fix broken nx-api redirects (#31426)
The Algolia sitemap notified on some 404s, so this PR addresses those
that were either not handled or handled improperly.

Two fixes:
- Add missing redirects for `/recipes` that have changed
- Update `/nx-api` redirects to account for sub-paths like
`/tecnologies/react/next`

The crawler results for 404 is at:
https://dashboard.algolia.com/apps/PCTGM1JTQL/crawler/crawler/867fee54-cdee-47cc-893d-297cb8edb0ff/monitoring/list?status=SKIPPED&reason=http_not_found&readable=HTTP%20Not%20Found%20%28404%29

---

Finding the redirects and validating them on canary.nx.dev were both
done with AI assistance. The verification script is attached here:
https://linear.app/nxdev/issue/NXC-2628/create-a-test-for-verifying-the-redirect-rules
2025-06-02 16:39:26 -04:00
Nicholas Cunningham d87f4c2d23 fix(remix): update setup-tailwind generator to correct import statements (#30599)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
There are two issues when we generate a remix application with ts
solutions:

1. Running the `setup-tailwind` generator with a reference project which
now is commonly with the pattern `@nx/acme` throws an error based on the
schema.
```
Property 'project' does not match the schema.'@nx/acme' should match the pattern '^[a-zA-Z].*$'.
```
2. The `tailwind.css` inside of `root.tsx` causes error with Vite.
```
app/root.tsx (9:7): "default" is not exported by "app/tailwind.css", imported by "app/root.tsx".
```




## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

The remix project should be able to be referenced similarly to how we
handle React.
The tailwind import should not throw an error.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30343
2025-06-02 12:52:43 -06:00
Nicholas Cunningham 94e54754a8 fix(js): enable end-to-end tests for Vue application in dev mode (#31415)
This PR updates Vite's E2E testing setup for the Vue plugin. 

Instead of commenting out the serve for vite and rsbuild when using
playwright we update the test to ensure the ports are available before
attempting to run their preview target.
2025-06-02 10:52:35 -06:00
Nicholas Cunningham 80aeb92664 fix(vite): add ajv dependency for non-pnpm package managers (#31413)
This PR updates your `package.json` to add `ajv` as a devDependency to
ensure the correct version is hoisted during module resolution.

For non-pnpm package managers notably (yarn and npm) the hosited version
is outdated and it spawns errors when vite is generating types via
`vite-plugin-dts`.
```shell
 - packages/vite-parent-lib9113241/vite.config.ts: Error: Cannot find module 'ajv/dist/core'
  Require stack:
  - /private/var/folders/tp/bfmjfn9s0hd59bm9z80j3mgm0000gn/T/nx-e2e--29165-pQZxOyX4J3ot/nx/proj2191858/node_modules/ajv-draft-04/dist/index.js
  - /private/var/folders/tp/bfmjfn9s0hd59bm9z80j3mgm0000gn/T/nx-e2e--29165-pQZxOyX4J3ot/nx/proj2191858/node_modules/@rushstack/node-core-library/lib/JsonSchema.js
  - /private/var/folders/tp/bfmjfn9s0hd59bm9z80j3mgm0000gn/T/nx-e2e--29165-pQZxOyX4J3ot/nx/proj2191858/node_modules/@rushstack/node-core-library/lib/index.js
  - /private/var/folders/tp/bfmjfn9s0hd59bm9z80j3mgm0000gn/T/nx-e2e--29165-pQZxOyX4J3ot/nx/proj2191858/node_modules/@microsoft/api-extractor/lib/api/CompilerState.js
```
Here is an example of the failures: 
-  [NPM + MacOS]
https://staging.nx.app/runs/uaJ1pbWHtK/task/e2e-js%3Ae2e-local
-  [PNPM + Linux]
https://staging.nx.app/runs/WRgY8Z6Jlw/task/e2e-js%3Ae2e-local
-  [NPM + Linux]
https://staging.nx.app/runs/Ght82l5Upa/task/e2e-js%3Ae2e-local
2025-06-02 10:51:56 -06:00
Nicholas Cunningham 8fb63e00ce feat(nest): Update nest version to 11 (#31393)
This PR updates our Nest dependency to version 11.
It also fixes an issue when you generate a Nest app with
`--unitTestRunner=none` it would still generate `.spec` files

closes: #30188
2025-06-02 09:47:01 -06:00
Jason Jean cb4ae8a779 chore(repo): update nx-mcp to v0.1.0 and fix MCP configuration (#31422)
## Current Behavior
<!-- This is the behavior we have today -->

`nx-mcp` fails not being able to resolve `node_modules/nx/*` files.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This was fixed in an updated version so this just updates `nx-mcp`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-06-02 15:40:11 +00:00
Leosvel Pérez Espinosa 2cf519a654 fix(angular): keep extra target metadata when needed in convert-to-rspack generator (#31309)
## Current Behavior

When converting an Angular project to use Rspack with the
`@nx/angular:convert-to-rspack` generator, some target top-level options
can be lost (e.g. custom `dependsOn`, `outputs`, etc.).

## Expected Behavior

When converting an Angular project to use Rspack with the
`@nx/angular:convert-to-rspack` generator, relevant target top-level
options that wouldn't be inferred need to be kept in the converted
project.
2025-06-02 12:58:41 +02:00
Jason Jean f02cc49b06 feat(repo): enhance Claude Code workflow and settings (#31405)
## Current Behavior

The Claude Code setup has basic workflow automation but lacks
comprehensive tooling permissions and detailed guidance for issue
management. The workflow documentation contains redundant sections and
some outdated commands.

## Expected Behavior

With these changes, the Claude Code integration will have:
- Enhanced tool permissions for better CI/CD workflow support
- Comprehensive GitHub CLI commands for efficient multi-issue management
- Clear mandatory requirements for PR template completion
- Streamlined documentation with accurate command references

## Related Issue(s)

This PR builds upon the initial Claude Code setup from #31380 by
refining the workflow configuration and improving the developer
experience.
2025-05-30 21:26:52 -04:00
Jason Jean e4124c1c93 docs(core): improve affected command description to define affected projects (#31404)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

`nx affected` documentation was unclear and did not state what affected
projects actually meant.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Adds a clear definition of "affected projects" to the CLI documentation.
Affected projects are projects that have been changed and projects that
depend on the changed projects.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30712

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
2025-05-30 21:25:57 -04:00
Jason Jean 8cec6ceebb chore(repo): setup claude code (#31380)
## Summary

This PR integrates Claude Code AI assistant capabilities into the Nx
repository through GitHub Actions and workspace configuration.

## Changes Made

### 🤖 GitHub Actions Integration
- **Added `.github/workflows/claude.yml`**: GitHub Actions workflow that
triggers Claude Code on:
  - Issue comments containing `@claude`
  - Pull request review comments containing `@claude` 
  - Pull request reviews containing `@claude`
  - New issues with `@claude` in title or body
- Configured appropriate permissions for repository access and PR/issue
management
- See [Claude Code GitHub Actions
documentation](https://docs.anthropic.com/en/docs/claude-code/cli-usage#github-actions)
for usage details

### 📝 Project Documentation & Configuration
- **Added `CLAUDE.md`**: Comprehensive instructions for Claude Code
including:
  - Repository-specific guidance and best practices
  - Essential commands for development workflow
- Testing procedures (individual projects → affected projects → e2e
tests)
  - GitHub issue resolution workflow
  - Pre-push validation requirements
- **Added `.claude/settings.json`**: Claude Code permissions and
environment configuration
- **Added `.mcp.json`**: Model Context Protocol server configuration for
Nx workspace integration

### 🔧 Workspace Setup
- **Updated `package.json`**: Added `nx-mcp` dependency for enhanced
workspace integration
- **Updated `pnpm-lock.yaml`**: Lock file changes for new dependency
- **Updated `.gitignore`**: Added Claude-specific ignore patterns
- **Updated `CODEOWNERS`**: Assigned ownership of Claude-related files
to @FrozenPandaz
- **Updated `CONTRIBUTING.md`**: Enhanced contribution guidelines with
technology stack information

## Benefits

- Enables AI-assisted development and issue resolution through GitHub
- Provides Claude with deep understanding of Nx workspace structure via
MCP
- Establishes clear development workflows and validation procedures
- Maintains security through configured permissions and environment
settings

## Usage

After this PR is merged, team members and contributors can:
1. Comment `@claude` in issues or PRs to get AI assistance
2. Use Claude Code locally with enhanced Nx workspace understanding
3. Follow established workflows for testing and validation

For more information, see the [Claude Code
documentation](https://docs.anthropic.com/en/docs/claude-code).

## Test Plan

- [x] Verify GitHub Actions workflow syntax is valid
- [x] Confirm Claude Code configuration files are properly structured
- [x] Validate new dependency integration
- [x] Test workflow triggers on issue/PR interactions

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 18:14:11 -04:00
Leosvel Pérez Espinosa 7595d8a5e1 fix(js): write typescript plugin cache files atomically (#31390)
## Current Behavior

The `@nx/js/typescript` plugin writes cache files in a non-atomic
fashion, which can result in corrupted or empty files being written.

## Expected Behavior

The `@nx/js/typescript` plugin should write cache files atomically, and
they should not be corrupt. It should also retry a limited amount
attempts to account for temporary file locks.

## Related Issue(s)

Fixes #30239 
Fixes #31187
2025-05-30 16:41:45 -04:00
Johann Wagner efc9c8d12a fix(rspack): fix issue with optimization options in rspack config (#31337)
## Current Behavior
rspack.config.ts options related to optimizations are removed if the
mode is not "production". This makes the compile fail for all
non-production builds.

## Expected Behavior
If mode isn't set to "production" configuration related to optimization
should be passed through.

## Related Issue(s)
Fixes #31268 #30292
2025-05-30 11:41:13 -06:00
Juri 9400f09603 docs(nx-dev): update pinned posts 2025-05-30 10:40:27 +02:00
Terry e249109615 fix(linter): fix line endings handling in '@nx/eslint:convert-to-flat-config' generator (#31043)
## Current Behavior

When running `nx g @nx/eslint:convert-to-flat-config` on windows, the
ignores path is not handled correctly. After converting, the path will
have the additional `/r`

## Expected Behavior

When running `nx g @nx/eslint:convert-to-flat-config` on windows, the
ignores path should be correct.
2025-05-30 09:45:11 +02:00
Juri Strumpflohner b51676a89a docs(core): restructure guides into technologies sections (#31288)
Updates the docs structure, navigation etc to be easier + better suited
for showing Nx technology support beyond just TS.

**Notes:**

- API (`/nx-api`) tab is removed from the navigation (i.e. menu bar),
but pages still remain for now until we update references in `*.md`
files.
- Redirects are set up `/nx-api` to go to their respect new location
e.g. `/technologies` or `/reference/core-api`
- Old URLs still exist in the sitemap for now, but majority of them will
be redirected -- a follow-up PR can remove them.

**Preview:**
https://nx-dev-git-nx-dev-polyglot-docs-restructure-nrwl.vercel.app/docs

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-05-29 14:55:34 -04:00
Jason Jean d7106f5ede fix(core): handle run-commands targets with no commands (#31364)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Nx hangs when here is a `run-commands` target with no commands.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Nx does not hang when there is a `run-commands` target with no commands.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31345
2025-05-29 09:48:03 -04:00
Jason Jean 2f37cb25a0 fix(core): use next available port when the port for nx graph is in use (#31365)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Command would fail silently with no error message
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Rather than erroring, Nx will find the next available port and use that.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30915
2025-05-29 09:47:49 -04:00
Leosvel Pérez Espinosa ab97087f2a feat(angular): update nx init legacy integrated migration for angular to handle angular v17 (#31352)
## Current Behavior

The `nx init` legacy integrated migration for Angular doesn't handle
Angular v17 because it was part of the LTS versions. With the upcoming
Angular v20, that version is no longer part of the LTS, so it needs to
be handled by the legacy migration.

## Expected Behavior

The `nx init` legacy integrated migration for Angular should handle
Angular v17 because it's no longer part of the LTS versions.
2025-05-29 09:47:02 -04:00
Leosvel Pérez Espinosa fc0aeb5a4b fix(angular): update tsconfig files generation to better support angular v20 (#31357)
- Remove TS project reference to non-existent `tsconfig.editor.json`
file
- Ensure the `tsconfig.spec.json` file for Jest has the correct
`module`/`moduleResolution` compiler options
2025-05-29 14:33:19 +02:00
Leosvel Pérez Espinosa e0ea5be3f6 docs(angular): add angular 20 to the nx and angular compatibility version docs (#31342)
Adds the upcoming Angular v20 version to the Nx and Angular
compatibility version docs.
2025-05-29 14:20:25 +02:00
MaxKless 788ae147e5 docs(nx-dev): new blog post about building an MCP server with Nx (#31370)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-05-29 05:07:10 -07:00
Jack Hsu c8a6ffb6ab docs(misc): fix issue with GA events during local development (#31376)
This PR fixes an issue when you serve nx-dev locally and navigate
between pages in the browser. You'll get an error that `gtag` is not
defined since we never loaded it. We now check that we're in production
environment before sending events.
2025-05-28 09:33:26 -04:00
Juri Strumpflohner d74c39e9be docs(nx-dev): add blog post about TUI integration with LLM (#31373)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-05-28 13:00:13 +00:00
Juri Strumpflohner 4fb362a5ac fix(nx-dev): only track analytics in prod envs (#31367)
Refactors the tracking scripts on the nx website and only runs them in
prod environments
2025-05-28 08:12:50 -04:00
James Henry 9ab5d820ab fix(core): infer codex environment and use default tasks runner (#31359) 2025-05-28 14:12:17 +02:00
Leosvel Pérez Espinosa c7a9c71c07 fix(linter): handle ng-package.json file with no lib.entryFile in @nx/enforce-module-boundaries rule (#31360)
## Current Behavior

When an `ng-package.json` file of an Angular library secondary entry
point does not specify `lib.entryFile`, the
`@nx/enforce-module-boundaries` rule throws an error. The
`ng-package.json` file of an Angular secondary entry point can be as
simple as `{}`, but it would cause the rule to throw an error.

## Expected Behavior

The `@nx/enforce-module-boundaries` rule should correctly handle an
`ng-package.json` file of an Angular library secondary entry point that
does not specify `lib.entryFile`. The property should [default to
`src/public_api.ts`](https://github.com/ng-packagr/ng-packagr/blob/22a7ba1979f117a12901dca195187948c1fd022d/src/ng-entrypoint.schema.json#L20).

Co-authored-by: Miroslav Jonaš <missing.manual@gmail.com>
2025-05-28 09:45:32 +02:00
Victor Savkin 2572455c9c docs(nx-dev): more blog post tweaks 2025-05-27 21:53:52 -04:00
Victor Savkin c5e7f0253e chore(repo): fix formatting 2025-05-27 17:38:16 -04:00
Victor Savkin fac38b7971 docs(nx-dev): small tweaks to the post 2025-05-27 17:33:34 -04:00
Juri Strumpflohner 3e3402bad5 docs(nx-dev): practical guide for AI and coding (#31362)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-05-27 16:01:25 -04:00
Brandon Roberts 187b1ee76f fix(vite): bump @analogjs/vite-plugin-angular to 1.16.x (#31317)
## Current Behavior

AnalogJS installs 1.14.1 for Vitest support

## Expected Behavior

AnalogJS installs 1.16.1 for Vitest support

Co-authored-by: Miroslav Jonaš <missing.manual@gmail.com>
2025-05-27 17:27:11 +02:00
Miroslav Jonaš a71a6cab40 fix(core): fix broken nx-cloud url shortening logic (#31283)
Current URL shortening logic is based on the old Nx Cloud version format
- `YYMM.DD.BuildVersion`.

Since, 2025 we changed that format to `YYYY.MM.BuildVersion` which
breaks this logic and causes the connection URL to be just host.

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-27 12:01:17 +02:00
Nicholas Cunningham f1171191dd fix(webpack): add support for retrieving all transitive non-buildable dependencies (#31343)
This PR improves dependency resolution for Node.js apps using Webpack or
Rspack.

While we already handle direct dependencies for non-buildable libraries,
this update ensures that **transitive dependencies** are also properly
included. This guarantees that all necessary dependencies are bundled
when the main app/library is built.

closes: https://github.com/nrwl/nx/issues/31334
2025-05-27 00:53:45 -06:00
Emily Xiong 4a94841916 fix(gradle): add migration script to check gradle plugin version (#31304)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
currently, when migrate @nx/gradle to latest, we don't check the
dev.nx.gradle.project-graph version in build file

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
we should check the project-praph in the build file and make sure it is
correct version

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-26 13:59:28 -04:00
Emily Xiong 5537df6411 feat(gradle): exclude dependsOn tasks (#30913)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
current gradle task executor will run gradle task as it is. by default,
gradle command will run the tasks itself and its all depends on tasks.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- add excludeDependsOn in gradle executor schema with default value to
true: this allows gradle command to run tasks without its dependsOn
tasks. this improves performance time
- change project graph plugin (dev.nx.gradle.project-graph) to accept
option atomizer:
```
nxProjectReport {
	atomized = false
}
```
this will disabled atomized targets to be created. check-ci will not
have dependsOn task ci, it will be test instead.
it will not created any ci and ci--* targets, but check-ci will be
created, but dependsOn test:
<img width="605" alt="Screenshot 2025-05-20 at 3 00 39 PM"
src="https://github.com/user-attachments/assets/a2e0ae20-78a1-4848-a063-5825b169c219"
/>

this is what check-ci target looks like with atomized as true:
<img width="917" alt="Screenshot 2025-05-20 at 2 59 34 PM"
src="https://github.com/user-attachments/assets/33c6af0b-3e45-498d-96d0-4f46c54a8159"
/>

- change dependsOn targets to include both project name and task name.
e.g. `spring-boot:checkFormat
`, so when excludeDependsOn is true, it will exclude exact task
- in batch runner, run test runner and build runner as same time

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-26 13:59:04 -04:00
Jack Hsu cb25df1c98 chore(repo): update to 21.2 (#31340)
Update to the latest beta that includes Angular v20 support.
2025-05-26 13:18:03 -04:00
Nicholas Cunningham 5abcc662fa fix(core): generate workspace file readme typo (#31341)
Fixes typo in ReadMe file

closes: #31335
2025-05-26 16:21:03 +00:00
Nicholas Cunningham dfc8162db7 fix(module-federation): enhance remote entry handling with query parameters in paths (#30615)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
In Module Federation apps, when remotes are defined using URLs that
include query string or hash fragments (e.g. for cache busting), those
params are not preserved after the application is built.


## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
This PR ensures that query strings and hash fragments are preserved when
resolving or generating remote URLs.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30602
2025-05-26 09:25:32 -06:00
Leosvel Pérez Espinosa 752d418f78 feat(angular): support angular cli v20.0.0-rc.3 (#30715)
Add support for the Angular CLI **20.0.0-rc.3** version.
2025-05-26 10:00:47 -04:00
Nicholas Cunningham 07baaafb43 fix(react): routing option to library generator (#31328)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
When we try to generate a library with react it fails because `name` is
required.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
This should work out of the box.
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #30721
2025-05-26 08:14:00 -04:00
Juri ac226ef62b docs(nx-dev): fix issue on landing page and wording update 2025-05-26 10:04:36 +02:00
Benjamin Cabanes 3ea50eb0e7 docs(nx-dev): adjust Popover.Panel max-width in small screens (#31331)
Updated the `max-w` property to use `max-w-xl` by default and `xl:max-w-2xl` for larger screens.
2025-05-25 11:27:37 -04:00
Jonathan Cammisuli e2b3acaa37 fix(core): do not hide task list with run-many if there is only 1 task (#31324) 2025-05-24 01:28:00 +00:00
Caleb Ukle 85d4136811 docs(nx-cloud): improve info on setting access tokens in various CI providers (#31261)
## Current Behavior

talking about access tokens info is sparse in our docs

## Expected Behavior

more robust docs for setting up access tokens in CI

---------

Co-authored-by: Isaac Mann <isaacplmann@users.noreply.github.com>
Co-authored-by: Miroslav Jonaš <missing.manual@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-23 21:37:54 +00:00
Emily Xiong e01a18dee9 fix(gradle): change run and bootRun to cacheable false (#31287)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
currently, all tasks are cacheable

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
run and bootRun should not be cacheable

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-23 17:25:02 -04:00
Benjamin Cabanes 1e30f3d148 chore(nx-dev): update tagline across projects (#31318)
Aligned all instances of the tagline. Changes include documentation, metadata, UI content, test assertions, and other project assets.
2025-05-23 16:20:35 -04:00
Juri Strumpflohner 873f2d8046 feat(nx-dev): AI landing page (#31310)
adds a new AI landing page at `/ai`
2025-05-23 10:52:51 -04:00
Benjamin Cabanes 9fd51ed659 docs(nx-dev): update headings on solutions (#31316)
Revised the heading text from "Hear from developers like you" to "Don't just take our word for it".
2025-05-23 08:48:24 -04:00
Benjamin Cabanes 560a53e558 docs(nx-dev): clarify security mention of caching policies (#31312)
Clarified language on cache poisoning protection to emphasize trusted CI branches. Removed redundant content regarding personal access tied to identity providers for simplification.
2025-05-22 21:26:00 -04:00
Nicholas Cunningham 26110a6619 fix(react): add missing dependency when generating a react lib that has testing (#31308)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Currently, if we generate a react library with `--unitTestRunner` OOTB
it will fail when you run the `test` command because of a missing
dependency.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Generating a library with `--unitTestRunner` and then running that test
should work by default.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-22 16:53:50 -04:00
Jonathan Cammisuli 781a3ae424 chore(core): fix rust socket_path tests to be OS agnostic (#31298)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Rust tests did not pass on MacOS

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Rust tests now pass on MacOS

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-22 14:39:18 +00:00
Miroslav Jonaš d78782da49 fix(linter): speed up inferred plugin node processing (#31281)
This PR improves the **createNodes** function of eslint's inferred
plugin by making two pragmatic choices:
- reusing the ESLint between config file's runs instead of recreating
the new one every time
- skipping ignored files checks for projects that already have eslint
config file

## Results of benchmarks on customer's repo:

### Without ESLint plugin
- create-project-graph-async - avg. 11739.1326225 -> 11 seconds
### With current ESLint plugin
- create-project-graph-async - avg. 98005.0965135 -> 98 seconds
### With modified ESLint plugin
- create-project-graph-async - avg. 13225.073817  -> 13 seconds
  - (@nx/eslint/plugin:createNodes - 2206.96497, 16.69%)


## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-22 15:59:25 +02:00
Charlie Croom 3a33d5f54f fix(storybook): improve speed of storybook plugin (#31277)
## Current Behavior
#22953 updated the way that storybook parsing works to always do full TS
tree resolution instead of AST parsing. While this is more accurate,
it's orders of magnitude slower...creating a bottleneck in graph
creation for larger repos which use the plugin.

The only reason we need to do this complex functionality is to determine
if we use angular or not.

## Expected Behavior
Graph creation should be quite fast. 

This PR returns the old behavior, and uses the new behavior as an
additive fallback. In most cases this will result in extremely fast
parsing when the framework is defined inline, and in the failure case,
it will result in unnoticeably slower parsing as the incremental
difference is minor.

Before:
```
Time for '@nx/storybook/plugin:createNodes' 13536.203667
```

After:
```
Time for '@nx/storybook/plugin:createNodes' 292.584667
```

An alternative solve (at least in our case) would be to add an option to
skip angular detection...essentially letting people bypass the whole
reason for doing this config parsing. Although that's probably not a
sustainable option.

NOTE: A majority of the remaining slowness in this plugin is spent
hashing the files for the target cache. If we wanted to, we could
further speed this up by making some assumptions there...but that may
drastically harm repos which rely on the fully resolution behavior

## Related Issue(s)
Fixes #31276
2025-05-22 08:22:01 -04:00
Jack Hsu 7e0719cc0a fix(core): handle killing child processes of continuous tasks on Windows (#31296)
This PR fixes an issue where running `nx e2e <proj>` on Windows does not
kill the underlying dev/preview server when the e2e task ends.

Repro:
1. `npx create-nx-workspace@latest repro --preset=react-monorepo
--e2eTestRunner=playwright --appName=demo`
2. `cd repro && npx nx e2e demo-e2e`

This will leave the preview server running on port `4300`, and you have
to `netstat -ano | findstr :4300` to find the PID and kill it.

https://www.loom.com/share/fcbea53cdff543a98f4d4c8377027ee0

## Current Behavior
Continuous task does not kill the process correctly once discrete task
ends.

## Expected Behavior
Processes are killed correctly once task is done running.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #31235
2025-05-21 13:09:30 -04:00
Isaac Mann ca4ad45c84 docs(core): fix bitovi webinar title (#31302)
Fix Bitovi webinar title
2025-05-21 17:00:07 +00:00
Jack Hsu c0f2c4bb53 chore(repo): disable failing remix tests due to yarn errors (#31301)
This PR disables Remix+Yarn tests. It looks like the tests aren't set up
correctly, and we're using `yarn` even thought he workspace is set up
with pnpm.
2025-05-21 12:17:06 -04:00
Colum Ferry 1ab77c8a55 fix(module-federation): use runtimeChunk false when not in dev mode (#31256)
## Current Behavior
In #30637 `runtimeChunk: false` was removed to allow HMR for styles.

## Expected Behavior
We need to set runtimeChunk to false or multiple when working with MF.
https://github.com/nrwl/nx/issues/31114#issuecomment-2881996043

## Related Issue(s)

Fixes #31114
2025-05-21 14:34:40 +01:00
Colum Ferry 2ec086a4b6 chore(angular): ensure e2es with rspack builds are minimized (#31294)
## Current Behavior
The e2e tests running Angular Rspack are not having their builds
minimized currently.

## Expected Behavior
Ensure `NODE_ENV=production` is set when calling the build commands
2025-05-21 14:22:47 +01:00
Colum Ferry 43a20e2ecc feat(angular): add support for rspack module federation (#31231)
## Current Behavior
We currently have no method for generating Angular Rspack Module
Federation applications

## Expected Behavior
Update the `host` and `remote` generators to support a `--bundler` flag
to allow users to select Rspack as their bundler method
2025-05-21 09:45:58 +01:00
Caleb Ukle a52a4356df docs(nx-cloud): add install-aws-cli launch template step usage info (#31255)
## Current Behavior
aws cli usage in Nx Agents is undocumented

## Expected Behavior
aws cli step is documented for Nx Agents
preview:
https://nx-dev-git-docs-add-aws-cli-workflow-step-nrwl.vercel.app/ci/reference/launch-templates#aws-cli-on-nx-agents

---------

Co-authored-by: Nicole Oliver <nicole.oliver.42@gmail.com>
2025-05-20 13:32:54 +00:00
Jason Jean 9228e9f3d1 chore(repo): update nx to 21.1.0-beta.2 (#31262)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

This repo uses Nx `21.1.0-beta.1`

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

This repo uses Nx `21.1.0-beta.2`

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-20 09:32:36 -04:00
Emily Xiong da9d84c62a chore(core): increase verdaccio max_body_size to 20mb (#31260)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Got error: "413 Payload Too Large - PUT http://localhost:4873/nx -
request entity too large"
<img width="873" alt="Screenshot 2025-05-16 at 4 23 17 PM"
src="https://github.com/user-attachments/assets/fd151405-6f4a-4987-b9cd-63b5dc9cef2f"
/>


## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
increase body size to avoid this error

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-17 19:12:57 -04:00
Jason Jean fa654c6520 fix(core): prefer vertical layout categorically if there are less tha… (#31221)
…n 75 characters of width

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Auto layout is always based on an aspect ratio which lead to horizontal
layout even when there is very little horizontal space.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Auto layout prefers vertical layout with less than 75 characters of
width which will allow 50 characters (75 * 2/3) for terminal output. It
should be enough to show a URL in most cases:


![image](https://github.com/user-attachments/assets/0804d7ff-02aa-45e1-89f8-bd86b478f88e)

![image](https://github.com/user-attachments/assets/f2f04e3a-c306-4dea-bfca-66052dc28f20)


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-17 14:24:13 +00:00
Jason Jean c92b4a3d50 chore(repo): make sure that the ci pipeline runs on any release branches (#31257)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

Pipeline only runs on `master` and PRs

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

Pipeline runs on any release branches and PRs

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
2025-05-16 19:20:56 +00:00
6896 changed files with 378085 additions and 421695 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
[build]
target-dir = 'build/target'
target-dir = 'dist/target'
[target.x86_64-unknown-linux-musl]
rustflags = [
+47
View File
@@ -0,0 +1,47 @@
# Commit Command
## Description
Create a git commit following Nx repository standards and validation requirements.
## Usage
```bash
/commit [message]
```
## What this command does:
1. **Pre-commit validation**: Runs the full validation suite (`pnpm nx prepush`) to ensure code quality
2. **Formatting**: Automatically formats changed files with Prettier
3. **Testing**: Runs tests on affected projects to validate changes
4. **Commit creation**: Creates a well-formed commit with proper message formatting (without co-author attribution)
5. **Status reporting**: Provides clear feedback on the commit process
## Workflow:
1. Format any modified files with Prettier
2. Run the prepush validation suite
3. If validation passes, stage relevant changes
4. Create commit with descriptive message
5. Provide summary of what was committed
## Commit Message Format:
- Use conventional commit format when appropriate
- Include scope (e.g., `feat(core):`, `fix(angular):`, `docs(nx):`)
- Keep first line under 72 characters
- Include detailed description if needed
## Examples:
- `/commit "feat(core): add new project graph visualization"`
- `/commit "fix(react): resolve build issues with webpack config"`
- `/commit "docs(nx): update getting started guide"`
## Validation Requirements:
- All tests must pass
- Code must be properly formatted
- No linting errors
- E2E tests for affected areas should pass
+155
View File
@@ -0,0 +1,155 @@
# GitHub Issue Planning and Resolution
This command provides guidance for both automated and manual GitHub issue workflows.
## Automated Workflow (GitHub Actions)
The automated workflow consists of two phases:
### Phase 1: Planning (`@claude plan` or `claude:plan` label)
- Claude analyzes the issue and creates a detailed implementation plan
- Plan is posted as a comment on the issue
- Issue is labeled with `claude:planned`
### Phase 2: Implementation (`@claude implement` or `claude:implement` label)
- Claude implements the solution based on the plan
- Runs validation tests and creates a feature branch
- Suggests opening a PR with proper formatting
## Planning Phase Template
When creating a plan (either automated or manual), include these sections:
### Problem Analysis
- Root cause identification
- Impact assessment
- Related components or systems affected
### Proposed Solution
- High-level approach
- Alternative solutions considered
- Trade-offs and rationale
### Implementation Details
- Files that need to be modified
- Key changes required
- Dependencies or prerequisites
### Testing Strategy
- Unit tests to add/modify
- Integration tests needed
- E2E test considerations
### Validation Steps
```bash
# Test specific affected projects
nx run-many -t test,build,lint -p PROJECT_NAME
# Test all affected projects
nx affected -t build,test,lint
# Run affected e2e tests
nx affected -t e2e-local
# Format code
npx nx prettier -- FILES
# Final validation
pnpm nx prepush
```
### Risks and Considerations
- Breaking changes
- Performance implications
- Migration requirements
## Manual Workflow
When working on a GitHub issue manually, follow this systematic approach:
## 1. Get Issue Details
```bash
# Get issue details using GitHub CLI (replace ISSUE_NUMBER with actual number)
gh issue view ISSUE_NUMBER
```
When cloning reproduction repos, please clone within `./tmp/claude/repro-ISSUE_NUMBER`
## 2. Analyze the Plan
- Look for a plan or implementation details in the issue description
- Check comments for additional context or clarification
- Identify affected projects and components
## 3. Implement the Solution
- Follow the plan outlined in the issue
- Make focused changes that address the specific problem
- Ensure code follows existing patterns and conventions
## 4. Run Full Validation
```bash
# Test specific affected projects first
nx run-many -t test,build,lint -p PROJECT_NAME
# Test all affected projects
nx affected -t build,test,lint
# Run affected e2e tests
nx affected -t e2e-local
# Final pre-push validation
pnpm nx prepush
```
## 5. Submit Pull Request
- Create a descriptive PR title that references the issue
- Include "Fixes #ISSUE_NUMBER" in the PR description
- Provide a clear summary of changes made
- Request appropriate reviewers
## Pull Request Template
When creating a pull request, follow the template found in `.github/PULL_REQUEST_TEMPLATE.md`. The template includes:
### Required Sections
1. **Current Behavior**: Describe the behavior we have today
2. **Expected Behavior**: Describe the behavior we should expect with the changes in this PR
3. **Related Issue(s)**: Link the issue being fixed so it gets closed when the PR is merged
### Template Format
```markdown
## Current Behavior
<!-- This is the behavior we have today -->
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. -->
Fixes #ISSUE_NUMBER
```
### Guidelines
- Ensure your commit message follows the conventional commit format (use `pnpm commit`)
- Read the submission guidelines in CONTRIBUTING.md before posting
- For complex changes, you can request a dedicated Nx release by mentioning the Nx team
- Always link the related issue using "Fixes #ISSUE_NUMBER" to automatically close it when merged
+30
View File
@@ -0,0 +1,30 @@
# Claude Issue Workflow Usage Guide
## Quick Start
## Expected Outputs
### Planning Phase
- Detailed analysis comment posted to issue
- Implementation plan with steps and file changes
- Testing strategy and validation steps
- Risk assessment
### Implementation Phase
- Code changes made according to plan
- Tests run and validated
- Feature branch created: `fix/issue-{number}`
- PR suggestion with proper title format
## Manual Override
If you need to work on an issue manually, use the `/gh-issue-plan` command for structured guidance following the same workflow patterns.
## Troubleshooting
- Ensure you're on the authorized users list
- Check that the issue has sufficient detail for analysis
- For implementation, ensure a plan comment exists from the planning phase
- If workflows fail, check the Actions tab for detailed logs
+34
View File
@@ -0,0 +1,34 @@
{
"permissions": {
"allow": [
"Bash(find:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"WebFetch(domain:github.com)",
"WebFetch(domain:www.typescriptlang.org)",
"Bash(git log:*)",
"Bash(gh issue list:*)",
"Bash(gh issue view:*)",
"Bash(npx prettier:*)",
"Bash(nx prepush:*)",
"Bash(pnpm commit:*)",
"Bash(rg:*)",
"mcp__nx__nx_docs",
"mcp__nx__nx_workspace",
"mcp__nx__nx_project_details",
"Bash(nx show projects:*)",
"Bash(nx run-many:*)",
"Bash(nx run:*)",
"Bash(nx affected:*)",
"Bash(nx lint:*)",
"Bash(nx test:*)",
"Bash(nx build:*)",
"Bash(nx documentation:*)"
],
"deny": []
},
"enableAllProjectMcpServers": true,
"env": {
"BASH_MAX_TIMEOUT_MS": "1800000"
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ end_of_line = lf
insert_final_newline = true
# 4 space indentation
[*.{js,ts,jsx,tsx}]
[*.{kts,kt,js,ts,jsx,tsx}]
indent_style = space
indent_size = 2
+1 -1
View File
@@ -4,7 +4,7 @@
"env": {
"node": true
},
"ignorePatterns": ["**/*.ts"],
"ignorePatterns": ["**/*.ts", "**/test-output"],
"plugins": ["@typescript-eslint", "@nx"],
"extends": ["plugin:storybook/recommended"],
"rules": {
+10
View File
@@ -0,0 +1,10 @@
{
"mcpServers": {
"nx-mcp": {
"type": "stdio",
"command": "npx",
"args": ["nx", "mcp"]
}
},
"contextFileName": "AGENTS.md"
}
+3 -2
View File
@@ -3,7 +3,8 @@
#
# Linux start script should use lf
/gradlew text eol=lf
# These are Windows script files and should use crlf
*.bat text eol=crlf
# Exclude files from Graphite reviews
docs/generated/* linguist-generated=true
*.pdf,*.gif,*.mp4,*.webp,*.avif,*.png,*.jpeg,*.jpg,*.tiff filter=lfs diff=lfs merge=lfs -text
@@ -28,12 +28,12 @@ Note: We reserve the right to remove unmaintained plugins from the registry. If
## Steps to Submit Your Plugin
- Use the following commit message template: `chore(core): nx plugin submission [PLUGIN_NAME]`
- Update the `community/approved-plugins.json` file with a new entry for your plugin that includes `name`, `url`, `description`:
- Update the `astro-docs/src/content/approved-community-plugins.json` file with a new entry for your plugin that includes `name`, `url`, `description`:
Example:
```json
// community/approved-plugins.json
// astro-docs/src/content/approved-community-plugins.json
[{
"name": "@community/plugin",
@@ -42,7 +42,7 @@ Example:
}]
```
Once merged, your plugin will be available when running the `nx list` command, and will also be available in the Plugin Registry on [nx.dev](https://nx.dev/plugin-registry)
Once merged, your plugin will be available when running the `nx list` command, and will also be available in the Plugin Registry on [nx.dev](https://nx.dev/docs/plugin-registry)
-->
# Community Plugin Submission
+144 -32
View File
@@ -4,12 +4,14 @@ on:
push:
branches:
- master
- '[0-9]+.[0-9]+.x'
pull_request:
branches:
- "**"
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
PNPM_HOME: ~/.pnpm
jobs:
main-linux:
@@ -29,7 +31,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -39,12 +41,12 @@ jobs:
if: ${{ github.event_name == 'pull_request' }}
- name: Set SHAs
uses: nrwl/nx-set-shas@v4
uses: nrwl/nx-set-shas@1859e66a83ac9be0dceecbd9a023702e27ac47f4 # v4.3.3
with:
main-branch-name: 'master'
- name: Start CI Run
run: npx nx-cloud@next start-ci-run --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e"
run: npx nx-cloud@next start-ci-run --fix-tasks="!*check-commit*" --auto-apply-fixes="*format:check*,*sync:check*,*conformance:check*,*format-native*,*lint-native*,*lint*,*astro-docs:validate-links*" --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e"
- name: Install dependencies
run: |
@@ -52,31 +54,41 @@ jobs:
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Install Chrome
uses: browser-actions/setup-chrome@v1
uses: browser-actions/setup-chrome@2dbff04819ebbfd5c974947148805a825b8a07fd # v2.1.0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
cache: 'pnpm'
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@ac90e63697ac2784f4ecfe2964e1a285c304003a # v1
with:
rustflags: ''
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@48b5f213c81028ace310571dc5ec0fbbca0b2947 # v4.4.3
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Check Documentation
run: pnpm nx documentation
timeout-minutes: 20
- name: Nx Report
run:
pnpm nx report
- name: Run Checks/Lint/Test/Build
run: |
@@ -94,13 +106,16 @@ jobs:
pnpm nx run-many -t check-imports check-commit check-lock-files check-codeowners --parallel=1 --no-dte &
pids+=($!)
pnpm nx affected --targets=lint,test,build,e2e,e2e-ci,format-native,lint-native &
pnpm nx affected --targets=lint,test,test-kt,build,e2e,e2e-ci,format-native,lint-native &
pids+=($!)
for pid in "${pids[@]}"; do
wait "$pid"
done
timeout-minutes: 100
- name: Fix CI
run: pnpm nx-cloud fix-ci
if: failure()
main-macos:
runs-on: macos-latest
@@ -124,7 +139,7 @@ jobs:
if: always()
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -134,7 +149,7 @@ jobs:
if: ${{ github.event_name == 'pull_request' }}
- name: Restore Homebrew packages
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
/opt/homebrew
@@ -143,35 +158,132 @@ jobs:
- name: Configure Detox Environment, Install applesimutils
run: |
HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null
xcrun simctl shutdown all && xcrun simctl erase all
timeout-minutes: 20
# Ensure Xcode command line tools are installed and configured
xcode-select --print-path || sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app
# Install or update applesimutils with error handling
if ! brew list applesimutils &>/dev/null; then
echo "Installing applesimutils..."
HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null || {
echo "Failed to install applesimutils, retrying with update..."
brew update
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils
}
else
echo "Updating applesimutils..."
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade applesimutils || true
fi
# Verify applesimutils installation
applesimutils --version || (echo "applesimutils installation failed" && exit 1)
# Configure environment for M-series Mac
echo "DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer" >> $GITHUB_ENV
echo "PLATFORM_NAME=iOS Simulator" >> $GITHUB_ENV
# Set additional environment variables for better debugging
echo "DETOX_DISABLE_TELEMETRY=1" >> $GITHUB_ENV
echo "DETOX_LOG_LEVEL=trace" >> $GITHUB_ENV
# Verify Xcode installation
xcodebuild -version
# List available simulators
xcrun simctl list devices available
timeout-minutes: 10
continue-on-error: false
- name: Reset iOS Simulators
id: reset-simulators
run: |
echo "Resetting iOS Simulators..."
# Kill simulator processes
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
killall "Simulator" 2>/dev/null || true
killall "iOS Simulator" 2>/dev/null || true
# Wait for processes to terminate
sleep 3
# Shutdown and erase all simulators (ignore failures)
xcrun simctl shutdown all 2>/dev/null || true
sleep 5
xcrun simctl erase all 2>/dev/null || true
# If erase failed, try the nuclear option
if xcrun simctl list devices | grep -q "Booted" 2>/dev/null; then
echo "Standard reset failed, using nuclear option..."
rm -rf ~/Library/Developer/CoreSimulator/Devices/* 2>/dev/null || true
launchctl remove com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
sleep 3
fi
# Clean up additional directories
rm -rf ~/Library/Developer/CoreSimulator/Caches/* 2>/dev/null || true
rm -rf ~/Library/Logs/CoreSimulator/* 2>/dev/null || true
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null || true
echo "Simulator reset completed"
timeout-minutes: 5
continue-on-error: true
- name: Verify Simulator Reset
if: ${{ steps.reset-simulators.outcome == 'success' }}
run: |
# Verify CoreSimulator service restarted
pgrep -fl "CoreSimulator" || (echo "CoreSimulator service not running" && exit 1)
# Check simulator list is clean
xcrun simctl list devices
# Verify simulator runtime paths exist and are writable
test -d ~/Library/Developer/CoreSimulator/Devices || (echo "Simulator devices directory missing" && exit 1)
touch ~/Library/Developer/CoreSimulator/Devices/test || (echo "Simulator devices directory not writable" && exit 1)
rm ~/Library/Developer/CoreSimulator/Devices/test
timeout-minutes: 5
- name: Diagnose Simulator Reset Failure
if: ${{ steps.reset-simulators.outcome == 'failure' }}
run: |
echo "Simulator reset failed. Collecting diagnostic information..."
xcrun simctl list
echo "Checking simulator logs..."
ls -la ~/Library/Logs/CoreSimulator/ || echo "No simulator logs found"
- name: Save Homebrew Cache
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
/opt/homebrew
~/Library/Caches/Homebrew
key: nrwl-nx-homebrew-packages
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
cache: 'pnpm'
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@ac90e63697ac2784f4ecfe2964e1a285c304003a # v1
with:
rustflags: ''
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Set SHAs
uses: nrwl/nx-set-shas@v4
uses: nrwl/nx-set-shas@1859e66a83ac9be0dceecbd9a023702e27ac47f4 # v4.3.3
with:
main-branch-name: 'master'
+104
View File
@@ -0,0 +1,104 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
schedule:
- cron: '20 14 * * 6'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
# We would like to test our Java / Kotlin... but its currently failing. We can follow up.
# - language: java-kotlin
# build-mode: autobuild
- language: javascript-typescript
build-mode: none
- language: rust
build-mode: none
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
category: "/language:${{matrix.language}}"
+101
View File
@@ -0,0 +1,101 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
pull_request:
branches: [ "**" ]
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
# See comment in @./codeql-master.yml about Java / Kotlin
# - language: java-kotlin
# build-mode: autobuild
- language: javascript-typescript
build-mode: none
- language: rust
build-mode: none
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@15403aac29bd91419968e066cded66bde56b0283 # v3
with:
category: "/language:${{matrix.language}}"
upload: 'never'
upload-database: false
+181 -214
View File
@@ -2,7 +2,7 @@ name: E2E matrix
on:
schedule:
- cron: "0 5 * * *"
- cron: '0 5 * * *'
workflow_dispatch:
inputs:
debug_enabled:
@@ -14,7 +14,7 @@ on:
env:
CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cypress
permissions: { }
permissions: {}
jobs:
preinstall:
if: ${{ github.repository_owner == 'nrwl' }}
@@ -25,7 +25,8 @@ jobs:
os:
- ubuntu-latest
- macos-latest
- windows-latest
# - windows-latest Windows fails to build gradle wrapper which always runs when we build nx.
## https://staging.nx.app/runs/LgD4vxGn8w?utm_source=pull-request&utm_medium=comment
node_version:
- 20
- 22
@@ -36,38 +37,42 @@ jobs:
node_version: 22
# - os: macos-latest
# node_version: 23
- os: windows-latest
node_version: 22
# - os: windows-latest
# - os: windows-latest TODO (emily): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 22
# - os: windows-latest TODO (emily): Windows fails to build gradle wrapper which always runs when we build nx. Re-enable when we fix this.
# node_version: 23
name: Cache install (${{ matrix.os }}, node v${{ matrix.node_version }})
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Set node
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Cache node_modules
id: cache-modules
uses: actions/cache@v4
- name: Get pnpm store directory
id: pnpm-cache
run: echo 'path=$(pnpm store path)' >> $GITHUB_OUTPUT
- name: Cache pnpm store
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ hashFiles('pnpm-lock.yaml') }}
path: ${{ steps.pnpm-cache.outputs.path }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Ensure Python setuptools Installed on Macos
if: ${{ matrix.os == 'macos-latest' }}
@@ -75,17 +80,18 @@ jobs:
run: brew install python-setuptools
- name: Install packages
if: steps.cache-modules.outputs.cache-hit != 'true'
run: pnpm install --frozen-lockfile
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Homebrew cache directory path
if: ${{ matrix.os == 'macos-latest' }}
id: homebrew-cache-dir-path
run: echo "dir=$(brew --cache)" >> $GITHUB_OUTPUT
run: echo 'dir=$(brew --cache)' >> $GITHUB_OUTPUT
- name: Cache Homebrew
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
@@ -95,7 +101,7 @@ jobs:
- name: Cache Cypress
id: cache-cypress
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: '${{ github.workspace }}/.cypress'
@@ -114,15 +120,14 @@ jobs:
matrix: ${{ steps.process-json.outputs.MATRIX }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
- name: Process matrix data
id: process-json
run:
echo "MATRIX=$(npx tsx .github/workflows/nightly/process-matrix.ts | jq -c .)" >> $GITHUB_OUTPUT
run: echo 'MATRIX=$(npx tsx .github/workflows/nightly/process-matrix.ts | jq -c .)' >> $GITHUB_OUTPUT
e2e:
if: ${{ github.repository_owner == 'nrwl' }}
@@ -132,7 +137,7 @@ jobs:
permissions:
contents: read
runs-on: ${{ matrix.os }}
timeout-minutes: 70 # <- cap each job to 70 minutes
timeout-minutes: 200 # <- cap each job to 200 minutes
strategy:
matrix: ${{fromJson(needs.prepare-matrix.outputs.matrix)}} # Load matrix from previous job
fail-fast: false
@@ -140,7 +145,7 @@ jobs:
name: ${{ matrix.os_name }}/${{ matrix.package_manager }}/${{ matrix.node_version }} ${{ join(matrix.project) }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
@@ -148,14 +153,14 @@ jobs:
- name: Prepare dir for output
run: mkdir -p outputs
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
@@ -164,21 +169,28 @@ jobs:
if: ${{ matrix.os != 'windows-latest' }}
run: |
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
source "$HOME/.cargo/env"
source '$HOME/.cargo/env'
rustup toolchain install 1.70.0
- name: Load Cargo Env
if: ${{ matrix.os != 'windows-latest' }}
run: echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV
run: echo 'PATH=$HOME/.cargo/bin:$PATH' >> $GITHUB_ENV
- name: Setup .NET 9
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: '9.0.x'
- name: Install bun
if: ${{ matrix.os != 'windows-latest' }}
uses: oven-sh/setup-bun@v1
uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # v2.0.2
with:
bun-version: latest
- name: Install packages
run: pnpm install --frozen-lockfile
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Cleanup
if: ${{ matrix.os == 'ubuntu-latest' }}
@@ -187,19 +199,19 @@ jobs:
# https://github.com/actions/virtual-environments/issues/2840
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo rm -rf '/usr/local/share/boost'
sudo rm -rf '$AGENT_TOOLSDIRECTORY'
sudo apt-get install lsof
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- name: Homebrew cache directory path
if: ${{ matrix.os == 'macos-latest' }}
id: homebrew-cache-dir-path
run: echo "dir=$(brew --cache)" >> $GITHUB_OUTPUT
run: echo 'dir=$(brew --cache)' >> $GITHUB_OUTPUT
- name: Cache Homebrew
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
key: brew-${{ matrix.node_version }}
@@ -208,7 +220,7 @@ jobs:
- name: Cache Cypress
id: cache-cypress
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: '${{ github.workspace }}/.cypress'
key: ${{ runner.os }}-cypress
@@ -220,32 +232,109 @@ jobs:
- name: Configure Detox Environment, Install applesimutils
if: ${{ matrix.os == 'macos-latest' }}
run: |
# Check if applesimutils is already installed
# Ensure Xcode command line tools are installed and configured
xcode-select --print-path || sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app
# Install or update applesimutils with error handling
if ! brew list applesimutils &>/dev/null; then
echo 'Installing applesimutils...'
HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null || {
echo 'Failed to install applesimutils, retrying with update...'
brew update
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils
}
else
echo "applesimutils is already installed, skipping installation"
echo 'Updating applesimutils...'
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade applesimutils || true
fi
# Verify applesimutils installation
applesimutils --version || (echo 'applesimutils installation failed' && exit 1)
# Configure environment for M-series Mac
echo 'DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer' >> $GITHUB_ENV
echo 'PLATFORM_NAME=iOS Simulator' >> $GITHUB_ENV
# Set additional environment variables for better debugging
echo 'DETOX_DISABLE_TELEMETRY=1' >> $GITHUB_ENV
echo 'DETOX_LOG_LEVEL=trace' >> $GITHUB_ENV
# Verify Xcode installation
xcodebuild -version
timeout-minutes: 10
continue-on-error: false
- name: Reset iOS Simulators
if: ${{ matrix.os == 'macos-latest' }}
id: reset-simulators
run: |
xcrun simctl shutdown all && xcrun simctl erase all
echo 'Resetting iOS Simulators...'
# Kill simulator processes
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
killall 'Simulator' 2>/dev/null || true
killall 'iOS Simulator' 2>/dev/null || true
# Wait for processes to terminate
sleep 3
# Shutdown and erase all simulators (ignore failures)
xcrun simctl shutdown all 2>/dev/null || true
sleep 5
xcrun simctl erase all 2>/dev/null || true
# If erase failed, try the nuclear option
if xcrun simctl list devices | grep -q 'Booted' 2>/dev/null; then
echo 'Standard reset failed, using nuclear option...'
rm -rf ~/Library/Developer/CoreSimulator/Devices/* 2>/dev/null || true
launchctl remove com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
sleep 3
fi
# Clean up additional directories
rm -rf ~/Library/Developer/CoreSimulator/Caches/* 2>/dev/null || true
rm -rf ~/Library/Logs/CoreSimulator/* 2>/dev/null || true
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null || true
echo 'Simulator reset completed'
timeout-minutes: 5
continue-on-error: true
- name: Verify Simulator Reset
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success' }}
run: |
# Verify CoreSimulator service restarted
pgrep -fl 'CoreSimulator' || (echo 'CoreSimulator service not running' && exit 1)
# Verify simulator runtime paths exist and are writable
test -d ~/Library/Developer/CoreSimulator/Devices || (echo 'Simulator devices directory missing' && exit 1)
touch ~/Library/Developer/CoreSimulator/Devices/test || (echo 'Simulator devices directory not writable' && exit 1)
rm ~/Library/Developer/CoreSimulator/Devices/test
timeout-minutes: 5
- name: Diagnose Simulator Reset Failure
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'failure' }}
run: |
echo 'Simulator reset failed. Collecting diagnostic information...'
xcrun simctl list
echo 'Checking simulator logs...'
ls -la ~/Library/Logs/CoreSimulator/ || echo 'No simulator logs found'
- name: Configure git metadata (needed for lerna smoke tests)
if: ${{ (matrix.os != 'macos-latest') || (matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success') }}
run: |
git config --global user.email test@test.com
git config --global user.name "Test Test"
git config --global user.name 'Test Test'
- name: Set starting timestamp
if: ${{ (matrix.os != 'macos-latest') || (matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success') }}
id: before-e2e
shell: bash
run: |
echo "timestamp=$(date +%s)" >> $GITHUB_OUTPUT
echo 'timestamp=$(date +%s)' >> $GITHUB_OUTPUT
- name: Run e2e tests with pnpm (Linux/Windows)
id: e2e-run-pnpm
@@ -267,18 +356,18 @@ jobs:
npm_config_registry: http://localhost:4872
YARN_REGISTRY: http://localhost:4872
CI: true
- name: Run e2e tests with npm (macOS)
id: e2e-run-npm
if: ${{ matrix.os == 'macos-latest' }}
if: ${{ matrix.os == 'macos-latest' && steps.reset-simulators.outcome == 'success' }}
run: |
# Run the tests
if [[ "${{ matrix.project }}" == "e2e-detox" ]] || [[ "${{ matrix.project }}" == "e2e-react-native" ]] || [[ "${{ matrix.project }}" == "e2e-expo" ]]; then
if [[ '${{ matrix.project }}' == 'e2e-detox' ]] || [[ '${{ matrix.project }}' == 'e2e-react-native' ]] || [[ '${{ matrix.project }}' == 'e2e-expo' ]]; then
NX_E2E_VERBOSE_DEBUG=1 pnpm nx run ${{ matrix.project }}:e2e-macos-local
else
NX_E2E_VERBOSE_DEBUG=1 pnpm nx run ${{ matrix.project }}:e2e-local
fi
env:
NX_E2E_CI_CACHE_KEY: e2e-gha-${{ matrix.os }}-${{ matrix.node_version }}-${{ matrix.package_manager }}
NX_PERF_LOGGING: 'false'
@@ -302,17 +391,17 @@ jobs:
before=${{ steps.before-e2e.outputs.timestamp }}
now=$(date +%s)
delta=$(($now - $before))
# Determine the outcome based on which step ran
outcome="${{ matrix.os == 'macos-latest' && steps.e2e-run-npm.outcome || steps.e2e-run-pnpm.outcome }}"
outcome='${{ matrix.os == 'macos-latest' && steps.e2e-run-npm.outcome || steps.e2e-run-pnpm.outcome }}'
matrix=$((
echo '${{ toJSON(matrix) }}'
) | jq --argjson delta $delta -c '. + { "status": "'"$outcome"'", "duration": $delta }')
echo "$matrix" > 'outputs/matrix.json'
) | jq --argjson delta $delta -c '. + { 'status': '''$outcome''', 'duration': $delta }')
echo '$matrix' > 'outputs/matrix.json'
- name: Upload matrix config
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: ${{ always() }}
with:
name: ${{ matrix.os_name}}-${{ matrix.node_version}}-${{ matrix.package_manager}}-${{ matrix.project }}
@@ -322,201 +411,79 @@ jobs:
- name: Setup tmate session
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled && failure() }}
uses: mxschmitt/action-tmate@v3.8
uses: mxschmitt/action-tmate@1fb8b1023602bf1fd0e2994d7f1e93015cb5bbec # v3.22
timeout-minutes: 15
with:
sudo: ${{ matrix.os != 'windows-latest' }} # disable sudo for windows debugging
process-result:
if: ${{ always() && github.repository_owner == 'nrwl' }}
if: ${{ always() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
runs-on: ubuntu-latest
needs: e2e
timeout-minutes: 10
outputs:
message: ${{ steps.process-json.outputs.SLACK_MESSAGE }}
proj-duration: ${{ steps.process-json.outputs.SLACK_PROJ_DURATION }}
pm-duration: ${{ steps.process-json.outputs.SLACK_PM_DURATION }}
codeowners: ${{ steps.process-json.outputs.CODEOWNERS }}
message: ${{ steps.process-json.outputs.slack_message }}
proj_duration: ${{ steps.process-json.outputs.slack_proj_duration }}
pm_duration: ${{ steps.process-json.outputs.slack_pm_duration }}
codeowners: ${{ steps.process-json.outputs.codeowners }}
has_golden_failures: ${{ steps.process-json.outputs.has_golden_failures }}
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
filter: tree:0
- name: Prepare dir for output
run: mkdir -p outputs
- name: Load outputs
uses: actions/download-artifact@v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
path: outputs
- name: Join and stringify matrix configs
id: combine-json
run: |
combined=$((jq -s . outputs/*/matrix.json) | jq tostring)
echo "combined=$combined" >> $GITHUB_OUTPUT
combined=$(jq -sc . outputs/*/matrix.json)
echo 'combined=$combined' >> $GITHUB_OUTPUT
- name: Make slack outputs
- name: Process results with TypeScript script
id: process-json
uses: actions/github-script@v7
env:
GITHUB_TOKEN: ${{ github.token }}
with:
script: |
const combined = JSON.parse(${{ steps.combine-json.outputs.combined }});
const failedProjects = combined.filter(c => c.status === 'failure').sort((a, b) => a.project.localeCompare(b.project));
// codeowners
const codeowners = new Set();
failedProjects.forEach(c => {
codeowners.add(c.codeowners);
});
core.setOutput('CODEOWNERS', Array.from(codeowners).join(','));
function trimSpace(res) {
return res.split('\n').map((l) => l.trim()).join('\n');
}
// failed message
let lastProject;
let result = `
\`\`\`
| Failed project | PM | OS | Node |
|--------------------------------|------|-------|------|`;
failedProjects.forEach(matrix => {
const project = matrix.project !== lastProject ? matrix.project : '...';
result += `\n| ${project.padEnd(30)} | ${matrix.package_manager.padEnd(4)} | ${matrix.os_name} | v${matrix.node_version} |`
lastProject = matrix.project;
});
result += `\`\`\``;
core.setOutput('SLACK_MESSAGE', trimSpace(result));
console.log(trimSpace(result));
function humanizeDuration(num) {
let res = '';
const hours = Math.floor(num / 3600);
if (hours) {
res += `${hours}h `;
}
const mins = Math.floor((num % 3600) / 60);
if (mins) {
res += `${mins}m `;
}
const sec = num % 60;
if (sec) {
res += `${sec}s`
}
return res;
}
// duration message
const timeReport = {};
const pmReport = {
npm: 0,
yarn: 0,
pnpm: 0
};
const macosProjects = ['e2e-detox', 'e2e-expo', 'e2e-react-native'];
combined.forEach((matrix) => {
if (matrix.os_name === 'Linux' && matrix.node_version === 20) {
pmReport[matrix.package_manager] += matrix.duration;
}
if (matrix.os_name === 'Linux' || macosProjects.includes(matrix.project)) {
if (timeReport[matrix.project]) {
if (matrix.duration > timeReport[matrix.project].max) {
timeReport[matrix.project].max = matrix.duration;
timeReport[
matrix.project
].maxEnv = `${matrix.os_name}, ${matrix.package_manager}`;
}
if (matrix.duration < timeReport[matrix.project].min) {
timeReport[matrix.project].min = matrix.duration;
timeReport[
matrix.project
].minEnv = `${matrix.os_name}, ${matrix.package_manager}`;
}
} else {
timeReport[matrix.project] = {
min: matrix.duration,
max: matrix.duration,
minEnv: `${matrix.os_name}, ${matrix.package_manager}`,
maxEnv: `${matrix.os_name}, ${matrix.package_manager}`,
};
}
}
});
// project time report
let resultPkg = `
\`\`\`
| Project | Time |
|--------------------------------|---------------------------|`;
function mapProjectTime(proj, section) {
let res = '';
res += `${humanizeDuration(timeReport[proj][section])}`;
res += ` (${timeReport[proj][section + 'Env']})`
return res;
}
function durationIcon(proj, section) {
if (timeReport[proj][section] < 12 * 60) {
return `${section} ✅`;
}
if (timeReport[proj][section] < 15 * 60) {
return `${section} ❗`;
}
return `${section} ❌`;
}
Object.keys(timeReport).forEach(proj => {
resultPkg += `\n| ${proj.padEnd(30)} | |`;
resultPkg += `\n| ${durationIcon(proj, 'min').padStart(29)} | ${mapProjectTime(proj, 'min').padEnd(25)} |`;
resultPkg += `\n| ${durationIcon(proj, 'max').padStart(29)} | ${mapProjectTime(proj, 'max').padEnd(25)} |`;
});
resultPkg += `\`\`\``;
core.setOutput('SLACK_PROJ_DURATION', trimSpace(resultPkg));
// Print project duration report inline to allow reviewing on manual runs (when no slack message will be sent)
console.log(trimSpace(resultPkg));
let resultPm = `
\`\`\`
| PM | Total time |
|------|-------------|`;
Object.keys(pmReport).forEach(pm => {
resultPm += `\n| ${pm.padEnd(4)} | ${humanizeDuration(pmReport[pm]).padEnd(11)} |`
});
resultPm += `\`\`\``;
core.setOutput('SLACK_PM_DURATION', trimSpace(resultPm));
// Print package manager duration report inline to allow reviewing on manual runs (when no slack message will be sent)
console.log(trimSpace(resultPm));
run: |
echo '${{ steps.combine-json.outputs.combined }}' | npx tsx .github/workflows/nightly/process-result.ts
report-failure:
if: ${{ failure() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
if: ${{ always() && needs.process-result.outputs.has_golden_failures == 'true' && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
needs: process-result
runs-on: ubuntu-latest
name: Report failure
timeout-minutes: 10
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'failure'
message_format: '{emoji} Workflow has {status_message} ${{ needs.process-result.outputs.message }}'
notification_title: '{workflow}'
message_format: '${{ needs.process-result.outputs.message }}'
notification_title: 'Golden Test Failure'
footer: '<{run_url}|View Run> / Last commit <{commit_url}|{commit_sha}>'
mention_groups: ${{ needs.process-result.outputs.codeowners }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
report-success:
if: ${{ success() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
needs: e2e
if: ${{ always() && needs.process-result.outputs.has_golden_failures == 'false' && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
needs: process-result
runs-on: ubuntu-latest
name: Report status
timeout-minutes: 10
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: ${{ needs.e2e.result }}
message_format: '{emoji} Workflow has {status_message}'
notification_title: '{workflow}'
status: 'success'
message_format: '${{ needs.process-result.outputs.message }}'
notification_title: '✅ Golden Tests: All Passed!'
footer: '<{run_url}|View Run> / Last commit <{commit_url}|{commit_sha}>'
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
@@ -529,11 +496,11 @@ jobs:
name: Report duration per package manager
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'skipped'
message_format: '${{ needs.process-result.outputs.pm-duration }}'
notification_title: 'Total duration per package manager (ubuntu only)'
message_format: '${{ needs.process-result.outputs.pm_duration }}'
notification_title: 'Total duration per package manager (ubuntu only)'
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
@@ -542,13 +509,13 @@ jobs:
needs: process-result
runs-on: ubuntu-latest
timeout-minutes: 10
name: Report duration per package manager
name: Report duration per project
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: 'skipped'
message_format: '${{ needs.process-result.outputs.proj-duration }}'
notification_title: 'E2E Project duration stats'
message_format: '${{ needs.process-result.outputs.proj_duration }}'
notification_title: 'E2E Project duration stats'
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
+11 -7
View File
@@ -3,7 +3,7 @@ name: Generate embeddings
on:
schedule:
- cron: "0 5 * * 0,4" # sunday, thursday 5AM
workflow_dispatch:
jobs:
cache-and-install:
if: github.repository == 'nrwl/nx'
@@ -14,18 +14,19 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Install Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: '20.19.0'
package-manager-cache: false
- name: Install pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
id: pnpm-install
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Get pnpm store directory
@@ -35,7 +36,7 @@ jobs:
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
@@ -45,8 +46,11 @@ jobs:
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
- name: Build docs
run: npx nx build astro-docs
- name: Run embeddings script
run: pnpm exec nx run tools-documentation-create-embeddings:run-node
run: node --import tsx tools/documentation/create-embeddings/src/main.mts --mode=astro
env:
NX_NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NX_NEXT_PUBLIC_SUPABASE_URL }}
NX_SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.NX_SUPABASE_SERVICE_ROLE_KEY }}
+9 -8
View File
@@ -16,21 +16,21 @@ jobs:
name: Report status
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: 9.8.0
version: 10.11.1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v3
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: '20.19.0'
cache: 'pnpm'
- name: Cache node_modules
id: cache-modules
uses: actions/cache@v3
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
lookup-only: true
path: '**/node_modules'
@@ -41,11 +41,12 @@ jobs:
- name: Download artifact
id: download-artifact
uses: dawidd6/action-download-artifact@v2 # Needed since we are downloading artifact from a different workflow run, official actions/download-artifact doesn't support this.
uses: dawidd6/action-download-artifact@268677152d06ba59fcec7a7f0b5d961b6ccd7e1e # v2 # Needed since we are downloading artifact from a different workflow run, official actions/download-artifact doesn't support this.
with:
name: cached-issue-data
path: ${{ github.workspace }}/scripts/issues-scraper/cached
search_artifacts: true
allow_forks: false
continue-on-error: true
- name: Collect Issue Data
@@ -54,14 +55,14 @@ jobs:
env:
GITHUB_TOKEN: ${{ github.token }}
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: cached-issue-data
path: ./scripts/issues-scraper/cached/data.json
- name: Send GitHub Action trigger data to Slack workflow
id: slack
uses: slackapi/slack-github-action@v1.23.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
payload: ${{ steps.collect.outputs.SLACK_MESSAGE }}
env:
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
if: ${{ github.repository_owner == 'nrwl' }}
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v4
- uses: dessant/lock-threads@7de207be1d3ce97a9abe6ff1306222982d1ca9f9 # v5.0.1
id: lockthreads
with:
github-token: ${{ github.token }}
+60 -46
View File
@@ -1,6 +1,7 @@
type MatrixDataProject = {
name: string,
codeowners: string,
is_golden?: boolean, // true if this is a golden project, false otherwise
};
type MatrixDataOS = {
@@ -19,58 +20,70 @@ type MatrixData = {
setup: MatrixDataOS[],
}
// TODO: Extract Slack groups into named groups for easier maintenance
const matrixData: MatrixData = {
coreProjects: [
{ name: 'e2e-lerna-smoke-tests', codeowners: 'S04TNCVEETS' },
{ name: 'e2e-js', codeowners: 'S04SJ6HHP0X' },
{ name: 'e2e-nx-init', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-nx', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-release', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-workspace-create', codeowners: 'S04SYHYKGNP' }
],
projects: [
{ name: 'e2e-angular', codeowners: 'S04SS457V38' },
{ name: 'e2e-cypress', codeowners: 'S04T16BTJJY' },
{ name: 'e2e-detox', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-esbuild', codeowners: 'S04SJ6HHP0X' },
{ name: 'e2e-expo', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-gradle', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-jest', codeowners: 'S04T16BTJJY' },
{ name: 'e2e-eslint', codeowners: 'S04SYJGKSCT' },
{ name: 'e2e-next', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-node', codeowners: 'S04SJ6HHP0X' },
{ name: 'e2e-plugin', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-react', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-react-native', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-web', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-rollup', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-storybook', codeowners: 'S04SVQ8H0G5' },
{ name: 'e2e-playwright', codeowners: 'S04SVQ8H0G5' },
{ name: 'e2e-remix', codeowners: 'S04SVQ8H0G5' },
{ name: 'e2e-rspack', codeowners: 'S04SJ6HHP0X' },
{ name: 'e2e-vite', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-vue', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-nuxt', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-webpack', codeowners: 'S04SJ6PL98X' }
],
nodeTLS: 20,
setup: [
{ os: 'ubuntu-latest', os_name: 'Linux', os_timeout: 60, package_managers: ['npm', 'pnpm', 'yarn'], node_versions: ['20.19.0', "22.12.0"], excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo'] },
{ os: 'macos-latest', os_name: 'MacOS', os_timeout: 90, package_managers: ['npm'], node_versions: ['20.19.0'] },
{ os: 'windows-latest', os_name: 'WinOS', os_timeout: 180, package_managers: ['npm'], node_versions: ['20.19.0'], excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo'] }
]
};
const matrix: Array<{
export type MatrixItem = {
project: string,
codeowners: string,
node_version: number | string,
package_manager: string,
os: string,
os_name: string,
os_timeout: number
}> = [];
os_timeout: number,
is_golden?: boolean,
};
// TODO: Extract Slack groups into named groups for easier maintenance
const matrixData: MatrixData = {
coreProjects: [
{ name: 'e2e-lerna-smoke-tests', codeowners: 'S04TNCVEETS', is_golden: true },
{ name: 'e2e-js', codeowners: 'S04SJ6HHP0X', is_golden: true },
{ name: 'e2e-nx-init', codeowners: 'S04SYHYKGNP', is_golden: true },
{ name: 'e2e-nx', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-release', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-workspace-create', codeowners: 'S04SYHYKGNP' }
],
projects: [
{ name: 'e2e-cypress', codeowners: 'S04T16BTJJY', is_golden: true },
{ name: 'e2e-docker', codeowners: 'S04SJ6HHP0X', is_golden: true },
{ name: 'e2e-detox', codeowners: 'S04TNCNJG5N', is_golden: true },
{ name: 'e2e-esbuild', codeowners: 'S04SJ6HHP0X', is_golden: true },
{ name: 'e2e-gradle', codeowners: 'S04TNCNJG5N', is_golden: true },
{ name: 'e2e-eslint', codeowners: 'S04SYJGKSCT', is_golden: true },
{ name: 'e2e-node', codeowners: 'S04SJ6HHP0X', is_golden: true },
{ name: 'e2e-playwright', codeowners: 'S04SVQ8H0G5', is_golden: true },
{ name: 'e2e-remix', codeowners: 'S04SVQ8H0G5', is_golden: true },
{ name: 'e2e-rspack', codeowners: 'S04SJ6HHP0X', is_golden: true },
{ name: 'e2e-vite', codeowners: 'S04SJ6PL98X', is_golden: true },
{ name: 'e2e-vue', codeowners: 'S04SJ6PL98X', is_golden: true },
{ name: 'e2e-web', codeowners: 'S04SJ6PL98X', is_golden: true },
{ name: 'e2e-webpack', codeowners: 'S04SJ6PL98X', is_golden: true },
{ name: 'e2e-jest', codeowners: 'S04T16BTJJY', is_golden: true },
{ name: 'e2e-expo', codeowners: 'S04TNCNJG5N', is_golden: true },
{ name: 'e2e-react-native', codeowners: 'S04TNCNJG5N', is_golden: true },
{ name: 'e2e-angular', codeowners: 'S04SS457V38' },
{ name: 'e2e-next', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-plugin', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-react', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-rollup', codeowners: 'S04SJ6PL98X' },
{ name: 'e2e-storybook', codeowners: 'S04SVQ8H0G5' },
{ name: 'e2e-nuxt', codeowners: 'S04SJ6PL98X' }
],
nodeTLS: 20,
setup: [
{
os: 'ubuntu-latest',
os_name: 'Linux',
os_timeout: 60,
package_managers: ['npm', 'pnpm', 'yarn'],
node_versions: ['20.19.0', '22.12.0'],
excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo']
},
{ os: 'macos-latest', os_name: 'MacOS', os_timeout: 90, package_managers: ['npm'], node_versions: ['20.19.0'] }
// TODO (emily): Fix Windows support as gradle fails when running nx build https://staging.nx.app/runs/LgD4vxGn8w?utm_source=pull-request&utm_medium=comment
// { os: 'windows-latest', os_name: 'WinOS', os_timeout: 180, package_managers: ['npm'], node_versions: ['20.19.0'], excluded: ['e2e-detox', 'e2e-react-native', 'e2e-expo'] }
]
};
const matrix: Array<MatrixItem> = [];
function addMatrixCombo(project: MatrixDataProject, nodeVersion: number | string, pm: number, os: number) {
matrix.push({
@@ -81,6 +94,7 @@ function addMatrixCombo(project: MatrixDataProject, nodeVersion: number | string
os: matrixData.setup[os].os,
os_name: matrixData.setup[os].os_name,
os_timeout: matrixData.setup[os].os_timeout,
is_golden: !!project.is_golden // Mark golden projects as true, others as false
});
}
+197
View File
@@ -0,0 +1,197 @@
import * as fs from 'fs';
import { MatrixItem } from './process-matrix';
interface MatrixResult extends MatrixItem {
status: 'success' | 'failure' | 'cancelled';
duration: number;
}
interface ProcessedResults {
codeowners: string;
slack_message: string;
slack_proj_duration: string;
slack_pm_duration: string;
has_golden_failures: string;
}
function trimSpace(res: string): string {
return res.split('\n').map((l) => l.trim()).join('\n');
}
function humanizeDuration(num: number): string {
let res = '';
const hours = Math.floor(num / 3600);
if (hours) res += `${hours}h `;
const mins = Math.floor((num % 3600) / 60);
if (mins) res += `${mins}m `;
const sec = num % 60;
if (sec) res += `${sec}s`;
return res;
}
function processResults(combined: MatrixResult[]): ProcessedResults {
const failedProjects = combined.filter(c => c.status === 'failure' || c.status === 'cancelled').sort((a, b) => a.project.localeCompare(b.project));
const failedGoldenProjects = failedProjects.filter(c => c.is_golden);
const hasGoldenFailures = failedGoldenProjects.length > 0;
const codeowners = new Set<string>();
failedGoldenProjects.forEach(c => codeowners.add(c.codeowners));
let result = '';
const allGoldenProjects = combined.filter(c => c.is_golden);
const uniqueGoldenProjects = new Set(allGoldenProjects.map(c => c.project));
const uniqueFailedGoldenProjects = new Set(failedGoldenProjects.map(c => c.project));
const goldenPassingCount = uniqueGoldenProjects.size - uniqueFailedGoldenProjects.size;
const goldenFailingCount = uniqueFailedGoldenProjects.size;
const allOtherProjects = combined.filter(c => !c.is_golden);
const uniqueOtherProjects = new Set(allOtherProjects.map(c => c.project));
const failedRegularProjects = failedProjects.filter(c => !c.is_golden);
const uniqueFailedOtherProjects = new Set(failedRegularProjects.map(c => c.project));
const otherPassingCount = uniqueOtherProjects.size - uniqueFailedOtherProjects.size;
const otherFailingCount = uniqueFailedOtherProjects.size;
result += `\n🌟 *Golden Projects*`;
result += `\n✅ Passing: ${goldenPassingCount}`;
result += `\n❌ Failing: ${goldenFailingCount}`;
if (failedGoldenProjects.length > 0) {
result += `\n\n🚨 *Failed Golden Projects*\n\`\`\``;
result += `\n| Failed project |`;
result += `\n|--------------------------------|`;
let lastProject: string | undefined;
failedGoldenProjects.forEach(matrix => {
const project = matrix.project !== lastProject ? matrix.project : '';
if (project) {
result += `\n| ${project.padEnd(30)} |`;
lastProject = matrix.project;
}
});
result += `\n\`\`\``;
}
result += `\n\n🔧 *Other Projects*`;
result += `\n✅ Passing: ${otherPassingCount}`;
result += `\n❌ Failing: ${otherFailingCount}`;
// Failed Other Projects Table (if any)
if (failedRegularProjects.length > 0) {
result += `\n\n⚠️ *Failed Other Projects*\n\`\`\``;
result += `\n| Failed project |`;
result += `\n|--------------------------------|`;
let lastProject: string | undefined;
failedRegularProjects.forEach(matrix => {
const project = matrix.project !== lastProject ? matrix.project : '';
if (project) {
result += `\n| ${project.padEnd(30)} |`;
lastProject = matrix.project;
}
});
result += `\n\`\`\``;
}
if (failedProjects.length === 0) {
result = '🎉 *No test failures detected!* All systems green! 🟢';
}
const timeReport: Record<string, { min: number; max: number; minEnv: string; maxEnv: string }> = {};
const pmReport = { npm: 0, yarn: 0, pnpm: 0 };
const macosProjects = ['e2e-detox', 'e2e-expo', 'e2e-react-native'];
combined.forEach(matrix => {
const nodeVersion = parseInt(matrix.node_version.toString());
if (matrix.os_name === 'Linux' && nodeVersion === 20 && matrix.package_manager in pmReport) {
pmReport[matrix.package_manager as keyof typeof pmReport] += matrix.duration;
}
if (matrix.os_name === 'Linux' || macosProjects.includes(matrix.project)) {
if (timeReport[matrix.project]) {
if (matrix.duration > timeReport[matrix.project].max) {
timeReport[matrix.project].max = matrix.duration;
timeReport[matrix.project].maxEnv = `${matrix.os_name}, ${matrix.package_manager}`;
}
if (matrix.duration < timeReport[matrix.project].min) {
timeReport[matrix.project].min = matrix.duration;
timeReport[matrix.project].minEnv = `${matrix.os_name}, ${matrix.package_manager}`;
}
} else {
timeReport[matrix.project] = {
min: matrix.duration,
max: matrix.duration,
minEnv: `${matrix.os_name}, ${matrix.package_manager}`,
maxEnv: `${matrix.os_name}, ${matrix.package_manager}`,
};
}
}
});
let resultPkg = `
\`\`\`
| Project | Time |
|--------------------------------|---------------------------|`;
function mapProjectTime(proj: string, section: 'min' | 'max'): string {
return `${humanizeDuration(timeReport[proj][section])} (${timeReport[proj][`${section}Env`]})`;
}
function durationIcon(proj: string, section: 'min' | 'max'): string {
const duration = timeReport[proj][section];
if (duration < 12 * 60) return `${section}`;
if (duration < 15 * 60) return `${section}`;
return `${section}`;
}
Object.keys(timeReport).forEach(proj => {
resultPkg += `\n| ${proj.padEnd(30)} | |`;
resultPkg += `\n| ${durationIcon(proj, 'min').padStart(29)} | ${mapProjectTime(proj, 'min').padEnd(25)} |`;
resultPkg += `\n| ${durationIcon(proj, 'max').padStart(29)} | ${mapProjectTime(proj, 'max').padEnd(25)} |`;
});
resultPkg += `\`\`\``;
let resultPm = `
\`\`\`
| PM | Total time |
|------|-------------|`;
Object.keys(pmReport).forEach(pm => {
resultPm += `\n| ${pm.padEnd(4)} | ${humanizeDuration(pmReport[pm as keyof typeof pmReport]).padEnd(11)} |`;
});
resultPm += `\`\`\``;
return {
codeowners: Array.from(codeowners).join(','),
slack_message: trimSpace(result),
slack_proj_duration: trimSpace(resultPkg),
slack_pm_duration: trimSpace(resultPm),
has_golden_failures: hasGoldenFailures.toString(),
};
}
function setOutput(key: string, value: string) {
const outputPath = process.env.GITHUB_OUTPUT;
if (!outputPath) {
console.warn(`GITHUB_OUTPUT not set. Skipping output for "${key}".`);
return;
}
if (value.includes('\n')) {
const delimiter = `EOF_${key}_${Date.now()}`;
fs.appendFileSync(outputPath, `${key}<<${delimiter}\n${value}\n${delimiter}\n`);
} else {
fs.appendFileSync(outputPath, `${key}=${value}\n`);
}
}
try {
const combinedInput = process.argv[2]
? process.argv[2]
: fs.readFileSync(0, 'utf-8').trim();
const combined: MatrixResult[] = JSON.parse(combinedInput);
const results = processResults(combined);
Object.entries(results).forEach(([key, value]) => {
setOutput(key, value);
});
} catch (error) {
console.error('Error processing results:', error);
process.exit(1);
}
+4 -4
View File
@@ -14,11 +14,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: 9.8.0 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
version: 10.11.1 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
- name: Run a security audit
run: pnpm dlx audit-ci --critical --report-type summary
@@ -30,7 +30,7 @@ jobs:
name: Report status
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: ${{ needs.audit.result }}
message_format: '{emoji} Audit has {status_message}'
+30
View File
@@ -0,0 +1,30 @@
name: PR Title Validation
on:
pull_request:
types: [opened, edited, synchronize, reopened]
permissions: read-all
jobs:
validate-pr-title:
name: Validate PR Title
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Ensure's validate-pr-title.js is the copy from master
ref: master
- name: Setup Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
package-manager-cache: false
- name: Validate PR title
env:
PR_TITLE: ${{ github.event.pull_request.title }}
PR_BODY: ${{ github.event.pull_request.body }}
run: node ./scripts/validate-pr-title.js
+273 -94
View File
@@ -3,7 +3,7 @@ name: publish
on:
# Automated schedule - canary releases from master
schedule:
- cron: "0 3 * * 2-6" # Tuesdays - Saturdays, at 3am UTC
- cron: "0 20 * * 1-5" # Monday - Friday, at 20:00 UTC (8pm UTC)
# Manual trigger - PR releases or dry-runs (based on workflow inputs)
workflow_dispatch:
inputs:
@@ -21,8 +21,8 @@ env:
DEBUG: napi:*
NX_RUN_GROUP: ${{ github.run_id }}-${{ github.run_attempt }}
CYPRESS_INSTALL_BINARY: 0
NODE_VERSION: 20.19.0
PNPM_VERSION: 9.8.0 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
NODE_VERSION: 22.16.0
PNPM_VERSION: 10.11.1 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
jobs:
# We first need to determine the version we are releasing, and if we need a custom repo or ref to use for the git checkout in subsequent steps.
@@ -37,7 +37,7 @@ jobs:
# ref resolution in actions/checkout. The exact version will be generated within scripts/nx-release.ts.
#
# - workflow_dispatch:
# - We are either running a dry-run on the current branch, in which case the version will be statica and we can use
# - We are either running a dry-run on the current branch, in which case the version will be static and we can use
# default ref resolution in actions/checkout, or we are creating a PR release for the given PR number, in which case
# we should generate an applicable version number within publish-resolve-data.js and use a custom ref of the PR branch name.
resolve-required-data:
@@ -51,31 +51,23 @@ jobs:
publish_branch: ${{ steps.script.outputs.publish_branch }}
ref: ${{ steps.script.outputs.ref }}
repo: ${{ steps.script.outputs.repo }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
pr_number: ${{ steps.script.outputs.pr_number }}
pr_author: ${{ steps.script.outputs.pr_author }}
steps:
# Default checkout on the triggering branch so that the latest publish-resolve-data.js script is available
- uses: actions/checkout@v4
# Set up pnpm and node so that we can verify our setup and that the NPM_TOKEN secret will work later
- uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
check-latest: true
# Ensure that the NPM_TOKEN secret is still valid before wasting any time deriving data or building projects
- name: Check NPM Credentials
run: npm whoami && echo "NPM credentials are valid" || (echo "NPM credentials are invalid or have expired." && exit 1)
package-manager-cache: false
- name: Resolve and set checkout and version data to use for release
id: script
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
PR_NUMBER: ${{ github.event.inputs.pr }}
with:
@@ -86,7 +78,7 @@ jobs:
- name: (PR Release Only) Check out latest master
if: ${{ steps.script.outputs.ref != '' }}
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Check out the latest master branch to get its copy of nx-release.ts
repository: nrwl/nx
@@ -95,24 +87,31 @@ jobs:
- name: (PR Release Only) Check out PR branch
if: ${{ steps.script.outputs.ref != '' }}
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# Check out the PR branch to get its copy of nx-release.ts
repository: ${{ steps.script.outputs.repo }}
ref: ${{ steps.script.outputs.ref }}
path: pr-branch-checkout
- name: (PR Release Only) Ensure that nx-release.ts has not changed in the PR being released
- name: (PR Release Only) Ensure that release scripts have not changed in the PR being released
if: ${{ steps.script.outputs.ref != '' }}
env:
FILE_TO_COMPARE: "scripts/nx-release.ts"
run: |
if ! cmp -s "latest-master-checkout/${{ env.FILE_TO_COMPARE }}" "pr-branch-checkout/${{ env.FILE_TO_COMPARE }}"; then
echo "🛑 Error: The file ${{ env.FILE_TO_COMPARE }} is different on the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} vs latest master on nrwl/nx, cancelling workflow. If you did not modify the file, then you likely just need to rebase/merge latest master."
exit 1
else
echo "✅ The file ${{ env.FILE_TO_COMPARE }} is identical between the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} and latest master on nrwl/nx."
fi
# List of files that must not change in PR releases
FILES_TO_CHECK=(
"scripts/nx-release.ts"
"scripts/publish-resolve-data.js"
)
for FILE in "${FILES_TO_CHECK[@]}"; do
if ! cmp -s "latest-master-checkout/$FILE" "pr-branch-checkout/$FILE"; then
echo "🛑 Error: The file $FILE is different on the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} vs latest master on nrwl/nx, cancelling workflow."
echo "If you did not modify the file, then you likely just need to rebase/merge latest master."
exit 1
else
echo "✅ The file $FILE is identical between the ${{ steps.script.outputs.ref }} branch on ${{ steps.script.outputs.repo }} and latest master on nrwl/nx."
fi
done
build:
needs: [ resolve-required-data ]
@@ -129,8 +128,13 @@ jobs:
pnpm nx run-many --target=build-native -- --target=x86_64-apple-darwin
- host: windows-latest
setup: |-
choco install openjdk --version=21.0.0 -y
rustup target add aarch64-pc-windows-msvc
build: pnpm nx run-many --target=build-native -- --target=x86_64-pc-windows-msvc
build: |
export JAVA_HOME="C:\Program Files\OpenJDK\jdk-21"
export PATH="$JAVA_HOME\bin:$PATH"
java -version
pnpm nx run-many --target=build-native -- --target=x86_64-pc-windows-msvc
target: x86_64-pc-windows-msvc
# Windows 32bit (not needed)
# - host: windows-latest
@@ -140,23 +144,61 @@ jobs:
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
rustup target add aarch64-unknown-linux-gnu &&
build: |
set -e
apt-get update
# Install Java 21
apt-get install -y openjdk-21-jdk
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs=22.16.0-1nodesource1
export PATH="/usr/local/bin:$PATH"
node --version
npm --version
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
pnpm install --frozen-lockfile
rustup target add x86_64-unknown-linux-gnu
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-gnu
- host: ubuntu-latest
target: x86_64-unknown-linux-musl
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
rustup target add x86_64-unknown-linux-musl &&
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-musl
build: |
bash -c "
set -e
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache curl xz openjdk21
# Set up Java 21
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export PATH=\"\$JAVA_HOME/bin:\$PATH\"
java --version
curl -fsSL https://unofficial-builds.nodejs.org/download/release/v22.16.0/node-v22.16.0-linux-x64-musl.tar.xz -o node.tar.xz
tar -xJf node.tar.xz
mv node-v22.16.0-linux-x64-musl /usr/local/node
export PATH=\"/usr/local/node/bin:\$PATH\"
echo Node: \$(node -v)
echo NPM: \$(npm -v)
# Install PNPM
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
# Install deps and run native build
pnpm install --frozen-lockfile
rustup target add x86_64-unknown-linux-musl
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-musl
"
- host: macos-13
target: aarch64-apple-darwin
setup: |-
@@ -171,12 +213,28 @@ jobs:
- host: ubuntu-latest
target: aarch64-unknown-linux-gnu
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
rustup target add aarch64-unknown-linux-gnu &&
build: |
set -e
apt-get update
# Install Java 21
apt-get install -y openjdk-21-jdk
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs=22.16.0-1nodesource1
export PATH="/usr/local/bin:$PATH"
node --version
npm --version
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
pnpm install --frozen-lockfile
rustup target add aarch64-unknown-linux-gnu
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-gnu
- host: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
@@ -198,32 +256,59 @@ jobs:
- host: ubuntu-latest
target: aarch64-unknown-linux-musl
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |-
set -e &&
rustup target add aarch64-unknown-linux-musl &&
npm i -g pnpm@9.8.0 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-musl
build: |
bash -c "
set -e
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
apk add --no-cache curl xz openjdk21
# Set up Java 21
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export PATH=\"\$JAVA_HOME/bin:\$PATH\"
java --version
curl -fsSL https://unofficial-builds.nodejs.org/download/release/v22.16.0/node-v22.16.0-linux-x64-musl.tar.xz -o node.tar.xz
tar -xJf node.tar.xz
mv node-v22.16.0-linux-x64-musl /usr/local/node
export PATH=\"/usr/local/node/bin:\$PATH\"
echo Node: \$(node -v)
echo NPM: \$(npm -v)
# Install PNPM
npm i -g pnpm@${PNPM_VERSION} --force
pnpm --version
# Install deps and run native build
pnpm install --frozen-lockfile
rustup target add aarch64-unknown-linux-musl
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-musl
"
- host: windows-latest
target: aarch64-pc-windows-msvc
setup: |-
choco install openjdk --version=21.0.0 -y
rustup target add aarch64-pc-windows-msvc
build: pnpm nx run-many --target=build-native -- --target=aarch64-pc-windows-msvc
name: stable - ${{ matrix.settings.target }} - node@18
build: |
export JAVA_HOME="C:\Program Files\OpenJDK\jdk-21"
export PATH="$JAVA_HOME\bin:$PATH"
java -version
pnpm nx run-many --target=build-native -- --target=aarch64-pc-windows-msvc
name: stable - ${{ matrix.settings.target }} - node@22.16.0
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
if: ${{ !matrix.settings.docker }}
with:
node-version: ${{ env.NODE_VERSION }}
@@ -231,13 +316,14 @@ jobs:
cache: 'pnpm'
- name: Install
uses: dtolnay/rust-toolchain@stable
uses: actions-rust-lang/setup-rust-toolchain@ac90e63697ac2784f4ecfe2964e1a285c304003a # v1
if: ${{ !matrix.settings.docker }}
with:
targets: ${{ matrix.settings.target }}
target: ${{ matrix.settings.target }}
rustflags: ''
- name: Cache cargo
uses: actions/cache@v4
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/.cargo/registry/index/
@@ -247,7 +333,7 @@ jobs:
target/
key: ${{ matrix.settings.target }}-cargo-registry
- uses: goto-bus-stop/setup-zig@v2
- uses: goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406 # v2.2.1
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
with:
version: 0.10.0
@@ -268,7 +354,7 @@ jobs:
timeout-minutes: 30
- name: Setup node x86
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
if: matrix.settings.target == 'i686-pc-windows-msvc'
with:
node-version: ${{ env.NODE_VERSION }}
@@ -277,7 +363,7 @@ jobs:
architecture: x86
- name: Build in docker
uses: addnab/docker-run-action@v3
uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3
if: ${{ matrix.settings.docker }}
with:
image: ${{ matrix.settings.docker }}
@@ -290,12 +376,12 @@ jobs:
shell: bash
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: bindings-${{ matrix.settings.target }}
path: |
packages/**/*.node
packages/**/*.wasm
packages/nx/src/native/*.node
packages/nx/src/native/*.wasm
if-no-files-found: error
build-freebsd:
@@ -305,30 +391,35 @@ jobs:
name: Build FreeBSD
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- name: Build
id: build
uses: cross-platform-actions/action@v0.25.0
uses: cross-platform-actions/action@462ed697694d2ac9aa49e1225f395f7bb6dd49fe # v0.29.0
env:
DEBUG: napi:*
RUSTUP_IO_THREADS: 1
NX_PREFER_TS_NODE: true
PLAYWRIGHT_BROWSERS_PATH: 0
NODE_VERSION: 22.16.0
with:
operating_system: freebsd
version: '14.0'
architecture: x86-64
environment_variables: DEBUG RUSTUP_IO_THREADS CI NX_PREFER_TS_NODE PLAYWRIGHT_BROWSERS_PATH
environment_variables: DEBUG RUSTUP_IO_THREADS CI NX_PREFER_TS_NODE PLAYWRIGHT_BROWSERS_PATH NODE_VERSION
shell: bash
run: |
env
whoami
sudo pkg install -y -f node libnghttp2 www/npm git
sudo npm install --location=global --ignore-scripts pnpm@9.8.0
sudo pkg install -y -f node libnghttp2 www/npm git openjdk17
sudo npm install --location=global --ignore-scripts pnpm@10.11.1
# Set up Java 17
export JAVA_HOME=/usr/local/openjdk17
export PATH="$JAVA_HOME/bin:$PATH"
java --version
curl https://sh.rustup.rs -sSf --output rustup.sh
sh rustup.sh -y --profile minimal --default-toolchain stable
source "$HOME/.cargo/env"
@@ -343,8 +434,59 @@ jobs:
whoami
env
freebsd-version
echo "Installing dependencies"
pnpm install --frozen-lockfile --ignore-scripts
echo "Checking disk space before cleanup"
df -h
echo "Removing unnecessary preinstalled packages"
# List all packages first to see what's installed
sudo pkg info -a
echo "Cleaning up to free disk space"
# Clean package caches
sudo pkg clean -a -y
sudo pkg autoremove -y
# Remove unnecessary system files
sudo rm -rf /usr/local/lib/*.a
sudo rm -rf /usr/local/share/doc/*
sudo rm -rf /usr/local/share/man/*
sudo rm -rf /usr/local/share/examples/*
sudo rm -rf /usr/local/share/locale/*
sudo rm -rf /usr/local/share/gtk-doc/*
sudo rm -rf /usr/local/share/info/*
sudo rm -rf /usr/src/*
sudo rm -rf /usr/obj/*
sudo rm -rf /usr/tests/*
sudo rm -rf /usr/lib/debug/*
# Clean var directories
sudo rm -rf /var/cache/pkg/*
sudo rm -rf /var/db/pkg/*.tbz
sudo rm -rf /var/log/*.log
sudo rm -rf /var/log/*.old
# Clean temporary files
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# Remove Python cache if present
sudo find /usr/local -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
sudo find /usr/local -name "*.pyc" -delete 2>/dev/null || true
sudo find /usr/local -name "*.pyo" -delete 2>/dev/null || true
# Clean npm/pnpm caches
npm cache clean --force || true
pnpm store prune || true
rm -rf ~/.npm || true
rm -rf ~/.pnpm-store || true
# Remove Rust build artifacts if any
rm -rf ~/.cargo/registry || true
rm -rf ~/.cargo/git || true
rm -rf ~/.rustup/toolchains/*/share || true
# Remove other development tool caches
rm -rf ~/.cache/* || true
echo "Checking disk space after cleanup"
df -h
echo "Building FreeBSD bindings"
pnpm nx run-many --verbose --outputStyle stream --target=build-native -- --target=x86_64-unknown-freebsd
echo "Cleaning up"
pnpm nx reset
rm -rf node_modules
rm -rf dist
@@ -353,16 +495,18 @@ jobs:
echo "COMPLETE"
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: bindings-freebsd
path: packages/**/*.node
path: |
packages/nx/src/native/*.node
if-no-files-found: error
publish:
if: ${{ github.repository_owner == 'nrwl' }}
name: Publish
runs-on: ubuntu-latest
environment: npm-registry
permissions:
id-token: write
contents: write
@@ -373,31 +517,32 @@ jobs:
- build
env:
GH_TOKEN: ${{ github.token }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: ${{ needs.resolve-required-data.outputs.repo }}
ref: ${{ needs.resolve-required-data.outputs.ref }}
repository: ${{ needs.resolve-required-data.outputs.repo || github.repository }}
ref: ${{ needs.resolve-required-data.outputs.ref || github.ref }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
check-latest: true
cache: 'pnpm'
- name: Use npm 11.5.2
run: npm install -g npm@11.5.2
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Download all artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
path: artifacts
@@ -433,11 +578,11 @@ jobs:
- name: (PR Release Only) Create comment for successful PR release
if: success() && github.event.inputs.pr
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
SUCCESS_COMMENT: ${{ needs.resolve-required-data.outputs.success_comment }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# github-token defaults to ${{ github.token }} so we don't need to specify it
script: |
const successComment = JSON.parse(process.env.SUCCESS_COMMENT);
await github.rest.issues.createComment({
@@ -447,22 +592,55 @@ jobs:
body: successComment
});
report-pending-publish:
name: Report Pending Publish to Slack
if: ${{ github.repository_owner == 'nrwl' }}
needs:
- resolve-required-data
- build-freebsd
- build
runs-on: ubuntu-latest
timeout-minutes: 10
continue-on-error: true # Don't fail the workflow if notification fails
steps:
- name: Send Slack notification
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v11
with:
status: ${{ job.status }}
notification_title: >-
${{ needs.resolve-required-data.outputs.pr_number &&
format('📦 PR #{0} Publish Pending Review', needs.resolve-required-data.outputs.pr_number) ||
'📦 Publish Pending Review' }}
message_format: >-
${{ needs.resolve-required-data.outputs.pr_number &&
format('Version {0} from PR #{1} by @{2} is being published to NPM - manual review is required',
needs.resolve-required-data.outputs.version,
needs.resolve-required-data.outputs.pr_number,
needs.resolve-required-data.outputs.pr_author) ||
format('Version {0} is being published to NPM - manual review is required',
needs.resolve-required-data.outputs.version) }}
footer: '<{run_url}|View Workflow Run>'
mention_users: 'U9NPA6C90' # Jason
env:
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }}
pr_failure_comment:
# Run this job if it is a PR release, running on the nrwl origin, and any of the required jobs failed
if: ${{ github.repository_owner == 'nrwl' && github.event.inputs.pr && always() && contains(needs.*.result, 'failure') }}
needs: [ resolve-required-data, build, build-freebsd, publish ]
name: (PR Release Failure Only) Create comment for failed PR release
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Create comment for failed PR release
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# This script is intentionally kept inline (and e.g. not generated in publish-resolve-data.js)
# to ensure that an error within the data generation itself is not missed.
script: |
const message = `
Failed to publish a PR release of this pull request, triggered by @${{ github.triggering_actor }}.
Failed to publish a PR release of this pull request, triggered by @${{ github.triggering_actor }}.
See the failed workflow run at: https://github.com/nrwl/nx/actions/runs/${{ github.run_id }}
`;
await github.rest.issues.createComment({
@@ -471,3 +649,4 @@ jobs:
issue_number: ${{ github.event.inputs.pr }},
body: message
});
+5 -5
View File
@@ -19,7 +19,7 @@ jobs:
# This handles issues that need more info
- name: stale-more-info-needed
id: stale-more-info-needed
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -37,7 +37,7 @@ jobs:
# This handles PRs that need to be rebased
- name: stale-needs-rebase
id: stale-needs-rebase
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -56,7 +56,7 @@ jobs:
# This handles issues that do not have a repro
- name: stale-repro-needed
id: stale-repro-needed
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -75,7 +75,7 @@ jobs:
- name: stale-retry-with-latest
id: stale-retry-with-latest
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 7
@@ -95,7 +95,7 @@ jobs:
# This handles issues are really old and were made with a previous major
- name: stale-bug
id: stale-bug
uses: actions/stale@v9.0.0
uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 180
+59 -5
View File
@@ -2,8 +2,8 @@ node_modules
/.idea
/.fleet
/.vscode
/.cursor
dist
out-tsc
/build
/coverage
./test
@@ -13,7 +13,8 @@ tmp
jest.debug.config.js
.tool-versions
/.nx-cache
/.nx
/.nx/cache
/.nx/workspace-data
/.verdaccio/build/local-registry
/graph/client/src/assets/environment.js
/graph/client/src/assets/dev/environment.js
@@ -36,6 +37,7 @@ CHANGELOG.md
.next
out
# Angular Cache
.angular
@@ -50,8 +52,6 @@ out
# Fix for issue when working on the repo in a dev container
.pnpm-store
.nx
!.nx/workflows
.cargo/.package-cache
.cargo/bin/
@@ -73,5 +73,59 @@ storybook-static
.gradle
.kotlin
.claude/settings.local.json
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md
.cursor/mcp.json
.github/instructions/nx.instructions.md
# Added by Claude Task Master
# Logs
logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
dev-debug.log
# Dependency directories
node_modules/
# Environment variables
.env
!e2e/dotnet/.env
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.specstory/**
.cursorindexingignore
# OS specific
# Task files
/tasks.json
/tasks
# Upstream docs local configuration (machine-specific)
.upstreamdocs.local.json
astro-docs/.netlify
# Angular Rspack Specific Options
packages/angular-rspack/coverage
packages/angular-rspack-compiler/coverage
# Some Packages use a template to generate the correct README
packages/angular-rspack/README.md
packages/angular-rspack-compiler/README.md
packages/dotnet/README.md
test-output
test-results
# TypeScript build info files
*.tsbuildinfo
# .NET build output
/packages/dotnet/analyzer/bin
/packages/dotnet/analyzer/obj
+1
View File
@@ -0,0 +1 @@
node ./scripts/commit-lint.js "$1"
+11 -1
View File
@@ -1,2 +1,12 @@
# Skip if this is a worktree creation (previous ref is null)
if [ "$1" = "0000000000000000000000000000000000000000" ]; then
exit 0
fi
# Skip if this is a file checkout (not branch switch) - $3 would be 0
if [ "$3" = "0" ]; then
exit 0
fi
changedFiles="$(git diff-tree -r --name-only --no-commit-id $1 $2)"
node ./scripts/notify-lockfile-changes.js $changedFiles
node ./scripts/notify-lockfile-changes.js $changedFiles
+9
View File
@@ -0,0 +1,9 @@
{
"mcpServers": {
"nx": {
"command": "pnpm",
"args": ["nx-mcp"],
"env": {}
}
}
}
+40 -6
View File
@@ -1,6 +1,6 @@
launch-templates:
linux-medium:
resource-class: 'docker_linux_amd64/medium+'
linux-large:
resource-class: 'docker_linux_amd64/large'
image: 'us-east1-docker.pkg.dev/nxcloudoperations/nx-cloud/nx-agents-base-images:ubuntu22.04-node20.19-v1'
env:
GIT_AUTHOR_EMAIL: test@test.com
@@ -8,8 +8,10 @@ launch-templates:
GIT_COMMITTER_EMAIL: test@test.com
GIT_COMMITTER_NAME: Test
SELECTED_PM: 'pnpm'
NX_NATIVE_LOGGING: 'nx::native::db'
# These are need for build and link validation for next.js and astro apps
NEXT_PUBLIC_ASTRO_URL: 'https://master--nx-docs.netlify.app'
NX_DEV_URL: 'https://canary.nx.dev'
init-steps:
- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/checkout/main.yaml'
@@ -65,11 +67,15 @@ launch-templates:
- name: Load Cargo Env
script: echo "PATH=$HOME/.cargo/bin:$PATH" >> $NX_CLOUD_ENV
- name: Setup Java 17
- name: Install Rust Dependencies
script: |
cargo fetch
- name: Setup Java 21
script: |
sudo apt update
sudo apt install -y openjdk-17-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java
sudo apt install -y openjdk-21-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
java -version
- name: Setup Gradle
@@ -77,6 +83,14 @@ launch-templates:
./gradlew wrapper
./gradlew --version
- name: Setup .NET 9
script: |
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-9.0
dotnet --version
linux-extra-large:
resource-class: 'docker_linux_amd64/extra_large'
image: 'us-east1-docker.pkg.dev/nxcloudoperations/nx-cloud/nx-agents-base-images:ubuntu22.04-node20.19-v1'
@@ -87,6 +101,9 @@ launch-templates:
GIT_COMMITTER_NAME: Test
SELECTED_PM: 'pnpm'
NX_NATIVE_LOGGING: 'nx::native::db'
# These are need for build and link validation for next.js and astro apps
NEXT_PUBLIC_ASTRO_URL: 'https://master--nx-docs.netlify.app'
NX_DEV_URL: 'https://canary.nx.dev'
init-steps:
- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v5/workflow-steps/checkout/main.yaml'
@@ -142,9 +159,26 @@ launch-templates:
- name: Load Cargo Env
script: echo "PATH=$HOME/.cargo/bin:$PATH" >> $NX_CLOUD_ENV
- name: Install Rust Dependencies
script: |
cargo fetch
- name: Setup Java 21
script: |
sudo apt update
sudo apt install -y openjdk-21-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
java -version
- name: Setup Gradle
script: |
./gradlew wrapper
./gradlew --version
- name: Setup .NET 9
script: |
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-9.0
dotnet --version
+57 -6
View File
@@ -1,14 +1,57 @@
distribute-on:
default: auto linux-medium, 1 linux-extra-large
default: 8 linux-large, 1 linux-extra-large
assignment-rules:
- targets:
# e2e-release tests must run sequentially due to shared git state and publishing operations
- projects:
- e2e-release
targets:
- e2e-ci**
run-on:
- agent: linux-medium
- agent: linux-large
parallelism: 1
- projects:
- e2e-gradle
targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
- projects:
- e2e-react
- e2e-next
- e2e-web
- e2e-eslint
targets:
- e2e-ci**react-package**
- e2e-ci**react.test**
- e2e-ci**react-router-ts-solution**
- e2e-ci**next-e2e-and-snapshots**
- e2e-ci**next-generation**
- e2e-ci**next-ts-solutions**
- e2e-ci**next-webpack**
- e2e-ci**web**
- e2e-ci**remix-ts-solution**
- e2e-ci**linter**
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 1
# All other e2e tests can run in parallel
- targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 2
- agent: linux-extra-large
parallelism: 3
# These projects should not need to be isolated.
- projects:
- nx-dev
targets:
@@ -16,17 +59,25 @@ assignment-rules:
run-on:
- agent: linux-extra-large
parallelism: 1
- projects:
- angular
- react
targets:
- test
run-on:
- agent: linux-extra-large
parallelism: 1
- targets:
- lint
run-on:
- agent: linux-medium
- agent: linux-large
parallelism: 6
- targets:
- '*'
- "*"
run-on:
- agent: linux-medium
- agent: linux-large
parallelism: 3
- agent: linux-extra-large
parallelism: 3
+13
View File
@@ -0,0 +1,13 @@
# Enable pre/post-install which are disabled by default. Installing peer deps which is also disabled by default
auto-install-peers=true
enable-pre-post-scripts=true
# Enable lifecycle scripts for specific packages that require them (like post-install)
enable-scripts=@napi-rs/canvas,sharp,@swc/core,@swc/cli,@swc-node/register,esbuild
# Compatibility
strict-peer-dependencies=false
lockfile-version-strict=false
# Consistency across environments
use-node-version=20.19.0
+3
View File
@@ -51,3 +51,6 @@ CODEOWNERS
/.nx/workflows/dynamic-changesets.yaml
_files
_solution
# this file uses TS import attributes which the current prettier version does not support
tools/documentation/create-embeddings/src/main.mts
+9 -1
View File
@@ -1,5 +1,13 @@
{
"singleQuote": true,
"endOfLine": "lf",
"plugins": ["prettier-plugin-tailwindcss"]
"plugins": ["prettier-plugin-tailwindcss"],
"overrides": [
{
"files": "*.mdoc",
"options": {
"parser": "markdown"
}
}
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"include": ["apps/**/*", "libs/**/*", "packages/**/*"],
"exclude": [
"**/*.spec.*",
"**/test/**/*",
"**/__tests__/**/*",
"**/*.test.*",
"node_modules/**/*"
]
}
+1 -1
View File
@@ -5,7 +5,7 @@ auth:
htpasswd:
file: ./htpasswd
max_body_size: 15mb
max_body_size: 20mb
# a list of other known repositories we can talk to
uplinks:
+199
View File
@@ -0,0 +1,199 @@
When responding to queries about this repository:
1. Suggest relevant commands from the "Essential Commands" section when applicable
2. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
analysis
3. Mention the plugin ecosystem and support for various frameworks when relevant
4. Emphasize the importance of running the full validation suite before committing changes
Always strive to provide accurate, helpful responses that align with the best practices and workflows described in this
file.
## GitHub Issue Response Mode
When responding to GitHub issues, determine your approach based on how the request is phrased:
### Plan-First Mode (Default)
Use this approach when users ask you to:
- "analyze", "investigate", "assess", "review", "examine", or "plan"
- Or when the request is ambiguous
In this mode:
1. Provide a detailed analysis of the issue
2. Create a comprehensive implementation plan
3. Break down the solution into clear steps
4. Then please post the plan as a comment on the issue
### Immediate Implementation Mode
Use this approach when users ask you to:
- "fix", "implement", "solve", "build", "create", "update", or "add"
- Or when they explicitly request immediate action
In this mode:
1. Analyze the issue quickly
2. Implement the complete solution immediately
3. Make all necessary code changes. Please make multiple commits so that the changes are easier to review.
4. Run appropriate tests and validation
5. If the tests, are not passing, please fix the issues and continue doing this up to 3 more times until the tests pass
6. Once the tests pass, push a branch and then suggest opening a PR which has a description of the changes made, and
that
it make sure that it explicitly says "Fixes #ISSUE_NUMBER" to automatically close the issue when the PR is merged.
## Avoid making changes to generated files
Files under `generated` directories are generated based on a different source file and should not be modified directly.
Find the underlying source and modify that instead.
## Essential Commands
### Code Formatting
After code changes are made, please make sure to format the files with prettier via `npx prettier -- FILE_NAME`
### Pre-push Validation
```bash
# Full validation suite - run before committing
nx prepush
```
If the prepush validation suite fails, please fix the issues before proceeding with your work. This ensures that all
code adheres to the project's standards and passes all tests. DO NOT make a new commit to fix these issues. Instead,
amend the current commit.
### Testing Changes
After code changes are made, first test the specific project where the changes were made:
```bash
nx run-many -t test,build,lint -p PROJECT_NAME
```
After verifying the individual project, validate that the changes in projects which have been affected:
```bash
# Test only affected projects (recommended for development)
nx affected -t build,test,lint
```
As the last step, run the e2e tests to fully ensure that changes are valid:
```bash
# Run affected e2e tests (recommended for development)
nx affected -t e2e-local
```
## Fixing GitHub Issues
When working on a GitHub issue, follow this systematic approach:
### 1. Get Issue Details
```bash
# Get issue details using GitHub CLI (replace ISSUE_NUMBER with actual number)
gh issue view ISSUE_NUMBER
# View multiple issues efficiently in one command
gh issue list --limit 50 --json number,title,state,labels,assignees,updatedAt,body --jq '.[] | select(.number == 123 or .number == 456 or .number == 789)'
# Or filter by specific criteria to get multiple related issues
gh issue list --label "bug" --state "open" --json number,title,body,labels --jq '.[]'
gh issue list --assignee "@me" --json number,title,body,state --jq '.[]'
```
**Tip**: Instead of running `gh issue view` multiple times, use `gh issue list` with JSON output and filtering to gather
information about multiple issues in a single command. This is much more efficient than viewing issues one at a time.
**Always provide clickable links**: When discussing GitHub issues or PRs, always include the full GitHub URL so the user
can easily open them in their browser. For example:
- Issue #12345: https://github.com/nrwl/nx/issues/12345
- PR #67890: https://github.com/nrwl/nx/pull/67890
When cloning reproduction repos, please clone within `./tmp/claude/repro-ISSUE_NUMBER`
### 2. Analyze the Plan
- Look for a plan or implementation details in the issue description
- Check comments for additional context or clarification
- Identify affected projects and components
### 3. Implement the Solution
- Follow the plan outlined in the issue
- Make focused changes that address the specific problem
- Ensure code follows existing patterns and conventions
### 4. Run Full Validation
Use the testing workflow from the "Essential Commands" section.
### 5. Submit Pull Request
- Create a descriptive PR title that references the issue
- **Always fill in the PR template** - don't leave it empty
- Include "Fixes #ISSUE_NUMBER" in the PR description
- Provide a clear summary of changes made
- Request appropriate reviewers
## Pull Request Template
**IMPORTANT**: When creating a pull request, you MUST fill in the template found in `.github/PULL_REQUEST_TEMPLATE.md`.
Do not leave the template sections empty. The template includes:
### Required Sections
1. **Current Behavior**: Describe the behavior we have today
2. **Expected Behavior**: Describe the behavior we should expect with the changes in this PR
3. **Related Issue(s)**: Link the issue being fixed so it gets closed when the PR is merged
### Template Format
```markdown
## Current Behavior
<!-- This is the behavior we have today -->
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. -->
Fixes #ISSUE_NUMBER
```
### Guidelines
- Ensure your commit message follows the conventional commit format (use `pnpm commit`)
- Use `fix:`, `feat:`, `chore:`, etc. as appropriate types.
- Scope is **required** for all commits. Possible scopes are listed in `scripts/commitizen.js`.
- Read the submission guidelines in CONTRIBUTING.md before posting
- For complex changes, you can request a dedicated Nx release by mentioning the Nx team
- Always link the related issue using "Fixes #ISSUE_NUMBER" to automatically close it when merged
# General Guidelines for working with Nx
- When running tasks (for example build, lint, test, e2e, etc.), always prefer running the task through `nx` (i.e. `nx run`, `nx run-many`, `nx affected`) instead of using the underlying tooling directly
- You have access to the Nx MCP server and its tools, use them to help the user
- When answering questions about the repository, use the `nx_workspace` tool first to gain an understanding of the workspace architecture where applicable.
- When working in individual projects, use the `nx_project_details` mcp tool to analyze and understand the specific project structure and dependencies
- For questions around nx configuration, best practices or if you're unsure, use the `nx_docs` tool to get relevant, up-to-date docs. Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the `nx_workspace` tool to get any errors
# CI Error Guidelines
If the user wants help with fixing an error in their CI pipeline, use the following flow:
- Retrieve the list of current CI Pipeline Executions (CIPEs) using the `nx_cloud_cipe_details` tool
- If there are any errors, use the `nx_cloud_fix_cipe_failure` tool to retrieve the logs for a specific task
- Use the task logs to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
- Make sure that the problem is fixed by running the task that you passed into the `nx_cloud_fix_cipe_failure` tool
+199
View File
@@ -0,0 +1,199 @@
When responding to queries about this repository:
1. Suggest relevant commands from the "Essential Commands" section when applicable
2. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
analysis
3. Mention the plugin ecosystem and support for various frameworks when relevant
4. Emphasize the importance of running the full validation suite before committing changes
Always strive to provide accurate, helpful responses that align with the best practices and workflows described in this
file.
## GitHub Issue Response Mode
When responding to GitHub issues, determine your approach based on how the request is phrased:
### Plan-First Mode (Default)
Use this approach when users ask you to:
- "analyze", "investigate", "assess", "review", "examine", or "plan"
- Or when the request is ambiguous
In this mode:
1. Provide a detailed analysis of the issue
2. Create a comprehensive implementation plan
3. Break down the solution into clear steps
4. Then please post the plan as a comment on the issue
### Immediate Implementation Mode
Use this approach when users ask you to:
- "fix", "implement", "solve", "build", "create", "update", or "add"
- Or when they explicitly request immediate action
In this mode:
1. Analyze the issue quickly
2. Implement the complete solution immediately
3. Make all necessary code changes. Please make multiple commits so that the changes are easier to review.
4. Run appropriate tests and validation
5. If the tests, are not passing, please fix the issues and continue doing this up to 3 more times until the tests pass
6. Once the tests pass, push a branch and then suggest opening a PR which has a description of the changes made, and
that
it make sure that it explicitly says "Fixes #ISSUE_NUMBER" to automatically close the issue when the PR is merged.
## Avoid making changes to generated files
Files under `generated` directories are generated based on a different source file and should not be modified directly.
Find the underlying source and modify that instead.
## Essential Commands
### Code Formatting
After code changes are made, please make sure to format the files with prettier via `npx prettier -- FILE_NAME`
### Pre-push Validation
```bash
# Full validation suite - run before committing
nx prepush
```
If the prepush validation suite fails, please fix the issues before proceeding with your work. This ensures that all
code adheres to the project's standards and passes all tests. DO NOT make a new commit to fix these issues. Instead,
amend the current commit.
### Testing Changes
After code changes are made, first test the specific project where the changes were made:
```bash
nx run-many -t test,build,lint -p PROJECT_NAME
```
After verifying the individual project, validate that the changes in projects which have been affected:
```bash
# Test only affected projects (recommended for development)
nx affected -t build,test,lint
```
As the last step, run the e2e tests to fully ensure that changes are valid:
```bash
# Run affected e2e tests (recommended for development)
nx affected -t e2e-local
```
## Fixing GitHub Issues
When working on a GitHub issue, follow this systematic approach:
### 1. Get Issue Details
```bash
# Get issue details using GitHub CLI (replace ISSUE_NUMBER with actual number)
gh issue view ISSUE_NUMBER
# View multiple issues efficiently in one command
gh issue list --limit 50 --json number,title,state,labels,assignees,updatedAt,body --jq '.[] | select(.number == 123 or .number == 456 or .number == 789)'
# Or filter by specific criteria to get multiple related issues
gh issue list --label "bug" --state "open" --json number,title,body,labels --jq '.[]'
gh issue list --assignee "@me" --json number,title,body,state --jq '.[]'
```
**Tip**: Instead of running `gh issue view` multiple times, use `gh issue list` with JSON output and filtering to gather
information about multiple issues in a single command. This is much more efficient than viewing issues one at a time.
**Always provide clickable links**: When discussing GitHub issues or PRs, always include the full GitHub URL so the user
can easily open them in their browser. For example:
- Issue #12345: https://github.com/nrwl/nx/issues/12345
- PR #67890: https://github.com/nrwl/nx/pull/67890
When cloning reproduction repos, please clone within `./tmp/claude/repro-ISSUE_NUMBER`
### 2. Analyze the Plan
- Look for a plan or implementation details in the issue description
- Check comments for additional context or clarification
- Identify affected projects and components
### 3. Implement the Solution
- Follow the plan outlined in the issue
- Make focused changes that address the specific problem
- Ensure code follows existing patterns and conventions
### 4. Run Full Validation
Use the testing workflow from the "Essential Commands" section.
### 5. Submit Pull Request
- Create a descriptive PR title that references the issue
- **Always fill in the PR template** - don't leave it empty
- Include "Fixes #ISSUE_NUMBER" in the PR description
- Provide a clear summary of changes made
- Request appropriate reviewers
## Pull Request Template
**IMPORTANT**: When creating a pull request, you MUST fill in the template found in `.github/PULL_REQUEST_TEMPLATE.md`.
Do not leave the template sections empty. The template includes:
### Required Sections
1. **Current Behavior**: Describe the behavior we have today
2. **Expected Behavior**: Describe the behavior we should expect with the changes in this PR
3. **Related Issue(s)**: Link the issue being fixed so it gets closed when the PR is merged
### Template Format
```markdown
## Current Behavior
<!-- This is the behavior we have today -->
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR -->
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is merged. -->
Fixes #ISSUE_NUMBER
```
### Guidelines
- Ensure your commit message follows the conventional commit format (use `pnpm commit`)
- Use `fix:`, `feat:`, `chore:`, etc. as appropriate types.
- Scope is **required** for all commits. Possible scopes are listed in `scripts/commitizen.js`.
- Read the submission guidelines in CONTRIBUTING.md before posting
- For complex changes, you can request a dedicated Nx release by mentioning the Nx team
- Always link the related issue using "Fixes #ISSUE_NUMBER" to automatically close it when merged
# General Guidelines for working with Nx
- When running tasks (for example build, lint, test, e2e, etc.), always prefer running the task through `nx` (i.e. `nx run`, `nx run-many`, `nx affected`) instead of using the underlying tooling directly
- You have access to the Nx MCP server and its tools, use them to help the user
- When answering questions about the repository, use the `nx_workspace` tool first to gain an understanding of the workspace architecture where applicable.
- When working in individual projects, use the `nx_project_details` mcp tool to analyze and understand the specific project structure and dependencies
- For questions around nx configuration, best practices or if you're unsure, use the `nx_docs` tool to get relevant, up-to-date docs. Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the `nx_workspace` tool to get any errors
# CI Error Guidelines
If the user wants help with fixing an error in their CI pipeline, use the following flow:
- Retrieve the list of current CI Pipeline Executions (CIPEs) using the `nx_cloud_cipe_details` tool
- If there are any errors, use the `nx_cloud_fix_cipe_failure` tool to retrieve the logs for a specific task
- Use the task logs to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
- Make sure that the problem is fixed by running the task that you passed into the `nx_cloud_fix_cipe_failure` tool
+18 -58
View File
@@ -9,9 +9,9 @@ pnpm-lock.yaml @nrwl/nx-core-reviewers
rust-toolchain.toml @nrwl/nx-native-reviewers
# Docs Site + Graph
/astro-docs @nrwl/nx-docs-reviewers
/docs @nrwl/nx-docs-reviewers
/docs/nx-cloud @StalkAltan @rarmatei @nixallover @nrwl/nx-docs-reviewers
/graph/** @philipjfulcher @FrozenPandaz @bcabanes @MaxKless @xiongemi
/graph/** @philipjfulcher @FrozenPandaz @bcabanes @MaxKless @Coly010 @jaysoo @nartc
/images @nrwl/nx-docs-reviewers
/nx-dev/** @nrwl/nx-docs-reviewers
/typedoc-theme @nrwl/nx-docs-reviewers
@@ -19,19 +19,16 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
# Plugin Verticals
## Angular
/docs/generated/packages/angular/** @nrwl/nx-angular-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/angular/** @nrwl/nx-angular-reviewers @nrwl/nx-docs-reviewers
/packages/angular/** @nrwl/nx-angular-reviewers
/packages/angular-rspack/** @nrwl/nx-angular-reviewers
/packages/angular-rspack-compiler/** @nrwl/nx-angular-reviewers
/examples/angular-rspack/** @nrwl/nx-angular-reviewers
/e2e/angular/** @nrwl/nx-angular-reviewers
/packages/angular/plugins/component-testing.ts @nrwl/nx-angular-reviewers @nrwl/nx-testing-tools-reviewers
/packages/angular/src/generators/cypress-component-configuration/** @nrwl/nx-angular-reviewers @nrwl/nx-testing-tools-reviewers
/packages/angular/src/generators/component-test/** @nrwl/nx-angular-reviewers @nrwl/nx-testing-tools-reviewers
## React
/docs/generated/packages/react/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/next/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/react/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/next/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/packages/react/** @nrwl/nx-react-reviewers
/e2e/react/** @nrwl/nx-react-reviewers
/packages/next/** @nrwl/nx-react-reviewers
@@ -41,10 +38,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/packages/react/src/generators/component-test/** @nrwl/nx-react-reviewers @nrwl/nx-testing-tools-reviewers
# React Native
/docs/generated/packages/detox/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/expo/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/react-native/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/react-native/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers
/packages/detox/** @nrwl/nx-react-reviewers
/e2e/detox/** @nrwl/nx-react-reviewers
/packages/expo/** @nrwl/nx-react-reviewers
@@ -53,7 +46,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/react-native/** @nrwl/nx-react-reviewers
## remix
/docs/generated/packages/remix/** @nrwl/nx-react-reviewers @nrwl/nx-docs-reviewers @Coly010
/packages/remix/** @nrwl/nx-react-reviewers @Coly010
/e2e/remix/** @nrwl/nx-react-reviewers @Coly010
@@ -64,31 +56,12 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/nuxt/** @nrwl/nx-vue-reviewers
## Node
/docs/generated/packages/node/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/nest/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/express/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/node/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/express/** @nrwl/nx-node-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/nest/** @nrwl/nx-node-reviewers @FrozenPandaz @nrwl/nx-docs-reviewers
/packages/node/** @nrwl/nx-node-reviewers
/packages/express/** @nrwl/nx-node-reviewers
/packages/nest/** @nrwl/nx-node-reviewers
/e2e/node/** @nrwl/nx-node-reviewers
## JS
/docs/generated/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/rollup/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
/packages/js/** @nrwl/nx-js-reviewers
/e2e/js/** @nrwl/nx-js-reviewers
/packages/web/** @nrwl/nx-js-reviewers
@@ -109,12 +82,6 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/packages/module-federation/** @nrwl/nx-js-reviewers
## Tools
/docs/generated/packages/cypress/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/cypress/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/jest/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/jest/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/playwright/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/playwright/** @nrwl/nx-testing-tools-reviewers @nrwl/nx-docs-reviewers
/packages/cypress/** @nrwl/nx-testing-tools-reviewers
/e2e/cypress/** @nrwl/nx-testing-tools-reviewers
/packages/jest/** @nrwl/nx-testing-tools-reviewers
@@ -123,41 +90,32 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/e2e/playwright/** @nrwl/nx-testing-tools-reviewers
# Linter
/docs/generated/packages/eslint-plugin/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/eslint/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/eslint/** @nrwl/nx-linter-reviewers @nrwl/nx-docs-reviewers
/packages/eslint-plugin/** @nrwl/nx-linter-reviewers
/packages/eslint/** @nrwl/nx-linter-reviewers
/e2e/eslint/** @nrwl/nx-linter-reviewers
.eslint* @nrwl/nx-linter-reviewers
# Storybook
/docs/generated/packages/storybook/** @nrwl/nx-storybook-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/storybook/** @nrwl/nx-storybook-reviewers @nrwl/nx-docs-reviewers
/packages/storybook/** @nrwl/nx-storybook-reviewers
/e2e/storybook/** @nrwl/nx-storybook-reviewers
# Docker
/packages/docker/** @nrwl/nx-core-reviewers @Coly010
## Devkit
/docs/generated/devkit/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/devkit/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/packages/devkit/** @nrwl/nx-devkit-reviewers
/packages/devkit/index.ts @FrozenPandaz @vsavkin
/packages/devkit/public-api.ts @FrozenPandaz @vsavkin
# Gradle
/packages/gradle/** @FrozenPandaz @MaxKless @xiongemi
/e2e/gradle/** @FrozenPandaz @MaxKless @xiongemi
/packages/gradle/** @FrozenPandaz @MaxKless @lourw
/e2e/gradle/** @FrozenPandaz @MaxKless @lourw
# Nx-Plugin
/docs/generated/packages/plugin/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/docs/shared/packages/plugin/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
/packages/plugin/** @nrwl/nx-devkit-reviewers
/e2e/plugin/** @nrwl/nx-devkit-reviewers
## Core
/docs/generated/cli/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/nx/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/docs/generated/packages/workspace/** @nrwl/nx-core-reviewers @nrwl/nx-docs-reviewers
/packages/nx/** @nrwl/nx-core-reviewers
/packages/nx/src/adapter @nrwl/nx-core-reviewers @leosvelperez
/packages/nx/src/native @nrwl/nx-core-reviewers @nrwl/nx-native-reviewers
@@ -174,10 +132,10 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
# Misc
/e2e/lerna-smoke-tests/** @vsavkin @JamesHenry
/e2e/utils/** @meeroslav @nrwl/nx-testing-tools-reviewers @vsavkin @mandarini
/e2e/utils/** @meeroslav @nrwl/nx-testing-tools-reviewers @vsavkin
/community @nrwl/nx-docs-reviewers
/CONTRIBUTING.md @FrozenPandaz @isaacplmann
/CODE_OF_CONDUCT.md @FrozenPandaz @isaacplmann
/CONTRIBUTING.md @FrozenPandaz
/CODE_OF_CONDUCT.md @FrozenPandaz
/CODEOWNERS @FrozenPandaz @AgentEnder
/packages/nx/src/nx-cloud/utilities/url-shorten.ts @MaxKless
@@ -191,11 +149,13 @@ rust-toolchain.toml @nrwl/nx-native-reviewers
/.husky/** @nrwl/nx-pipelines-reviewers
/packages/workspace/src/generators/ci-workflow/** @nrwl/nx-pipelines-reviewers
# Claude AI Integration
CLAUDE.md @FrozenPandaz
.claude/** @FrozenPandaz
.mcp.json @FrozenPandaz
# Global Files
project.json @FrozenPandaz @vsavkin
jest.config.ts @nrwl/nx-testing-tools-reviewers @FrozenPandaz
jest.preset.js @nrwl/nx-testing-tools-reviewers @FrozenPandaz
# Overrides - These are applied last, so override any matches above.
docs/generated/manifests/* @nrwl/nrwlians
docs/generated/packages-metadata.json @FrozenPandaz @jaysoo @AgentEnder @nrwl/nx-docs-reviewers
+96 -36
View File
@@ -27,14 +27,25 @@ can [submit a Pull Request](https://github.com/nrwl/nx/blob/master/CONTRIBUTING.
Source code and documentation are included in the top-level folders listed below.
- `docs` - Markdown and configuration files for documentation including tutorials, guides for each supported platform,
and API docs.
- `e2e` - E2E tests.
- `packages` - Source code for Nx packages such as Angular, React, Web, NestJS, Next and others including generators and
executors (or builders).
- `e2e` - E2E tests for the Nx packages
- `graph` - Source code for the Nx Graph application which shows the project graph, task graph, project details, and more in the browser.
- `docs` - Markdown and configuration files for documentation including tutorials, guides for each supported platform,
and API docs.
- `nx-dev` - Source code for the Nx documentation site which displays the markdown in `docs` and more.
- `tools` - Workspace-specific tooling and plugins
- `scripts` - Miscellaneous scripts for project tasks such as building documentation, testing, and code formatting.
- `tmp` - Folder used by e2e tests. If you are a WebStorm user, make sure to mark this folder as excluded.
## Technologies
This repo contains a mix of different technologies, including:
- **Rust**: The core of Nx is written in Rust, which provides performance and safety.
- **TypeScript**: The primary language for Nx packages and the Nx DevKit.
- **Kotlin**: Used for the Gradle and Java plugins.
## Development Workstation Setup
If you are using `VSCode`, and provided you have [Docker](https://docker.com) installed on your machine, then you can leverage [Dev Containers](https://containers.dev) through this [VSCode extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), to easily setup your development environment, with everything needed to contribute to Nx, already installed (namely `NodeJS`, `Yarn`, `Rust`, `Cargo`, plus some useful extensions like `Nx Console`).
@@ -183,76 +194,73 @@ To build Nx on Windows, you need to use WSL.
## Documentation Contributions
We would love for you to contribute to our documentation as well! Please feel welcome to submit fixes or enhancements to
our existing documentation pages and the `nx-dev` application in this repo.
our existing documentation pages, `astro-docs` and the `nx-dev` application in this repo.
### Documentation Structure
#### Documentation Pages
Our documentation pages can be found within this repo under the `docs` directory.
Our documentation pages can be found within this repo under the `astro-docs/src/content/docs` directory.
The `docs/map.json` file is considered our source of truth for our site's structure, and should be updated when adding a
new page to our documentation to ensure that it is included in the documentation site. We also run automated scripts
based on this `map.json` data to safeguard against common human errors that could break our site.
Documentation is written in `.mdoc` (Markdoc) or `.mdx` (MDX) format and supports custom Markdoc tags for rich content
such as videos, graphs, interactive components, and more. See the `astro-docs/README.md` for a full list of available
custom tags and their usage.
When you make a change to the `map.json` file, make sure to run `pnpm documentation` to propagate your changes to the `nx-dev` application.
The sidebar structure is defined in `astro-docs/sidebar.mts` and should be updated when adding new sections or pages
to ensure proper navigation.
#### Astro-Docs Application
Our public `nx.dev/docs` documentation site is built with [Astro](https://astro.build) and [Starlight](https://starlight.astro.build),
and can be found in the `astro-docs` directory of this repo. See [docs README for more details](./astro-docs/README.md)
#### Nx-Dev Application
Our public `nx.dev` documentation site is a [Next.js](https://nextjs.org/) application, that can be found in
the `nx-dev` directory of this repo.
The documentation site is consuming the `docs/` directly by copy-ing its content while deploying, so the website is
always in sync and reflects the latest version of `docs/`.
The `nx-dev` directory contains a [Next.js](https://nextjs.org/) application used for blog posts and landing pages.
Jump to [Running the Documentation Site Locally](#running-the-documentation-site-locally) to see how to preview your
changes while serving.
### Changing Generated API documentation
`.md` files documenting the API for our CLI (including executor and generator API docs) are generated via the
corresponding `schema.json` file for the given command.
API documentation for CLI commands, executors, and generators is automatically generated during the build process from
the corresponding `schema.json` files in each package.
After adjusting the `schema.json` file, `.md` files for these commands can be generated by running:
The documentation is generated using content loaders in the `astro-docs` application and requires a rebuild to reflect
changes. After adjusting a `schema.json` file:
```bash
pnpm documentation
```
This will update the corresponding contents of the `docs` directory. These are generated automatically on push (via
husky) as well.
1. Restart the development server with `nx serve astro-docs` to see the changes
2. Or run `nx preview astro-docs` to view the built site locally
Note that adjusting the `schema.json` files will also affect the CLI manuals and Nx Console behavior, in addition to
adjusting the docs.
the generated documentation.
### Running the Documentation Site Locally
To run `nx-dev` locally, run the command:
To run the documentation site locally, run the command:
```bash
npx nx serve-docs nx-dev
```shell
nx serve astro-docs
```
You can then access the application locally at `localhost:4200`. Changes to markdown documentation files will be automatically applied to the site when you refresh the browser.
You can then access the application locally at `localhost:4321`. Changes to markdoc files should reflect automatically in the browser on save.
#### Troubleshooting: `JavaScript heap out of memory`
#### Working with Plugin Registry
If you see an error that states: `FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory`,
you need
to [increase the max memory size of V8's old memory section](https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes):
To view plugin registry statistics (GitHub stars, npm downloads, etc.) during local development:
```bash
export NODE_OPTIONS="--max-old-space-size=4096"
NX_DOCS_PLUGIN_STATS=true nx serve astro-docs
```
After configuring this, try to run `npx nx serve nx-dev` again.
Note: Plugin stats are disabled by default in development to improve performance.
### PR Preview
When submitting a PR, this repo will automatically generate a preview of the `nx-dev` application based on the contents
When submitting a PR, this repo will automatically generate a preview of the documentation site based on the contents
of your pull request.
Once the preview site is launched, a comment will automatically be added to your PR with the link your PR's preview. To
check your docs changes, make sure to select `Preview` from the version selection box of the site.
Once the preview site is launched, a comment will automatically be added to your PR with the link to your PR's preview.
## Submission Guidelines
@@ -333,6 +341,7 @@ The scope must be one of the following:
- express - anything Express specific
- js - anything related to @nx/js package or general js/ts support
- linter - anything Linter specific
- module-federation - anything Nx Module Federation specific
- nest - anything Nest specific
- nextjs - anything Next specific
- node - anything Node specific
@@ -374,6 +383,57 @@ To simplify and automate the process of committing with this format,
**Nx is a [Commitizen](https://github.com/commitizen/cz-cli) friendly repository**, just do `git add` and
execute `pnpm commit`.
##### Using the Interactive Commit Tool
Instead of `git commit`, use:
```bash
pnpm commit
```
This will launch an interactive prompt that will:
1. Ask you to select the type of change (feat, fix, docs, cleanup, chore)
2. Let you choose the appropriate scope from the predefined list
3. Guide you through writing a clear, descriptive commit message
4. Ensure your commit follows the conventional commit format
##### Available Commit Types
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **cleanup**: A code change that neither fixes a bug nor adds a feature
- **chore**: Other changes that don't modify src or test files
##### Available Scopes
The repository includes many predefined scopes. Use the one which is most specific to the changes being committed
- **core**: anything Nx core specific
- **angular**: anything Angular specific
- **react**: anything React specific
- **nextjs**: anything Next specific
- **node**: anything Node specific
- **devkit**: devkit-related changes
- **graph**: anything graph app specific
- **testing**: anything testing specific (e.g. jest or cypress)
- **misc**: misc stuff
- **repo**: anything related to managing the repo itself
- **nx-dev**: anything related to docs infrastructure
For the complete list of available scopes, see `/scripts/commitizen.js`.
##### Example Commits
```bash
feat(core): add new project graph visualization
fix(angular): resolve build issues with standalone components
docs(misc): update contributing guidelines
chore(repo): bump dependencies
cleanup(devkit): refactor utility functions for better readability
```
#### PR releases
If you are working on a particularly complex change or feature addition, you can request a dedicated Nx release for the associated pull request branch. Mention someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they will confirm if the PR warrants its own release for testing purposes, and generate it for you if appropriate.
Generated
+43 -134
View File
@@ -1527,26 +1527,30 @@ dependencies = [
"hyper-util",
"log",
"rustls",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
"tokio-rustls",
"tower-service",
"webpki-roots",
]
[[package]]
name = "hyper-util"
version = "0.1.11"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df"
dependencies = [
"base64",
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"http",
"http-body",
"hyper",
"ipnet",
"libc",
"percent-encoding",
"pin-project-lite",
"socket2",
"tokio",
@@ -1756,6 +1760,16 @@ version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
[[package]]
name = "iri-string"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
dependencies = [
"memchr",
"serde",
]
[[package]]
name = "is-macro"
version = "0.3.5"
@@ -2086,12 +2100,6 @@ dependencies = [
"syn 2.0.100",
]
[[package]]
name = "mime"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "minimal-lexical"
version = "0.2.1"
@@ -2309,11 +2317,10 @@ dependencies = [
[[package]]
name = "num-bigint"
version = "0.4.4"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
"serde",
@@ -3018,30 +3025,26 @@ dependencies = [
[[package]]
name = "reqwest"
version = "0.12.15"
version = "0.12.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
dependencies = [
"base64",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
"hyper-util",
"ipnet",
"js-sys",
"log",
"mime",
"once_cell",
"percent-encoding",
"pin-project-lite",
"quinn",
"rustls",
"rustls-pemfile",
"rustls-native-certs",
"rustls-pki-types",
"serde",
"serde_json",
@@ -3050,13 +3053,12 @@ dependencies = [
"tokio",
"tokio-rustls",
"tower",
"tower-http",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"webpki-roots",
"windows-registry",
]
[[package]]
@@ -3187,15 +3189,6 @@ dependencies = [
"security-framework",
]
[[package]]
name = "rustls-pemfile"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
dependencies = [
"rustls-pki-types",
]
[[package]]
name = "rustls-pki-types"
version = "1.11.0"
@@ -4093,6 +4086,24 @@ dependencies = [
"tower-service",
]
[[package]]
name = "tower-http"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
dependencies = [
"bitflags 2.9.0",
"bytes",
"futures-util",
"http",
"http-body",
"iri-string",
"pin-project-lite",
"tower",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.3"
@@ -4605,15 +4616,6 @@ dependencies = [
"rustls-pki-types",
]
[[package]]
name = "webpki-roots"
version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
dependencies = [
"rustls-pki-types",
]
[[package]]
name = "weezl"
version = "0.1.8"
@@ -4687,7 +4689,7 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
dependencies = [
"windows-implement",
"windows-interface",
"windows-result 0.1.2",
"windows-result",
"windows-targets 0.52.6",
]
@@ -4719,17 +4721,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
[[package]]
name = "windows-registry"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
dependencies = [
"windows-result 0.3.2",
"windows-strings",
"windows-targets 0.53.0",
]
[[package]]
name = "windows-result"
version = "0.1.2"
@@ -4739,24 +4730,6 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-result"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
@@ -4832,29 +4805,13 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm 0.52.6",
"windows_i686_gnullvm",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
name = "windows-targets"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
dependencies = [
"windows_aarch64_gnullvm 0.53.0",
"windows_aarch64_msvc 0.53.0",
"windows_i686_gnu 0.53.0",
"windows_i686_gnullvm 0.53.0",
"windows_i686_msvc 0.53.0",
"windows_x86_64_gnu 0.53.0",
"windows_x86_64_gnullvm 0.53.0",
"windows_x86_64_msvc 0.53.0",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@@ -4873,12 +4830,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@@ -4897,12 +4848,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_aarch64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@@ -4921,24 +4866,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@@ -4957,12 +4890,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_i686_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -4981,12 +4908,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@@ -5005,12 +4926,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@@ -5029,12 +4944,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "windows_x86_64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]]
name = "winnow"
version = "0.5.40"
+30 -25
View File
@@ -1,8 +1,8 @@
<p style="text-align: center;">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-dark.svg">
<img alt="Nx - Smart Monorepos · Fast CI" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
</picture>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-dark.svg">
<img alt="Nx - Smart Repos · Fast Builds" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
</picture>
</p>
<div style="text-align: center;">
@@ -10,7 +10,7 @@
[![CircleCI](https://circleci.com/gh/nrwl/nx.svg?style=svg)](https://circleci.com/gh/nrwl/nx)
[![License](https://img.shields.io/npm/l/nx.svg?style=flat-square)]()
[![NPM Version](https://badge.fury.io/js/nx.svg)](https://www.npmjs.com/package/nx)
[![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)]()
[![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic-release-e10079.svg?style=flat-square)]()
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Join the chat at https://gitter.im/nrwl-nx/community](https://badges.gitter.im/nrwl-nx/community.svg)](https://gitter.im/nrwl-nx/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Join the Official Nx Discord Server](https://img.shields.io/discord/1143497901675401286?label=discord)](https://go.nx.dev/community)
@@ -19,9 +19,9 @@
<hr>
# Smart Monorepos · Fast CI
# Smart Repos · Fast Builds
Build system, optimized for monorepos, with AI-powered architectural awareness and advanced CI capabilities.
Get to green PRs in half the time. Nx optimizes your builds, scales your CI, and fixes failed PRs. Built for developers and AI agents.
Create a new Nx workspace with
@@ -35,7 +35,7 @@ npx create-nx-workspace
npx nx init
```
to add Nx to your existing workspace to get faster task scheduling, caching and more. More [in the docs](https://nx.dev/getting-started/intro#try-nx-yourself).
to add Nx to your existing workspace to get faster task scheduling, caching and more. More [in the docs](https://nx.dev/getting-started/intro).
## Learn about CI with Nx Cloud
@@ -47,7 +47,7 @@ Connect your existing Nx workspace with
npx nx connect
```
Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/intro?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/getting-started/intro?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
## Useful links
@@ -58,7 +58,7 @@ Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/intro?utm_source=nxrepo
- [Our Twitter/X](https://x.com/nxdevtools)
<p style="text-align: center;"><a href="https://www.youtube.com/@nxdevtools/videos" target="_blank" rel="noreferrer"><img src="./images/nx-courses-and-videos.svg"
width="100%" alt="Nx - Smart Monorepos · Fast CI"></a></p>
width="100%" alt="Nx - Smart Repos · Fast Builds"></a></p>
## Want to help?
@@ -77,22 +77,27 @@ help you get started.
| ![Victor Savkin](https://avatars1.githubusercontent.com/u/35996?s=160) | ![Jason Jean](https://avatars2.githubusercontent.com/u/8104246?s=160) | ![Benjamin Cabanes](https://avatars2.githubusercontent.com/u/3447705?s=160) | ![Jack Hsu](https://avatars0.githubusercontent.com/u/53559?s=160) |
| [vsavkin](https://github.com/vsavkin) | [FrozenPandaz](https://github.com/FrozenPandaz) | [bcabanes](https://github.com/bcabanes) | [jaysoo](https://github.com/jaysoo) |
| James Henry | Jon Cammisuli | Isaac Mann | Juri Strumpflohner |
| James Henry | Jon Cammisuli | Max Kless | Juri Strumpflohner |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| ![James Henry](https://avatars.githubusercontent.com/u/900523?s=160&v=4) | ![Jon Cammisuli](https://avatars2.githubusercontent.com/u/4332460?s=160) | ![Isaac Mann](https://avatars1.githubusercontent.com/u/861504?s=160) | ![Juri Strumpflohner](https://avatars1.githubusercontent.com/u/542458?s=160) |
| [JamesHenry](https://github.com/JamesHenry) | [cammisuli](https://github.com/cammisuli) | [isaacplmann](https://github.com/isaacplmann) | [juristr](https://github.com/juristr) |
| ![James Henry](https://avatars.githubusercontent.com/u/900523?s=160&v=4) | ![Jon Cammisuli](https://avatars2.githubusercontent.com/u/4332460?s=160) | ![Max Kless](https://avatars.githubusercontent.com/u/34165455?s=160) | ![Juri Strumpflohner](https://avatars1.githubusercontent.com/u/542458?s=160) |
| [JamesHenry](https://github.com/JamesHenry) | [cammisuli](https://github.com/cammisuli) | [MaxKless](https://github.com/MaxKless) | [juristr](https://github.com/juristr) |
| Philip Fulcher | Caleb Ukle | Katerina Skroumpelou | Colum Ferry |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| ![Philip Fulcher](https://avatars1.githubusercontent.com/u/1536471?s=160) | ![Caleb Ukle](https://avatars.githubusercontent.com/u/23272162?s=160) | ![Katerina Skroumpelou](https://avatars0.githubusercontent.com/u/6603745?s=160) | ![Colum Ferry](https://avatars.githubusercontent.com/u/12140467?s=160) |
| [philipjfulcher](https://github.com/philipjfulcher) | [barbados-clemens](https://github.com/barbados-clemens) | [mandarini](https://github.com/mandarini) | [Coly010](https://github.com/Coly010) |
| Philip Fulcher | Caleb Ukle | Colum Ferry | Steven Nance |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| ![Philip Fulcher](https://avatars1.githubusercontent.com/u/1536471?s=160) | ![Caleb Ukle](https://avatars.githubusercontent.com/u/23272162?s=160) | ![Colum Ferry](https://avatars.githubusercontent.com/u/12140467?s=160) | ![Steven Nance](https://avatars.githubusercontent.com/u/1036428?s=160) |
| [philipjfulcher](https://github.com/philipjfulcher) | [barbados-clemens](https://github.com/barbados-clemens) | [Coly010](https://github.com/Coly010) | [llwt](https://github.com/llwt) |
| Emily Xiong | Miroslav Jonaš | Leosvel Pérez Espinosa | Zachary DeRose |
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| ![Emily Xiong](https://avatars.githubusercontent.com/u/16211801?s=160) | ![Miroslav Jonaš](https://avatars.githubusercontent.com/u/881612?s=160) | ![Leosvel Pérez Espinosa](https://avatars.githubusercontent.com/u/12051310?s=160) | ![Zachary DeRose](https://avatars.githubusercontent.com/u/3788405?s=160) |
| [xiongemi](https://github.com/xiongemi) | [meeroslav](https://github.com/meeroslav) | [leosvelperez](https://github.com/leosvelperez) | [ZackDeRose](https://github.com/ZackDeRose) |
| Miroslav Jonaš | Leosvel Pérez Espinosa | Zachary DeRose | Craigory Coppola |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| ![Miroslav Jonaš](https://avatars.githubusercontent.com/u/881612?s=160) | ![Leosvel Pérez Espinosa](https://avatars.githubusercontent.com/u/12051310?s=160) | ![Zachary DeRose](https://avatars.githubusercontent.com/u/3788405?s=160) | ![Craigory Coppola](https://avatars.githubusercontent.com/u/6933928?s=160) |
| [meeroslav](https://github.com/meeroslav) | [leosvelperez](https://github.com/leosvelperez) | [ZackDeRose](https://github.com/ZackDeRose) | [AgentEnder](https://github.com/AgentEnder) |
| Craigory Coppola | Chau Tran | Nicholas Cunningham | Max Kless |
| -------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| ![Craigory Coppola](https://avatars.githubusercontent.com/u/6933928?s=160) | ![Chau Tran](https://avatars.githubusercontent.com/u/25516557?s=160) | ![Nicholas Cunningham](https://avatars.githubusercontent.com/u/338948?s=160) | ![Max Kless](https://avatars.githubusercontent.com/u/34165455?s=160) |
| [AgentEnder](https://github.com/AgentEnder) | [nartc](https://github.com/nartc) | [ndcunningham](https://github.com/ndcunningham) | [MaxKless](https://github.com/MaxKless) |
| Chau Tran | Nicole Oliver | Rares Matei | Altan Stalker |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| ![Chau Tran](https://avatars.githubusercontent.com/u/25516557?s=160) | ![Nicole Oliver](https://avatars.githubusercontent.com/u/4440385?s=160) | ![Rares Matei](https://avatars.githubusercontent.com/u/5975076?s=160) | ![Altan Stalker](https://avatars.githubusercontent.com/u/6324206?s=160) |
| [nartc](https://github.com/nartc) | [nixallover](https://github.com/nixallover) | [rarmatei](https://github.com/rarmatei) | [StalkAltan](https://github.com/StalkAltan) |
| Josh VanAllen | Austin Fahsl | Louie Weng |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------- |
| ![Josh VanAllen](https://avatars.githubusercontent.com/u/5290334?s=160) | ![Austin Fahsl](https://avatars.githubusercontent.com/u/6913035?s=160) | ![Louie Weng](https://avatars.githubusercontent.com/u/56288712?s=160) |
| [joshvanallen](https://github.com/joshvanallen) | [fahslaj](https://github.com/fahslaj) | [lourw](https://github.com/lourw) |
+15
View File
@@ -0,0 +1,15 @@
# Security Policy
Nx/Nrwl takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations.
If you believe you have found a security vulnerability in any Nx-owned repository that meets Nx's definition of a security vulnerability, please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Security Team at security@nrwl.io.
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message.
Nx follows the principle of Coordinated Vulnerability Disclosure.
+6
View File
@@ -0,0 +1,6 @@
node_modules/
dist/
.astro/
.netlify/
test-output/
playwright-report/
+28
View File
@@ -0,0 +1,28 @@
{
"extends": ["plugin:playwright/recommended", "../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["**/*.spec.ts", "**/*.test.ts", "**/*.spec.js", "**/*.test.js"],
"rules": {
"playwright/no-standalone-expect": "off"
}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
},
{
"files": ["e2e/**/*.{ts,js,tsx,jsx}"],
"rules": {}
}
]
}
+24
View File
@@ -0,0 +1,24 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store
# Local Netlify folder
.netlify
+235
View File
@@ -0,0 +1,235 @@
# Nx Documentation Site
[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build)
The Nx documentation site built with Astro and Starlight, featuring advanced content management through Markdoc and dynamic plugin documentation generation.
## Architecture Overview
This documentation site leverages Astro's static site generation capabilities with Starlight for documentation-specific features. The architecture consists of:
### Core Technologies
- [**Astro**](https://docs.astro.build) - Static site generator with island architecture
- [**Starlight**](https://starlight.astro.build) - Documentation theme with built-in navigation, search, and i18n
- **React** - For implementing UI components
- **Netlify** - Deployment and hosting
### Key Features
- [Markdoc](https://markdoc.dev) with custom tags for rich content such as videos, graphs, etc.
- TailwindCSS for styling in Astro and React components
- Dynamic API documentation generation from Nx packages and CLI commands
- Community plugin registry
## Project Structure
```
astro-docs/
├── src/
│ ├── assets/ # Images and static assets to be optimized by Astro
│ │ ├── nx/ # Nx branding assets
│ │ ├── nx-cloud/ # Nx Cloud assets
│ │ └── nx-console/ # Nx Console assets
│ ├── components/ # React and Astro components
│ │ ├── layout/ # Layout components (e.g. Sidebar)
│ │ ├── markdoc/ # Markdoc tag components
│ │ └── utils/ # Utility functions
│ ├── content/ # Documentation content
│ │ ├── docs/ # Main documentation files (.mdoc, .mdx)
│ │ ├── approved-community-plugins.json # Powers plugin registry
│ │ └── notifications.json # Notifications banners for docs site
│ ├── pages/ # Dynamic pages and routes (e.g. devkit)
│ ├── plugins/ # Content loaders and plugins
│ │ ├── *.loader.ts # Dynamic content loaders (e.g. CLI commands and API docs generation)
│ │ └── utils/ # Plugin utilities
│ └── styles/ # Global styles
├── public/ # Static assets not to be optimized by Astro (fonts, robots.txt)
├── astro.config.mjs # Astro configuration
├── markdoc.config.mjs # Markdoc tags configuration
├── sidebar.mts # Sidebar structure definition
└── package.json
```
## Plugins and Loaders
### Content Loaders
The site uses custom content loaders to dynamically generate documentation:
- **PluginLoader** (`plugin.loader.ts`) - Generates official plugin documentation (generators, executors, migrations)
- **CommunityPluginsLoader** (`community-plugins.loader.ts`) - Generates data for plugin registry (e.g. GitHub stars, npm downloads)
- **NxReferencePackagesLoader** (`nx-reference-packages.loader.ts`) - Generated data for CNW, Devkit, nx cli (e.g. nx core related things)
## Content Management
### Content Types
1. **Regular Documentation** (`src/content/docs/`)
- Written in `.mdoc` (Markdoc) or `.mdx` (MDX) format
- Organized by sections: getting-started, concepts, guides, api
- File-based routing (filename = URL path)
2. **Dynamic Plugin Documentation**
- Auto-generated from Nx packages
- Includes generators, executors, and migrations
- Updated during build process
- **Note**: Requires a rebuild and restart to reflect changes
3. **CLI Documentation**
- Auto-generated from Nx CLI commands
- Parsed from actual CLI implementation
- **Note**: Requires a rebuild and restart to reflect changes
### Markdoc Tags
The site includes custom Markdoc tags for rich content.
**Note**: Starlight supports many Markdown and Markdoc features, such as code blocks, asides, etc.
- https://starlight.astro.build/components/using-components/#using-a-component-in-markdoc
- https://starlight.astro.build/guides/authoring-content
#### Layout & Organization
- `{% aside %}` - Highlighted information boxes
- `{% cardgrid %}`, `{% card|linkcard %}` - Card layouts
- `{% tabs %}`, `{% tabitem label="some-label" %}` - Tab layouts
- Use the `syncKey` so tabs are auto switched to the users preference if it makes sense.
- e.g. `{% tabs syncKey="package-manager" %}`
#### Interactive Components
- `{% graph %}` - Interactive project/task graph visualization
- `{% project_details %}` - Project configuration viewer
#### Media & Embeds
- `{% youtube %}` - YouTube video embeds
- `{% video_player %}` - Custom video player
- `{% iframe %}` - Generic iframe embeds
#### Developer Tools
- `{% github_repository %}` - GitHub repo cards
- `{% stackblitz_button %}` - StackBlitz demo launcher
- `{% install_nx_console %}` - IDE extension installer
#### Content Enhancement
- `{% badge %}` - Status/label pills
- `{% metrics %}` - Metrics display
- `{% testimonial %}` - Customer testimonials
## Development Workflow
### Getting Started
```bash
# Install dependencies and link workspace packages
# This will build Nx packages as well for API docs
nx serve astro-docs
# Or run astro dev directly
# This will not build Nx packages
cd astro-docs
npx astro dev
# Custom ports (useful for AI agents with git worktrees)
npx astro dev --port 3000
```
### Adding New Content
#### Regular Documentation
1. Create `.mdoc` file in `src/content/docs/`
2. Add frontmatter with title and description
3. Use Markdoc tags for rich content
4. File location determines URL structure
Example:
```markdown
---
title: 'My New Guide'
description: 'Learn how to use this feature'
---
# Introduction
{% aside type="note" title="Important" %}
This is a note about the feature.
{% /aside %}
```
#### Adding Custom Markdoc Tags
1. Create Astro component in `src/components/markdoc/`
2. (Optional) Create React component for more complex components, or ones that need to be shared with blog or non-docs pages
3. Register in `markdoc.config.mjs`
4. Define attributes and validation
### Updating Plugin Documentation
Plugin documentation is auto-generated during build. To update:
1. Make changes to the plugin's schema/implementation
2. Run the build process
3. The loader will automatically fetch and generate updated docs
### Sidebar Management
The sidebar structure is defined in `sidebar.mts`. To add new sections:
```javascript
export const sidebar = [
{
label: 'Section Name',
items: [
{
label: 'Page Title',
link: 'path/to/page',
},
// Nested sections
{
label: 'Subsection',
collapsed: true,
items: [...]
}
]
}
];
```
> Note there is a special case for sidebar items appearing in the sidebar. Such as the `Reference` section which is handled via the `[sidebar-reference-updater](./src/plugins/sidebar-reference-updater.middleware.ts)` middleware.
## Styling and Theming
- Uses Tailwind CSS v4 with Vite plugin
- Global styles in `src/styles/global.css`
- Component-specific styles use Tailwind utilities
- Dark/light mode support built into Starlight and customized in `global.css`
## Configuration Files
### `astro.config.mjs`
- Site configuration
- Integration setup (React, Markdoc, Starlight)
- Vite plugins
- Build options
### `markdoc.config.mjs`
- Custom tag definitions
- Attribute validation
- Component mappings
### `sidebar.mts`
- Navigation structure
- Section organization
- Dynamic content injection points
+156
View File
@@ -0,0 +1,156 @@
// @ts-check
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import netlify from '@astrojs/netlify';
import react from '@astrojs/react';
import markdoc from '@astrojs/markdoc';
import tailwindcss from '@tailwindcss/vite';
import { sidebar } from './sidebar.mts';
const BASE = '/docs';
// This is exposed as window.__CONFIG
const PUBLIC_CONFIG = {
cookiebotDisabled: process.env.COOKIEBOT_DISABLED === 'true',
cookiebotId: process.env.COOKIEBOT_ID ?? null,
gaMeasurementId: 'UA-88380372-10',
gtmMeasurementId: 'GTM-KW8423B6',
isProd: process.env.NODE_ENV === 'production',
};
// https://astro.build/config
export default defineConfig({
base: BASE,
vite: { plugins: [tailwindcss()] },
// Allow this to be configured per environment
// Note: this happens during build time so we don't use `import.meta.env`
site: process.env.NX_DEV_URL ?? 'https://nx.dev',
image: {
service: {
entrypoint: 'astro/assets/services/sharp',
config: {
limitInputPixels: false, // Disable pixel limit
},
},
},
trailingSlash: 'never',
// This adapter doesn't support local previews, so only load it on Netlify.
adapter: process.env['NETLIFY'] ? netlify() : undefined,
integrations: [
markdoc(),
// https://starlight.astro.build/reference/configuration/
starlight({
title: 'Nx',
tagline:
'Get to green PRs in half the time. Nx optimizes your builds, scales your CI, and fixes failed PRs. Built for developers and AI agents.',
customCss: ['./src/styles/global.css'],
favicon: '/favicon.svg',
logo: {
light: './src/assets/nx/Nx-dark.png',
dark: './src/assets/nx/Nx-light.png',
replacesTitle: true,
},
disable404Route: true,
head: [
{
tag: 'script',
content: `window.__CONFIG = ${JSON.stringify(PUBLIC_CONFIG)};`,
},
...(process.env.COOKIEBOT_ID &&
process.env.COOKIEBOT_DISABLED !== 'true'
? [
{
/** @type {"script"} */
tag: 'script',
attrs: {
id: 'Cookiebot',
src: 'https://consent.cookiebot.com/uc.js',
'data-cbid': process.env.COOKIEBOT_ID,
'data-blockingmode': 'auto',
type: 'text/javascript',
},
},
]
: []),
{
tag: 'script',
attrs: {
src: `${BASE}/global-scripts.js`,
defer: true,
},
},
],
plugins: [],
routeMiddleware: [
'./src/plugins/banner.middleware.ts',
// NOTE: this is responsibile for populating the Reference section
// with generated routes from the nx-reference-packages content collection
// since the sidebar doesn't auto generate w/ dynamic routes from src/pages/reference
// only the src/content/docs/reference files
'./src/plugins/sidebar-reference-updater.middleware.ts',
'./src/plugins/sidebar-icons.middleware.ts',
'./src/plugins/og.middleware.ts',
],
markdown: {
// this breaks the renderMarkdown function in the plugin loader due to starlight path normalization
// as to _why_ it has to normalize a path?
// idk just working around the issue for now but we'll want to have linked headers so will need to fix
headingLinks: false,
},
social: [
{ icon: 'github', label: 'GitHub', href: 'https://github.com/nrwl/nx' },
{
icon: 'youtube',
label: 'YouTube',
href: 'https://www.youtube.com/@NxDevtools?utm_source=nx.dev',
},
{
icon: 'x.com',
label: 'X',
href: 'https://x.com/NxDevTools?utm_source=nx.dev',
},
{
icon: 'discord',
label: 'Discord',
href: 'https://go.nx.dev/community',
},
],
editLink: {
baseUrl: 'https://github.com/nrwl/nx/tree/main/',
},
sidebar,
components: {
Header: './src/components/layout/Header.astro',
Footer: './src/components/layout/Footer.astro',
PageFrame: './src/components/layout/PageFrame.astro',
Sidebar: './src/components/layout/Sidebar.astro',
TwoColumnContent: './src/components/layout/TwoColumnContent.astro',
PageTitle: './src/components/layout/PageTitle.astro',
TableOfContents: './src/components/layout/TableOfContents.astro',
},
pagefind: {
ranking: {
// termFrequency changes the ranking balance between
// frequency of the term relative to document length
// versus weighted term count.
// default is 1.0
termFrequency: 0.75,
// pageLength changes the way ranking compares page lengths with the average page lengths on your site.
// default 0.75
pageLength: 0.5,
// termSaturation controls how quickly a term “saturates” on a page.
// Once a term has appeared on a page many times,
// further appearances have a reduced impact on the page rank.
// default: 1.4
// termSaturation: 1.4,
// termSimilarity changes the ranking based on
// similarity of terms to the search query.
// Currently this only takes the length of the term into account.
// default is 1.0
// termSimilarity: 1.0,
},
},
}),
react(),
],
});
@@ -0,0 +1,45 @@
import { test, expect } from '@playwright/test';
test('links in descriptions of properties should correctly link to the same page w/ url fragments', async ({
page,
}) => {
await page.goto('/docs/reference/devkit/NxJsonConfiguration');
await expect(
page.getByRole('heading', { name: 'NxJsonConfiguration' })
).toBeVisible();
await page
.getByTestId('main-pane')
.getByRole('link', { name: 'nxCloudAccessToken' })
.click();
await expect(
page.getByRole('heading', { name: 'nxCloudAccessToken' })
).toBeVisible();
const description = page
.getByRole('paragraph')
.filter({ has: page.getByRole('link', { name: 'tasksRunnerOptions' }) })
.first();
await expect(description).toBeVisible();
const linkedProperty = description.getByRole('link', {
name: 'tasksRunnerOptions',
});
await expect(linkedProperty).toBeVisible();
await expect(linkedProperty).toHaveAttribute(
'href',
'/docs/reference/devkit/NxJsonConfiguration#tasksrunneroptions'
);
await linkedProperty.click();
expect(page.url()).toContain('#tasksrunneroptions');
await expect(
page.getByRole('heading', { name: 'tasksRunnerOptions' })
).toBeVisible();
});
+71
View File
@@ -0,0 +1,71 @@
import { test, expect } from '@playwright/test';
test('should apply system theme by default', async ({ page }) => {
await page.goto('/docs/getting-started/intro');
await expect(
page.getByRole('heading', { name: 'What is Nx?' })
).toBeVisible();
const themeSelector = page.getByRole('combobox', {
name: /theme/i,
});
await expect(themeSelector).toBeVisible();
await expect(themeSelector).toHaveValue('auto');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
// The data-theme should be either 'light' or 'dark' based on system preference
// It won't be 'auto' on the document element
expect(['light', 'dark']).toContain(dataTheme);
});
test('should switch to between light and dark theme', async ({ page }) => {
await page.goto('/docs/getting-started/intro');
await expect(
page.getByRole('heading', { name: 'What is Nx?' })
).toBeVisible();
const themeSelector = page.getByRole('combobox', {
name: /theme/i,
});
await test.step('light theme renders', async () => {
await expect(themeSelector).toBeVisible();
await themeSelector.selectOption('light');
await expect(themeSelector).toHaveValue('light');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(dataTheme).toBe('light');
});
await test.step('dark theme renders', async () => {
await themeSelector.selectOption('dark');
await expect(themeSelector).toHaveValue('dark');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(dataTheme).toBe('dark');
});
await test.step('switch back to auto', async () => {
await themeSelector.selectOption('auto');
await expect(themeSelector).toHaveValue('auto');
const dataTheme = await page.evaluate(
() => document.documentElement.dataset.theme
);
expect(['light', 'dark']).toContain(dataTheme);
});
});
+129
View File
@@ -0,0 +1,129 @@
#!/usr/bin/env bash
# | xargs -0 sed -i '' 's/<match>/<replace>/g'
# replace links that start with /concepts to /docs/concepts
rg "\(/concepts" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/concepts|](/docs/concepts|g'
# usage in link card aka href="/concepts/..."
rg "=\"/concepts" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/concepts|="/docs/concepts|g'
# /recipes -> /docs/guides
rg "\(/recipes" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/recipes|](/docs/guides|g'
rg "=\"/recipes" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/recipes|="/docs/guides|g'
# /deprecated -> /docs/reference/deprecated
rg "\(/deprecated" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/deprecated|](/docs/reference/deprecated|g'
rg "=\"/deprecated" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/deprecated|="/docs/reference/deprecated|g'
# /troubleshooting -> /docs/troublshooting
rg "\(/troubleshooting" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/troubleshooting|](/docs/troubleshooting|g'
rg "=\"/troubleshooting" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/troubleshooting|="/docs/troubleshooting|g'
# /plugin-registry -> /docs/plugin-registry
rg "\(/plugin-registry" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/plugin-registry|](/docs/plugin-registry|g'
rg "=\"/plugin-registry" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/plugin-registry|="/docs/plugin-registry|g'
# /features -> /docs/features
rg "\(/features" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/features|](/docs/features|g'
rg "=\"/features" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/features|="/docs/features|g'
# /extending-nx -> /docs/extending-nx
rg "\(/extending-nx" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/extending-nx|](/docs/extending-nx|g'
rg "=\"/extending-nx" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/extending-nx|="/docs/extending-nx|g'
rg "/extending-nx/recipes" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|/extending-nx/recipes|/extending-nx|g'
# /tech -> /docs/tech
rg "\(/tech" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/tech|](/docs/tech|g'
rg "=\"/tech" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/tech|="/docs/tech|g'
## /recipes/running-tasks -> /docs/guides/tasks--caching
rg "\(/recipes/running-tasks" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/recipes/running-tasks|](/docs/guides/tasks--caching|g'
rg "=\"/recipes/running-tasks" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/recipes/running-tasks|="/docs/guides/tasks--caching|g'
# /ci/features -> /docs/features/ci-features
rg "\(/ci/features" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/features|](/docs/features/ci-features|g'
rg "=\"/ci/features" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/features|="/docs/features/ci-features|g'
# /ci/concepts -> /docs/concepts/ci-concepts
rg "\(/ci/concepts" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/concepts|](/docs/concepts/ci-concepts|g'
rg "=\"/ci/concepts" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/concepts|="/docs/concepts/ci-concepts|g'
# /ci/guides/security -> /docs/guides/nx-cloud
rg "\(/ci/guides/security" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/guides/security|](/docs/guides/nx-cloud|g'
rg "=\"/ci/guides/security" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/guides/security|="/docs/guides/nx-cloud|g'
rg "\(/ci/recipes/security" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/recipes/security|](/docs/guides/nx-cloud|g'
rg "=\"/ci/recipes/security" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/recipes/security|="/docs/guides/nx-cloud|g'
# /ci/recipes/enterprise -> /docs/enterprise
rg "\(/ci/recipes/enterprise" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/recipes/enterprise|](/docs/enterprise|g'
rg "=\"/ci/recipes/enterprise" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/recipes/enterprise|="/docs/enterprise|g'
# /ci/recipes -> /docs/guides/nx-cloud
rg "\(/ci/guides" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/guides|](/docs/guides/nx-cloud|g'
rg "=\"/ci/guides" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/guides|="/docs/guides/nx-cloud|g'
rg "\(/ci/recipes" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/recipes|](/docs/guides/nx-cloud|g'
rg "=\"/ci/recipes" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/recipes|="/docs/guides/nx-cloud|g'
# /getting-started -> /docs/getting-started
rg "\(/getting" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/getting|](/docs/getting|g'
rg "=\"/getting" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/getting|="/docs/getting|g'
# /ci/recipes/set-up -> /docs/guides/nx-cloud/setup-ci
rg "\(/ci/recipes/set-up" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/recipes/set-up|](/docs/guides/nx-cloud/setup-ci|g'
rg "=\"/ci/recipes/set-up" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/recipes/set-up|="/docs/guides/nx-cloud/setup-ci|g'
# I merged all the set-up ci guides into 1 page with tabs so we need to remove any links that go to specific guides
rg "/monorepo-ci-" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|\(/[^)]*\)/monorepo-ci-[^)]*\()\)|\1\2|g'
# /ci/reference/nx-cloud-cli -> /docs/reference/nx-cloud-cli
rg "\(/ci/reference/nx-cloud-cli" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/ci/reference/nx-cloud-cli|](/docs/reference/nx-cloud-cli|g'
rg "=\"/ci/reference/nx-cloud-cli" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/ci/reference/nx-cloud-cli|="/docs/reference/nx-cloud-cli|g'
# /blog -> https://nx.dev/blog
rg "\(/blog" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/blog|](https://nx.dev/blog|g'
rg "=\"/blog" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/blog|="https://nx.dev/blog|g'
# /enterprise -> https://nx.dev/enterprise
rg "\(/enterprise" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/enterprise|](https://nx.dev/enterprise|g'
rg "=\"/enterprise" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/enterprise|="https://nx.dev/enterprise|g'
# /pricing -> https://nx.dev/pricing
rg "\(/pricing" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/pricing|](https://nx.dev/pricing|g'
rg "=\"/pricing" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/pricing|="https://nx.dev/pricing|g'
# /contact -> https://nx.dev/contact
rg "\(/contact" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/contact|](https://nx.dev/contact|g'
rg "=\"/contact" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/contact|="https://nx.dev/contact|g'
# /nx-cloud -> https://nx.dev/nx-cloud
rg "\(/nx-cloud" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/nx-cloud|](https://nx.dev/nx-cloud|g'
rg "=\"/nx-cloud" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/nx-cloud|="https://nx.dev/nx-cloud|g'
# /courses -> https://nx.dev/courses
rg "\(/courses" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/courses|](https://nx.dev/courses|g'
rg "=\"/courses" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/courses|="https://nx.dev/courses|g'
# /community -> https://nx.dev/community
rg "\(/community" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/community|](https://nx.dev/community|g'
rg "=\"/community" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/community|="https://nx.dev/community|g'
# though these URLS that have `core-api` in them need to be special handled
# but we can search for 'core-api' later and do a different replace mechinism
# /reference -> /docs/reference
rg "\(/reference" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/reference|](/docs/reference|g'
rg "=\"/reference" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/reference|="/docs/reference|g'
# /docs/reference/core-api/nx/documents/:command -> /docs/reference/nx-commands#:command
rg "\(/docs/reference/core-api/nx/documents/" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|](/docs/reference/core-api/nx/documents/|](/docs/reference/nx-commands#|g'
rg "=\"/docs/reference/core-api/nx/documents/" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|="/docs/reference/core-api/nx/documents/|="/docs/reference/nx-commands#|g'
# /docs/reference/core-api/:remote-cache-plugin/overview -> /docs/reference/remote-cache-plugins/:remote-cache-plugin/overview
# For s3-cache
rg "/docs/reference/core-api/s3-cache" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|/docs/reference/core-api/s3-cache|/docs/reference/remote-cache-plugins/s3-cache|g'
# For azure-cache
rg "/docs/reference/core-api/azure-cache" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|/docs/reference/core-api/azure-cache|/docs/reference/remote-cache-plugins/azure-cache|g'
# For gcs-cache
rg "/docs/reference/core-api/gcs-cache" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|/docs/reference/core-api/gcs-cache|/docs/reference/remote-cache-plugins/gcs-cache|g'
# For shared-fs-cache
rg "/docs/reference/core-api/shared-fs-cache" --type-add "mdoc:*mdoc" -t mdoc -l --null | xargs -0 sed -i '' 's|/docs/reference/core-api/shared-fs-cache|/docs/reference/remote-cache-plugins/shared-fs-cache|g'
+35
View File
@@ -0,0 +1,35 @@
const url = 'http://localhost:4321/docs';
const timeout = 120000; // 2 minutes in milliseconds
console.log('starting up....');
export default async function globalSetup() {
const startTime = Date.now();
const maxEndTime = startTime + timeout;
console.log(`Waiting for ${url} to be available...`);
while (Date.now() < maxEndTime) {
try {
const response = await fetch(url);
if (response.ok) {
console.log(`✓ Server is ready at ${url}`);
return;
}
console.log(
`Server responded with status ${response.status}, retrying...`
);
} catch (error) {
// Server not available yet, continue polling
const remainingTime = Math.round((maxEndTime - Date.now()) / 1000);
if (remainingTime % 10 === 0 && remainingTime > 0) {
console.log(`Still waiting... ${remainingTime} seconds remaining`);
}
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
throw new Error(
`Server at ${url} did not become available within ${timeout / 1000} seconds`
);
}
+427
View File
@@ -0,0 +1,427 @@
import {
defineMarkdocConfig,
component,
Markdoc,
} from '@astrojs/markdoc/config';
import starlightMarkdoc from '@astrojs/starlight-markdoc';
export default defineMarkdocConfig({
extends: [starlightMarkdoc()],
tags: {
call_to_action: {
render: component('./src/components/markdoc/CallToAction.astro'),
attributes: {
url: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: true,
},
description: {
type: 'String',
required: false,
},
icon: {
type: 'String',
required: false,
},
variant: {
type: 'String',
required: false,
default: 'default',
matches: [
'default',
'gradient',
'inverted',
'gradient-alt',
'simple',
],
},
size: {
type: 'String',
required: false,
default: 'sm',
matches: ['sm', 'md', 'lg'],
},
},
},
callout: {
render: component('./src/components/markdoc/Callout.astro'),
children: ['paragraph', 'tag', 'list'],
attributes: {
type: {
type: 'String',
default: 'note',
matches: [
'announcement',
'caution',
'check',
'note',
'warning',
'deepdive',
],
errorLevel: 'critical',
},
title: {
type: 'String',
required: true,
},
expanded: {
type: 'Boolean',
default: false,
},
},
},
card: {
render: component('./src/components/markdoc/Card.astro'),
attributes: {
title: {
type: 'String',
required: true,
},
description: {
type: 'String',
default: '',
},
type: {
type: 'String',
default: 'documentation',
},
url: {
type: 'String',
default: '',
},
},
},
cards: {
render: component('./src/components/markdoc/Cards.astro'),
attributes: {
cols: {
type: 'Number',
},
smCols: {
type: 'Number',
},
mdCols: {
type: 'Number',
},
lgCols: {
type: 'Number',
},
moreLink: {
type: 'String',
},
},
},
course_video: {
render: component('./src/components/markdoc/CourseVideo.astro'),
attributes: {
src: {
type: 'String',
required: true,
},
courseTitle: {
type: 'String',
required: true,
},
courseUrl: {
type: 'String',
required: true,
},
},
},
github_repository: {
render: component('./src/components/markdoc/GithubRepository.astro'),
attributes: {
url: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: false,
},
},
},
graph: {
render: component('./src/components/markdoc/Graph.astro'),
attributes: {
jsonFile: {
type: 'String',
},
title: {
type: 'String',
},
type: {
type: 'String',
matches: ['project', 'task'],
default: 'project',
},
height: {
type: 'String',
required: true,
},
},
transform(node, config) {
const attributes = node.transformAttributes(config);
let rawContent = null;
for (const child of node.children) {
if (child.type === 'fence') {
rawContent = child.attributes.content;
break;
}
}
return new Markdoc.Tag(
this.render,
{
...attributes,
astroRawData: rawContent,
},
[]
);
},
},
iframe: {
render: component('./src/components/markdoc/Iframe.astro'),
attributes: {
src: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: true,
},
width: {
type: 'String',
default: '50%',
},
},
},
install_nx_console: {
render: component('./src/components/markdoc/InstallNxConsole.astro'),
attributes: {},
},
link_card: {
render: component('./src/components/markdoc/LinkCard.astro'),
attributes: {
title: {
type: 'String',
required: true,
},
type: {
type: 'String',
required: true,
},
icon: {
type: 'String',
required: false,
},
url: {
type: 'String',
default: '',
},
appearance: {
type: 'String',
default: 'default',
},
},
},
index_page_cards: {
render: component('./src/components/markdoc/IndexPageCards.astro'),
attributes: {
path: {
type: 'String',
required: true,
},
},
},
metrics: {
render: component('./src/components/markdoc/Metrics.astro'),
attributes: {
metrics: {
type: 'Array',
required: true,
},
},
},
persona: {
render: component('./src/components/markdoc/Persona.astro'),
children: ['paragraph', 'tag', 'list'],
attributes: {
title: {
type: 'String',
},
type: {
type: 'String',
default: 'integrated',
required: true,
matches: [
'cache',
'distribute',
'javascript',
'lerna',
'react',
'angular',
'integrated',
],
errorLevel: 'critical',
},
url: {
type: 'String',
required: true,
errorLevel: 'critical',
},
},
},
personas: {
render: component('./src/components/markdoc/Personas.astro'),
},
pill: {
render: component('./src/components/markdoc/Pill.astro'),
attributes: {
url: {
type: 'String',
default: '',
},
},
},
project_details: {
render: component('./src/components/markdoc/ProjectDetails.astro'),
children: [],
attributes: {
jsonFile: {
type: 'String',
},
title: {
type: 'String',
},
height: {
type: 'String',
},
expandedTargets: {
type: 'Array',
},
},
transform(node, config) {
const attributes = node.transformAttributes(config);
let rawContent = null;
for (const child of node.children) {
if (child.type === 'fence') {
rawContent = child.attributes.content;
break;
}
}
return new Markdoc.Tag(
this.render,
{
...attributes,
astroRawData: rawContent,
},
[]
);
},
},
stackblitz_button: {
render: component('./src/components/markdoc/StackblitzButton.astro'),
attributes: {
url: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: false,
},
},
},
testimonial: {
render: component('./src/components/markdoc/Testimonial.astro'),
children: ['paragraph'],
attributes: {
name: {
type: 'String',
},
title: {
type: 'String',
},
image: {
type: 'String',
},
},
},
video_link: {
render: component('./src/components/markdoc/VideoLink.astro'),
attributes: {
link: {
type: 'String',
required: true,
},
text: {
type: 'String',
required: false,
},
},
},
video_player: {
render: component('./src/components/markdoc/VideoPlayer.astro'),
attributes: {
src: {
type: 'String',
required: true,
},
alt: {
type: 'String',
required: false,
},
link: {
type: 'String',
required: false,
},
showDescription: {
type: 'Boolean',
required: false,
default: false,
},
showControls: {
type: 'Boolean',
required: false,
default: false,
},
autoPlay: {
type: 'Boolean',
required: false,
default: false,
},
loop: {
type: 'Boolean',
required: false,
default: false,
},
},
},
youtube: {
render: component('./src/components/markdoc/Youtube.astro'),
attributes: {
src: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: true,
},
width: {
type: 'String',
default: '100%',
},
caption: {
type: 'String',
required: false,
},
},
},
},
});
+22
View File
@@ -0,0 +1,22 @@
# Permanent redirects (301 by default)
[[redirects]]
from = "/"
to = "/docs/getting-started/intro"
[[redirects]]
from = "/showcase"
to = "/docs/quickstart"
[[redirects]]
from = "/showcase/example-repos/*"
to = "/docs/quickstart"
[[redirects]]
from = "/showcase/benchmarks/*"
to = "/docs/reference/benchmarks/:splat"
# Rewrite for base path handling (keeps URL the same)
[[redirects]]
from = "/docs/*"
to = "/:splat"
status = 200
+24
View File
@@ -0,0 +1,24 @@
{
"name": "astro-docs",
"version": "0.0.1",
"private": true,
"dependencies": {
"@astrojs/check": "^0.7.0",
"@astrojs/markdoc": "^0.15.0",
"@astrojs/netlify": "^6.4.0",
"@astrojs/react": "^4.3.0",
"@astrojs/starlight": "0.34.6",
"@astrojs/starlight-markdoc": "^0.4.0",
"@astrojs/starlight-tailwind": "^4.0.1",
"@nx/nx-dev-feature-analytics": "workspace:*",
"@nx/nx-dev-ui-animations": "workspace:*",
"@nx/nx-dev-ui-common": "workspace:*",
"@nx/nx-dev-ui-icons": "workspace:*",
"@nx/nx-dev-ui-markdoc": "workspace:*",
"@tailwindcss/vite": "^4.1.11",
"astro": "^5.10.1",
"astro-og-canvas": "^0.7.0",
"canvaskit-wasm": "^0.40.0",
"tailwindcss": "4.1.11"
}
}
+42
View File
@@ -0,0 +1,42 @@
import { defineConfig, devices } from '@playwright/test';
import { nxE2EPreset } from '@nx/playwright/preset';
import { workspaceRoot } from '@nx/devkit';
import { join } from 'path';
// For CI, you may want to set BASE_URL to the deployed application.
const baseURL = process.env['BASE_URL'] || 'http://localhost:4321';
const reportDir = join(
workspaceRoot,
'dist',
'astro-docs',
'playwright-report'
);
export default defineConfig({
...nxE2EPreset(__filename, { testDir: './e2e' }),
reporter: [
['list', { printSteps: true }],
['html', { outputFolder: reportDir, open: 'never' }],
[
'junit',
{
// JUnit only respects the outputFile option, and not outputDir or outputFolder
outputFile: `${reportDir}/test-e2e-nx-cloud.xml`,
},
],
],
/* Global setup to wait for server */
globalSetup: require.resolve('./global-setup.e2e.ts'),
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
baseURL,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
],
});
+93
View File
@@ -0,0 +1,93 @@
{
"name": "astro-docs",
"$schema": "../node_modules/nx/schemas/project-schema.json",
"comment": "package.json#scripts runs in the project root directory with astro assumes is where the node_modules is. which fails. so run the scripts in project.json#targets with --root command instead",
"targets": {
"serve": {
"continuous": true,
"dependsOn": [
{
"projects": ["devkit", "create-nx-workspace", "dotnet"],
"target": "build"
}
],
"command": "astro dev",
"options": {
"cwd": "astro-docs"
}
},
"build": {
"dependsOn": [
{
"projects": ["devkit", "create-nx-workspace", "dotnet"],
"target": "build"
}
],
"outputs": [
"{projectRoot}/dist",
"{projectRoot}/.astro",
"{projectRoot}/.netlify"
],
"command": "astro build",
"options": {
"cwd": "astro-docs"
}
},
"preview": {
"dependsOn": ["build"],
"command": "astro preview",
"continuous": true,
"options": {
"cwd": "astro-docs"
}
},
"astro": {
"command": "astro",
"options": {
"cwd": "astro-docs"
}
},
"test": {
"executor": "nx:noop",
"dependsOn": ["vite:test", "validate-links", "format"]
},
"pw-e2e": {
"dependsOn": ["serve"],
"parallelism": true
},
"e2e-ci--**/*": {
"dependsOn": ["preview"],
"parallelism": true,
"options": {
"args": []
}
},
"show-report": {
"command": "playwright show-report dist/astro-docs/playwright-report"
},
"validate-links": {
"dependsOn": ["build"],
"cache": true,
"inputs": [
"{projectRoot}/src/**/*",
"{projectRoot}/astro.config.mjs",
"{projectRoot}/sidebar.mts",
"{projectRoot}/markdoc.config.mjs",
"{projectRoot}/tsconfig.json",
"{projectRoot}/package.json"
],
"command": "tsx validate-links.ts",
"options": {
"cwd": "astro-docs"
}
},
"format": {
"cache": true,
"//": "nx format doesn't respect overrides, so we manually run prettier for mdoc files",
"command": "prettier **/*.mdoc --check"
},
"format:write": {
"command": "prettier **/*.mdoc --write"
}
}
}
+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Nx</title><path d="M11.987 14.138l-3.132 4.923-5.193-8.427-.012 8.822H0V4.544h3.691l5.247 8.833.005-3.998 3.044 4.759zm.601-5.761c.024-.048 0-3.784.008-3.833h-3.65c.002.059-.005 3.776-.003 3.833h3.645zm5.634 4.134a2.061 2.061 0 0 0-1.969 1.336 1.963 1.963 0 0 1 2.343-.739c.396.161.917.422 1.33.283a2.1 2.1 0 0 0-1.704-.88zm3.39 1.061c-.375-.13-.8-.277-1.109-.681-.06-.08-.116-.17-.176-.265a2.143 2.143 0 0 0-.533-.642c-.294-.216-.68-.322-1.18-.322a2.482 2.482 0 0 0-2.294 1.536 2.325 2.325 0 0 1 4.002.388.75.75 0 0 0 .836.334c.493-.105.46.36 1.203.518v-.133c-.003-.446-.246-.55-.75-.733zm2.024 1.266a.723.723 0 0 0 .347-.638c-.01-2.957-2.41-5.487-5.37-5.487a5.364 5.364 0 0 0-4.487 2.418c-.01-.026-1.522-2.39-1.538-2.418H8.943l3.463 5.423-3.379 5.32h3.54l1.54-2.366 1.568 2.366h3.541l-3.21-5.052a.7.7 0 0 1-.084-.32 2.69 2.69 0 0 1 2.69-2.691h.001c1.488 0 1.736.89 2.057 1.308.634.826 1.9.464 1.9 1.541a.707.707 0 0 0 1.066.596zm.35.133c-.173.372-.56.338-.755.639-.176.271.114.412.114.412s.337.156.538-.311c.104-.231.14-.488.103-.74z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.
Binary file not shown.
+223
View File
@@ -0,0 +1,223 @@
(function () {
const config = window.__CONFIG || {};
if (!config.isProd) return;
const isCookiebotDisabled = config.cookiebotDisabled ?? false;
const gaMeasurementId = config.gaMeasurementId ?? 'UA-88380372-10';
const gtmMeasurementId = config.gtmMeasurementId ?? 'GTM-KW8423B6';
// Initialize global objects
window.Cookiebot = window.Cookiebot || {};
window.dataLayer = window.dataLayer || [];
window.gtag =
window.gtag ||
function () {
window.dataLayer.push(arguments);
};
const loadGoogleAnalytics = () => {
const script = document.createElement('script');
script.src = `https://www.googletagmanager.com/gtag/js?id=${gaMeasurementId}`;
script.async = true;
document.head.appendChild(script);
// Initialize gtag
window.gtag('js', new Date());
window.gtag('config', gaMeasurementId, {
page_path: window.location.pathname,
});
};
const loadGTM = () => {
if (!gtmMeasurementId) return;
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', gtmMeasurementId);
};
const loadHubSpot = () => {
const hsScript = document.createElement('script');
hsScript.src = 'https://js.hs-scripts.com/2757427.js';
hsScript.async = true;
hsScript.defer = true;
document.head.appendChild(hsScript);
// Load HubSpot Forms
const hsFormsScript = document.createElement('script');
hsFormsScript.src = '//js.hsforms.net/forms/v2.js';
hsFormsScript.async = true;
hsFormsScript.defer = true;
document.head.appendChild(hsFormsScript);
};
const loadApollo = () => {
const n = Math.random().toString(36).substring(7);
const script = document.createElement('script');
script.src = `https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=${n}`;
script.async = true;
script.defer = true;
script.onload = function () {
if (window.trackingFunctions?.onLoad) {
window.trackingFunctions.onLoad({
appId: '65e1db2f1976f30300fd8b26',
});
}
};
document.head.appendChild(script);
};
const loadHotjar = () => {
(function (h, o, t, j, a, r) {
h.hj =
h.hj ||
function () {
(h.hj.q = h.hj.q || []).push(arguments);
};
h._hjSettings = { hjid: 2774127, hjsv: 6 };
a = o.getElementsByTagName('head')[0];
r = o.createElement('script');
r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');
};
const loadTwitterPixel = () => {
!(function (e, t, n, s, u, a) {
e.twq ||
((s = e.twq =
function () {
s.exe ? s.exe.apply(s, arguments) : s.queue.push(arguments);
}),
(s.version = '1.1'),
(s.queue = []),
(u = t.createElement(n)),
(u.async = !0),
(u.src = 'https://static.ads-twitter.com/uwt.js'),
(a = t.getElementsByTagName(n)[0]),
a.parentNode.insertBefore(u, a));
})(window, document, 'script');
window.twq('config', 'obtp4');
};
const SEARCH_DEBOUNCE_MS = 1000;
let searchDebounceTimer;
let lastSearchQuery = '';
let currentSearchInput = null;
let inputHandler = null;
function sendSearchEvent(eventType, data) {
if (typeof window.gtag !== 'undefined')
window.gtag('event', eventType, data);
}
function trackSearchQuery(query) {
if (!query || query === lastSearchQuery) return;
clearTimeout(searchDebounceTimer);
searchDebounceTimer = setTimeout(() => {
lastSearchQuery = query;
sendSearchEvent('search_query', {
query: query,
});
}, SEARCH_DEBOUNCE_MS);
}
function setupSearchTracking() {
const observer = new MutationObserver(() => {
const searchDialog = document.querySelector(
'dialog[open] .search-container'
);
// If dialog is found, then set up tracking
if (searchDialog) {
if (currentSearchInput && inputHandler) return; // Already tracking
const searchInput = searchDialog.querySelector(
'input[type="search"], input[type="text"]'
);
if (searchInput) {
inputHandler = (e) => {
const query = e.target.value.trim();
trackSearchQuery(query);
};
searchInput.addEventListener('input', inputHandler);
currentSearchInput = searchInput;
}
}
// If dialog is not found but we have handler, etc. then it must be closed and we should clean up
else if (currentSearchInput && inputHandler) {
currentSearchInput.removeEventListener('input', inputHandler);
currentSearchInput = null;
inputHandler = null;
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['open'],
});
}
const checkAndLoadScripts = () => {
if (isCookiebotDisabled) {
loadGoogleAnalytics();
loadGTM();
loadHubSpot();
setupSearchTracking();
} else if (window.Cookiebot && window.Cookiebot.consent) {
// Statistics cookies (Google Analytics, GTM, Search Tracking)
if (window.Cookiebot.consent.statistics) {
loadGoogleAnalytics();
loadGTM();
setupSearchTracking();
}
// Marketing cookies (HubSpot, Apollo, Hotjar, Twitter)
if (window.Cookiebot.consent.marketing) {
loadHubSpot();
loadApollo();
loadHotjar();
loadTwitterPixel();
}
} else {
// Wait for Cookiebot to load
setTimeout(checkAndLoadScripts, 100);
}
};
// Add GTM noscript iframe to body
const addGTMNoScript = () => {
const noscript = document.createElement('noscript');
const iframe = document.createElement('iframe');
iframe.src = `https://www.googletagmanager.com/ns.html?id=${gtmMeasurementId}`;
iframe.height = '0';
iframe.width = '0';
iframe.style.display = 'none';
iframe.style.visibility = 'hidden';
iframe.title = 'Google Tag Manager';
noscript.appendChild(iframe);
document.body.insertBefore(noscript, document.body.firstChild);
};
// Listen for user consent to cookies
window.addEventListener('CookiebotOnAccept', checkAndLoadScripts);
// Initial check
checkAndLoadScripts();
// Add GTM noscript on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', addGTMNoScript);
} else {
addGTMNoScript();
}
})();
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Angular</title><path d="M16.712 17.711H7.288l-1.204 2.916L12 24l5.916-3.373-1.204-2.916ZM14.692 0l7.832 16.855.814-12.856L14.692 0ZM9.308 0 .662 3.999l.814 12.856L9.308 0Zm-.405 13.93h6.198L12 6.396 8.903 13.93Z"/></svg>

After

Width:  |  Height:  |  Size: 299 B

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="m21 7.5-9-5.25L3 7.5m18 0-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9" />
</svg>

After

Width:  |  Height:  |  Size: 284 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C#</title><path d="M1.194 7.543v8.913c0 1.103.588 2.122 1.544 2.674l7.718 4.456a3.086 3.086 0 0 0 3.088 0l7.718-4.456a3.087 3.087 0 0 0 1.544-2.674V7.543a3.084 3.084 0 0 0-1.544-2.673L13.544.414a3.086 3.086 0 0 0-3.088 0L2.738 4.87a3.085 3.085 0 0 0-1.544 2.673Zm5.403 2.914v3.087a.77.77 0 0 0 .772.772.773.773 0 0 0 .772-.772.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546 2.314 2.314 0 1 1-4.631 0v-3.087c0-.615.244-1.203.679-1.637a2.312 2.312 0 0 1 3.274 0c.434.434.678 1.023.678 1.637a.769.769 0 0 1-.226.545.767.767 0 0 1-1.091 0 .77.77 0 0 1-.226-.545.77.77 0 0 0-.772-.772.771.771 0 0 0-.772.772Zm12.35 3.087a.77.77 0 0 1-.772.772h-.772v.772a.773.773 0 0 1-1.544 0v-.772h-1.544v.772a.773.773 0 0 1-1.317.546.775.775 0 0 1-.226-.546v-.772H12a.771.771 0 1 1 0-1.544h.772v-1.543H12a.77.77 0 1 1 0-1.544h.772v-.772a.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546v.772h1.544v-.772a.773.773 0 0 1 1.544 0v.772h.772a.772.772 0 0 1 0 1.544h-.772v1.543h.772a.776.776 0 0 1 .772.772Zm-3.088-2.315h-1.544v1.543h1.544v-1.543Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>.NET</title><path d="M24 8.77h-2.468v7.565h-1.425V8.77h-2.462V7.53H24zm-6.852 7.565h-4.821V7.53h4.63v1.24h-3.205v2.494h2.953v1.234h-2.953v2.604h3.396zm-6.708 0H8.882L4.78 9.863a2.896 2.896 0 0 1-.258-.51h-.036c.032.189.048.592.048 1.21v5.772H3.157V7.53h1.659l3.965 6.32c.167.261.275.442.323.54h.024c-.04-.233-.06-.629-.06-1.185V7.529h1.372zm-8.703-.693a.868.829 0 0 1-.869.829.868.829 0 0 1-.868-.83.868.829 0 0 1 .868-.828.868.829 0 0 1 .869.829Z"/></svg>

After

Width:  |  Height:  |  Size: 534 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>ESLint</title><path d="M7.257 9.132L11.816 6.5a.369.369 0 0 1 .368 0l4.559 2.632a.369.369 0 0 1 .184.32v5.263a.37.37 0 0 1-.184.319l-4.559 2.632a.369.369 0 0 1-.368 0l-4.559-2.632a.369.369 0 0 1-.184-.32V9.452a.37.37 0 0 1 .184-.32M23.852 11.53l-5.446-9.475c-.198-.343-.564-.596-.96-.596H6.555c-.396 0-.762.253-.96.596L.149 11.509a1.127 1.127 0 0 0 0 1.117l5.447 9.398c.197.342.563.517.959.517h10.893c.395 0 .76-.17.959-.512l5.446-9.413a1.069 1.069 0 0 0 0-1.086m-4.51 4.556a.4.4 0 0 1-.204.338L12.2 20.426a.395.395 0 0 1-.392 0l-6.943-4.002a.4.4 0 0 1-.205-.338V8.08c0-.14.083-.269.204-.338L11.8 3.74c.12-.07.272-.07.392 0l6.943 4.003a.4.4 0 0 1 .206.338z"/></svg>

After

Width:  |  Height:  |  Size: 743 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>F#</title><path d="M0 12 11.39.61v5.695L5.695 12l5.695 5.695v5.695L0 12zm7.322 0 4.068-4.068v8.136L7.322 12zM24 12 12.203.61v5.695L17.898 12l-5.695 5.695v5.695L24 12z"/></svg>

After

Width:  |  Height:  |  Size: 253 B

+9
View File
@@ -0,0 +1,9 @@
<svg
role="img"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
>
<title>Java</title>
<path d="m16.5093 4.9869-.0607-.0347c-1.1014.369-4.4915 1.707-4.4915 4.202 0 1.411 1.378 2.1925 1.378 3.5158 0 .472-.2666.9146-.4836 1.1791l.1091.063c.5735-.3728 1.589-1.18 1.589-2.2222 0-.8825-1.2216-1.943-1.2216-3.0774 0-1.7875 2.357-3.1899 3.1813-3.6256zm-1.6642-3.27c0 3.6925-5.0604 5.1055-5.0604 7.7309 0 1.843 1.2222 2.9987 1.8983 3.7293l-.055.0317c-.8536-.534-3.0995-1.876-3.0995-4.0927 0-3.112 5.8123-4.599 5.8123-8.134 0-.435-.0644-.7683-.1095-.9482L14.2901 0c.1842.2315.555.8102.555 1.7168m.514 14.9392c-.5962.1688-1.9389.4441-3.859.4441-1.8844 0-3.424-.3226-3.4289-.7024-.0032-.2527.3024-.3628.3024-.3628l-.0544-.0316c-.9023.1595-1.7406.406-1.7357.7752.0084.6698 2.5697 1.1728 4.9129 1.1728 1.992 0 3.9053-.3343 4.7684-.7722zm-6.368 2.0708c-.4185.0832-1.3305.2926-1.3305.7361 0 .6144 1.9513 1.085 3.835 1.085 2.5922 0 3.6539-.667 3.702-.7016l-1.078-.6235c-.4583.1092-1.2306.2808-2.6214.2808-1.5521 0-2.5634-.2658-2.5634-.5569 0-.0617.0386-.135.1106-.1886zm10.5923-4.1337c-.0725 1.3911-1.3577 2.2573-2.6423 2.9893l.1164.067c1.3708-.3855 3.8166-1.5085 3.6144-3.2346-.1007-.8608-.8875-1.4758-1.9133-1.4758-.3194 0-.6036.0563-.834.1265l-.0007.0022-.0486.1224c.9175-.1796 1.7558.4904 1.7082 1.403zm-8.1232 8.1638c3.6058-.0313 7.6402-.737 7.6298-1.9232-.0019-.215-.1418-.3622-.2635-.4513l-.0592.034c-.3333.9188-3.1508 1.5977-7.3132 1.634-2.6859.0234-6.4063-.62-6.4128-1.3636-.0065-.7455 1.7625-1.1552 1.7625-1.1552l-.125-.0714c-1.1854.1632-3.3697.731-3.3625 1.5506.0104 1.185 5.0304 1.7734 8.1439 1.7461zm-.375.847c-1.4333.0126-3.1833-.1061-4.6555-.3535l-.1363.0784c1.4664.43 3.508.6896 5.7514.6702 4.4059-.0386 7.9779-1.1311 8.0485-2.446l-.051-.0297c-.2953.3604-2.2009 2.0216-8.9572 2.0806zm-5.5195-9.328c0-.6646 2.521-1.0374 3.6947-1.1277l.112.0647c-.451.082-2.26.401-2.26.8172 0 .4532 2.7747.7501 4.3853.7501 2.7355 0 4.595-.414 5.095-.5505l.6997.4072c-.4792.2346-2.5362.8495-5.7945.8495-3.6214 0-5.9322-.7086-5.9322-1.2105" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,18 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1244_718)">
<path d="M9.35205 3.72154V7.35041L12.0002 8.93803M9.35205 3.72154L12.0002 2.13391L14.6483 3.72154M9.35205 3.72154L12.0002 5.08236M12.0002 8.93803L14.6483 7.35041V3.72154M12.0002 8.93803V5.08236M14.6483 3.72154L12.0002 5.08236" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M8.3335 3.26804L12.0002 1L15.6668 3.26804V7.80412L12.0002 10.0722L8.3335 7.80412V3.26804Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M2.01855 15.2888V18.9177L4.6667 20.5053M2.01855 15.2888L4.6667 13.7012L7.31485 15.2888M2.01855 15.2888L4.6667 16.8764M4.6667 20.5053L7.31485 18.9177V15.2888M4.6667 20.5053V16.8764M7.31485 15.2888L4.6667 16.8764" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M1 14.8349L4.66667 12.5669L8.33333 14.8349V19.371L4.66667 21.6391L1 19.371V14.8349Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M16.6855 15.2888V18.9177L19.3337 20.5053M16.6855 15.2888L19.3337 13.7012L21.9818 15.2888M16.6855 15.2888L19.3337 16.6496M19.3337 20.5053L21.9818 18.9177V15.2888M19.3337 20.5053V16.6496M21.9818 15.2888L19.3337 16.6496" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M15.6665 14.8349L19.3332 12.5669L22.9998 14.8349V19.371L19.3332 21.6391L15.6665 19.371V14.8349Z" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M8.33317 6.89685L4.6665 9.16489V12.567" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M15.6668 6.89685L19.3335 9.16489V12.567" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
<path d="M7.51855 19.8248L12 23.0001L16.4815 19.8248" stroke="black" stroke-width="0.5" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_1244_718">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Node.js</title><path d="M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392 c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021 c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921 c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603 v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z M19.099,13.993 c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233 c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081 c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833 c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402 c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253 c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>React</title><path d="M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104c.251.023.501.05.75.082M19.8 15.3l-1.57.393A9.065 9.065 0 0 1 12 15a9.065 9.065 0 0 0-6.23-.693L5 14.5m14.8.8 1.402 1.402c1.232 1.232.65 3.318-1.067 3.611A48.309 48.309 0 0 1 12 21c-2.773 0-5.491-.235-8.135-.687-1.718-.293-2.3-2.379-1.067-3.61L5 14.5" />
</svg>

After

Width:  |  Height:  |  Size: 632 B

@@ -0,0 +1,4 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>TypeScript</title>
<path d="M0 12v12h24V0H0zm19.341-.956c.61.152 1.074.423 1.501.865.221.236.549.666.575.77.008.03-1.036.73-1.668 1.123-.023.015-.115-.084-.217-.236-.31-.45-.633-.644-1.128-.678-.728-.05-1.196.331-1.192.967a.88.88 0 0 0 .102.45c.16.331.458.53 1.39.933 1.719.74 2.454 1.227 2.911 1.92.51.773.625 2.008.278 2.926-.38.998-1.325 1.676-2.655 1.9-.411.073-1.386.062-1.828-.018-.964-.172-1.878-.648-2.442-1.273-.221-.243-.652-.88-.625-.925.011-.016.11-.077.22-.141.108-.061.511-.294.892-.515l.69-.4.145.214c.202.308.643.731.91.872.766.404 1.817.347 2.335-.118a.883.883 0 0 0 .313-.72c0-.278-.035-.4-.18-.61-.186-.266-.567-.49-1.649-.96-1.238-.533-1.771-.864-2.259-1.39a3.165 3.165 0 0 1-.659-1.2c-.091-.339-.114-1.189-.042-1.531.255-1.197 1.158-2.03 2.461-2.278.423-.08 1.406-.05 1.821.053zm-5.634 1.002l.008.983H10.59v8.876H8.38v-8.876H5.258v-.964c0-.534.011-.98.026-.99.012-.016 1.913-.024 4.217-.02l4.195.012z"/>
</svg>

After

Width:  |  Height:  |  Size: 1019 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24"><title>Visual Basic</title><path d="M6.363 17.719a7.57 7.57 0 0 1 .34-1.348L10.887 4.5h1.863l-5.473 15h-1.91L0 4.5h1.934l4.09 11.895c.078.218.14.437.187.656s.098.441.152.668zM20.66 11.53c.5.063.957.188 1.371.375s.766.442 1.055.762.512.691.668 1.113.238.89.246 1.406c0 .696-.133 1.31-.398 1.84s-.622.98-1.067 1.348-.96.645-1.547.832-1.203.285-1.851.293h-4.371v-15h4.265c.54 0 1.059.066 1.559.2s.95.335 1.348.609.714.628.949 1.066.355.957.363 1.559c0 .859-.227 1.601-.68 2.226s-1.09 1.067-1.91 1.324v.047zm-4.137-.597h1.793c.43 0 .832-.051 1.207-.153s.704-.258.985-.469.5-.488.656-.832.238-.746.246-1.207c0-.43-.078-.785-.234-1.066s-.367-.504-.633-.668-.57-.277-.914-.34-.707-.097-1.09-.105h-2.016v4.84zm2.38 6.972c.437 0 .85-.05 1.242-.152s.738-.262 1.043-.48.539-.5.703-.844.254-.762.27-1.254c0-.54-.102-.98-.306-1.324s-.476-.614-.82-.809-.73-.332-1.16-.41-.875-.117-1.336-.117h-2.016v5.39h2.38z"/></svg>

After

Width:  |  Height:  |  Size: 975 B

@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Vue.js</title><path d="M24,1.61H14.06L12,5.16,9.94,1.61H0L12,22.39ZM12,14.08,5.16,2.23H9.59L12,6.41l2.41-4.18h4.43Z"/></svg>

After

Width:  |  Height:  |  Size: 202 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 78 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 334 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Nx</title><path d="M11.987 14.138l-3.132 4.923-5.193-8.427-.012 8.822H0V4.544h3.691l5.247 8.833.005-3.998 3.044 4.759zm.601-5.761c.024-.048 0-3.784.008-3.833h-3.65c.002.059-.005 3.776-.003 3.833h3.645zm5.634 4.134a2.061 2.061 0 0 0-1.969 1.336 1.963 1.963 0 0 1 2.343-.739c.396.161.917.422 1.33.283a2.1 2.1 0 0 0-1.704-.88zm3.39 1.061c-.375-.13-.8-.277-1.109-.681-.06-.08-.116-.17-.176-.265a2.143 2.143 0 0 0-.533-.642c-.294-.216-.68-.322-1.18-.322a2.482 2.482 0 0 0-2.294 1.536 2.325 2.325 0 0 1 4.002.388.75.75 0 0 0 .836.334c.493-.105.46.36 1.203.518v-.133c-.003-.446-.246-.55-.75-.733zm2.024 1.266a.723.723 0 0 0 .347-.638c-.01-2.957-2.41-5.487-5.37-5.487a5.364 5.364 0 0 0-4.487 2.418c-.01-.026-1.522-2.39-1.538-2.418H8.943l3.463 5.423-3.379 5.32h3.54l1.54-2.366 1.568 2.366h3.541l-3.21-5.052a.7.7 0 0 1-.084-.32 2.69 2.69 0 0 1 2.69-2.691h.001c1.488 0 1.736.89 2.057 1.308.634.826 1.9.464 1.9 1.541a.707.707 0 0 0 1.066.596zm.35.133c-.173.372-.56.338-.755.639-.176.271.114.412.114.412s.337.156.538-.311c.104-.231.14-.488.103-.74z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

+9
View File
@@ -0,0 +1,9 @@
# *
User-agent: *
Allow: /
# Host
Host: https://nx.dev
# Sitemaps
Sitemap: https://nx.dev/sitemap-index.xml
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://nx.dev/docs/sitemap-0.xml</loc>
</sitemap>
</sitemapindex>
+225
View File
@@ -0,0 +1,225 @@
import type { StarlightUserConfig } from '@astrojs/starlight/types';
import { getPluginItems } from './src/plugins/utils/plugin-mappings';
export const sidebar: StarlightUserConfig['sidebar'] = [
{
label: 'Getting Started',
collapsed: false,
autogenerate: { directory: 'getting-started', collapsed: true },
},
{
label: 'Features',
collapsed: false,
autogenerate: { directory: 'features', collapsed: true },
},
{
label: 'Core Guides',
collapsed: true,
autogenerate: { directory: 'guides', collapsed: true },
},
{
label: 'Core Concepts',
collapsed: true,
autogenerate: { directory: 'concepts', collapsed: true },
},
{
label: 'Technologies',
collapsed: false,
// manually type the tech routes due to complexity of order and structure
items: [
{
label: 'TypeScript',
collapsed: true,
items: getPluginItems('js'),
},
{
label: 'Angular',
collapsed: true,
items: [
...getPluginItems('angular'),
{
label: 'Angular Rspack',
collapsed: true,
items: getPluginItems('angular-rspack', 'angular'),
},
{
label: 'Angular Rsbuild',
collapsed: true,
items: getPluginItems('angular-rsbuild', 'angular'),
},
],
},
{
label: 'React',
collapsed: true,
items: [
...getPluginItems('react'),
{
label: 'Next',
collapsed: true,
items: getPluginItems('next', 'react'),
},
{
label: 'Remix',
collapsed: true,
items: getPluginItems('remix', 'react'),
},
{
label: 'React Native',
collapsed: true,
items: getPluginItems('react-native', 'react'),
},
{
label: 'Expo',
collapsed: true,
items: getPluginItems('expo', 'react'),
},
],
},
{
label: 'Vue',
collapsed: true,
items: [
...getPluginItems('vue'),
{
label: 'Nuxt',
collapsed: true,
items: getPluginItems('nuxt', 'vue'),
},
],
},
{
label: 'Node.js',
collapsed: true,
items: [
...getPluginItems('node'),
{
label: 'Express',
collapsed: true,
items: getPluginItems('express', 'node'),
},
{
label: 'Nest',
collapsed: true,
items: getPluginItems('nest', 'node'),
},
],
},
{
label: 'Java',
collapsed: true,
// when we have maven this will change to not have gradle as the top docs for Java
items: getPluginItems('gradle', 'java'),
},
{
label: '.NET',
collapsed: true,
items: getPluginItems('dotnet'),
},
{
label: 'Module Federation',
collapsed: true,
items: getPluginItems('module-federation'),
},
{
label: 'ESLint',
collapsed: true,
items: [
...getPluginItems('eslint'),
{
label: 'ESLint Plugin',
collapsed: true,
items: getPluginItems('eslint-plugin', 'eslint'),
},
],
},
{
label: 'Build Tools',
collapsed: true,
items: [
{
label: 'Webpack',
collapsed: true,
items: getPluginItems('webpack', 'build-tools'),
},
{
label: 'Vite',
collapsed: true,
items: getPluginItems('vite', 'build-tools'),
},
{
label: 'Rollup',
collapsed: true,
items: getPluginItems('rollup', 'build-tools'),
},
{
label: 'ESBuild',
collapsed: true,
items: getPluginItems('esbuild', 'build-tools'),
},
{
label: 'Rspack',
collapsed: true,
items: getPluginItems('rspack', 'build-tools'),
},
{
label: 'Rsbuild',
collapsed: true,
items: getPluginItems('rsbuild', 'build-tools'),
},
],
},
{
label: 'Test Tools',
collapsed: true,
items: [
{
label: 'Cypress',
collapsed: true,
items: getPluginItems('cypress', 'test-tools'),
},
{
label: 'Jest',
collapsed: true,
items: getPluginItems('jest', 'test-tools'),
},
{
label: 'Playwright',
collapsed: true,
items: getPluginItems('playwright', 'test-tools'),
},
{
label: 'Storybook',
collapsed: true,
items: getPluginItems('storybook', 'test-tools'),
},
{
label: 'Detox',
collapsed: true,
items: getPluginItems('detox', 'test-tools'),
},
],
},
],
},
{
label: 'Enterprise',
collapsed: true,
autogenerate: { directory: 'enterprise', collapsed: true },
},
{
label: 'Extending Nx',
collapsed: true,
autogenerate: { directory: 'extending-nx', collapsed: true },
},
{
label: 'Reference',
collapsed: false,
autogenerate: { directory: 'reference', collapsed: true },
},
{
label: 'Troubleshooting',
collapsed: false,
autogenerate: { directory: 'troubleshooting', collapsed: true },
},
];
Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 334 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 78 KiB

@@ -0,0 +1,233 @@
{
"project": {
"name": "myreactapp",
"type": "app",
"data": {
"root": "apps/myreactapp",
"targets": {
"build": {
"options": {
"cwd": "apps/myreactapp",
"command": "vite build"
},
"cache": true,
"dependsOn": ["^build"],
"inputs": [
"production",
"^production",
{
"externalDependencies": ["vite"]
}
],
"outputs": ["{workspaceRoot}/dist/apps/myreactapp"],
"executor": "nx:run-commands",
"configurations": {},
"metadata": {
"technologies": ["vite"]
}
},
"serve": {
"options": {
"cwd": "apps/myreactapp",
"command": "vite serve",
"continuous": true
},
"executor": "nx:run-commands",
"configurations": {},
"metadata": {
"technologies": ["vite"]
}
},
"preview": {
"options": {
"cwd": "apps/myreactapp",
"command": "vite preview"
},
"executor": "nx:run-commands",
"configurations": {},
"metadata": {
"technologies": ["vite"]
}
},
"serve-static": {
"executor": "@nx/web:file-server",
"options": {
"buildTarget": "build",
"continuous": true
},
"configurations": {}
},
"test": {
"options": {
"cwd": "apps/myreactapp",
"command": "vitest run"
},
"cache": true,
"inputs": [
"default",
"^production",
{
"externalDependencies": ["vitest"]
}
],
"outputs": ["{workspaceRoot}/coverage/apps/myreactapp"],
"executor": "nx:run-commands",
"configurations": {},
"metadata": {
"technologies": ["vite"]
}
},
"lint": {
"cache": true,
"options": {
"cwd": "apps/myreactapp",
"command": "eslint ."
},
"inputs": [
"default",
"{workspaceRoot}/.eslintrc.json",
"{workspaceRoot}/apps/myreactapp/.eslintrc.json",
"{workspaceRoot}/tools/eslint-rules/**/*",
{
"externalDependencies": ["eslint"]
}
],
"executor": "nx:run-commands",
"configurations": {},
"metadata": {
"technologies": ["eslint"]
}
}
},
"name": "myreactapp",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "apps/myreactapp/src",
"projectType": "application",
"tags": [],
"implicitDependencies": [],
"metadata": {
"technologies": ["react"]
}
}
},
"sourceMap": {
"root": ["apps/myreactapp/project.json", "nx/core/project-json"],
"targets": ["apps/myreactapp/project.json", "nx/core/project-json"],
"targets.build": ["apps/myreactapp/vite.config.ts", "@nx/vite/plugin"],
"targets.build.command": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.options": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.cache": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.dependsOn": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.inputs": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.outputs": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.build.options.cwd": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve": ["apps/myreactapp/vite.config.ts", "@nx/vite/plugin"],
"targets.serve.command": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve.options": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve.options.cwd": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.preview": ["apps/myreactapp/vite.config.ts", "@nx/vite/plugin"],
"targets.preview.command": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.preview.options": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.preview.options.cwd": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve-static": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve-static.executor": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve-static.options": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.serve-static.options.buildTarget": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.test": ["apps/myreactapp/vite.config.ts", "@nx/vite/plugin"],
"targets.test.command": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.test.options": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.test.cache": ["apps/myreactapp/vite.config.ts", "@nx/vite/plugin"],
"targets.test.inputs": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.test.outputs": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.test.options.cwd": [
"apps/myreactapp/vite.config.ts",
"@nx/vite/plugin"
],
"targets.lint": ["apps/myreactapp/project.json", "@nx/eslint/plugin"],
"targets.lint.command": [
"apps/myreactapp/project.json",
"@nx/eslint/plugin"
],
"targets.lint.cache": ["apps/myreactapp/project.json", "@nx/eslint/plugin"],
"targets.lint.options": [
"apps/myreactapp/project.json",
"@nx/eslint/plugin"
],
"targets.lint.inputs": [
"apps/myreactapp/project.json",
"@nx/eslint/plugin"
],
"targets.lint.options.cwd": [
"apps/myreactapp/project.json",
"@nx/eslint/plugin"
],
"name": ["apps/myreactapp/project.json", "nx/core/project-json"],
"$schema": ["apps/myreactapp/project.json", "nx/core/project-json"],
"sourceRoot": ["apps/myreactapp/project.json", "nx/core/project-json"],
"projectType": ["apps/myreactapp/project.json", "nx/core/project-json"],
"tags": ["apps/myreactapp/project.json", "nx/core/project-json"]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 34 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 66 KiB

Some files were not shown because too many files have changed in this diff Show More