Compare commits

...

530 Commits

Author SHA1 Message Date
Colum Ferry de6f89189b feat(repo): add nx-graph-diff app 2025-08-06 16:17:20 +01: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
Jonathan Cammisuli eaf21e9854 feat(core): add ai rule files to gitignore (#31238)
<!-- 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 -->
Rule files are created by Nx Console, and gitignore updates are done
there.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Rule files are still created by Nx Console, but there is now a migration
to add those files to the gitignore rules on migration and new
workspaces.

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

Fixes #
2025-05-16 14:13:51 -04:00
Benjamin Cabanes ccfcc4097f docs(nx-dev): add solutions sections and components (#31239)
It adds a new "Solutions" section to the Nx Dev website with three targeted landing pages for different audiences: engineering teams, management teams platform teams, and leadership.

It creates three new page files (engineering.tsx, management.tsx, leadership.tsx, platform.tsx) that showcase Nx's benefits through various UI components like heroes, testimonials, feature sections, and FAQs. Each page highlights specific value propositions - engineering focuses on developer efficiency and standards, platform emphasizes reliable CI/CD scaling, and leadership addresses ROI and risk reduction.

The navigation is updated with a new "Solutions" dropdown menu in both desktop and mobile views, with corresponding menu items defined. The solutions pages include consistent sections like customer logos, calls-to-action, testimonials, and feature breakdowns that highlight Nx's capabilities for different stakeholders.
2025-05-16 13:55:47 -04:00
laney a5ccd13f92 feat(core): update getTouchedProjectsFromLockFile to detect which projects were changed from pnpm lock file diff (#31091)
…jects were changed from pnpm lock file diff

Closes #29986

## Current Behavior

Nx projects that use pnpm catalogs cannot take advantage of the
`projectsAffectedByDependencyUpdates` `“auto”` setting because updating
catalog versions does not touch project files.

## Expected Behavior

When `projectsAffectedByDependencyUpdates` is set to `“auto”`, updating
a catalog dependency version should result in all projects that use it
getting marked as affected.

A catalog version update and the affected projects can be detected from
a changed pnpm lock file. This PR updates the
`getTouchedProjectsFromLockFile` logic to check the lock file for pnpm
monorepos.

Example pnpm lock file diff after catalog dependency update:

```diff
# pnpm-lock.yaml

# ...

catalogs:
  default:
    '@aws-sdk/client-s3':
-      specifier: ^3.535.0
-      version: 3.535.0
+      specifier: ^3.797.0
+      version: 3.797.0

importers:

  apps/app1:
    dependencies:
      '@aws-sdk/client-s3':
        specifier: 'catalog:'
-        version: 3.535.0
+        version: 3.797.0

# ...
```

## Related Issue(s)

https://github.com/nrwl/nx/issues/29986

Fixes #29986

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-05-16 13:17:45 -04:00
Jason Jean a45ec7e0bd fix(core): restore older nx core migrations for repair (#31254)
<!-- 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 migrations should not have been removed as part of the Nx 21
update

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

The migrations are restored

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

Fixes #
2025-05-16 13:01:56 -04:00
Jason Jean e724eedc5e fix(core): record task runs via the queue (#31253)
<!-- 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 -->

Recording task runs does not send via the queue so the daemon could hang
without handling the response properly.

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

Recording task runs sends via the queue and does not hang

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

Fixes #
2025-05-16 12:01:43 -04:00
Nicolas Marien bd88b0efe4 feat(devkit): allow requiring cts config files (#31103)
When migrating our project to esm, we encountered an issue with the
playright plugin, but more generally with the `loadConfigFile` from the
devkit.
Our configuration is a `.cts` file, but it's not treated as commonjs:
`__dirname` and `__filename` are not available.

![CleanShot 2025-05-07 at 15 31
04@2x](https://github.com/user-attachments/assets/e8299b4e-153b-4cb4-98b7-d806e537ab12)

## Expected Behavior
`.cts` files are interpreted as commonJS files when in a module context.

---------

Co-authored-by: Jack Hsu <jack.hsu@gmail.com>
2025-05-16 11:58:34 -04:00
Nicholas Cunningham 1709b107bb fix(core): Update e2e nightly test to not hang (#31218)
Currently, the nightly tests are broken in a few ways this PR addresses
some of those issues but ultimately ensures that each step has a timeout
to handle the work case scenario i.e. unable to complete.

- Add bun installation and split e2e runners for macos, linux and
windows
- Add rust installation
- Add timeout for e2e tests 

Here is the result of a previous run:
https://github.com/nrwl/nx/actions/runs/14999368644
The most latest run can be found here:
https://github.com/nrwl/nx/actions/runs/15027418322

**Note**: The final result will be _failure_ because many tests still
need to be addressed, so that is expected.
2025-05-16 11:07:49 -04:00
Jack Hsu 840f5f445b fix(core): ensure that global nx works with dot-nx workspace after init (#31249)
This PR fixes an issue with the global `nx` command, where running `nx
init` in a non-JS folder (i.e. using dot-nx setup) results in a
workspace that doesn't work with the global command.

e.g.

```
brew install nx
cd some-java-project
nx init
nx report
```

https://www.loom.com/share/e8dbb2fb7a084300a4dd1e5dff2c0db1

## Current Behavior
`nx report` or any other command fails

## Expected Behavior
`nx` commands should work

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

Fixes #
2025-05-16 10:57:08 -04:00
James Henry fcd630ddd9 fix(core): remove engines field, improve compatibility documentation (#31245) 2025-05-16 10:00:00 -04:00
pawel-twardziak c4cb96c2e7 fix(linter): handle the flat config in workspace rule generators (#29253)
Closes #29252

## Current Behavior
See #29252

## Expected Behavior
See #29252

## Related Issue(s)
See #29252

Fixes #
See #29252

---------

Co-authored-by: Miroslav Jonaš <missing.manual@gmail.com>
2025-05-16 09:39:34 +02:00
Jason Jean 7db44a855a fix(core): do not set tasks which cannot be interactive to interactive (#31240)
<!-- 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 -->

Some tasks cannot be interactive because of the way they are
implemented. At the moment, those tasks can be set to interactive mode.

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

Tasks which cannot be interactive are not set as interactive

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

Fixes #
2025-05-15 18:16:40 -04:00
Jason Jean 8ff47e0cb0 chore(repo): add debug logging to running tasks service (#31224)
<!-- 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 very few logs for the running task service.

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

There are logs for the running task service.

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

Fixes #
2025-05-15 16:57:56 -04:00
Nicholas Cunningham d3ecffedc1 feat(vite): add ajv dev dependency for vite-plugin-dts (#31107)
<!-- 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 we generate a vite library that uses `vite-plugin-dts`
it breaks the project graph and all nx commands fail.
It happens because the wrong version of `ajv` is being hoisted in
`node_modules/ajv` so the expected module path required from
`vite-plugin-dts` is not found.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Nx commands should work out of the box when we generate a library with
vite.

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

Fixes #
2025-05-15 15:44:53 -04:00
Isaac Mann 3873fee587 chore(core): update inputs for rust tasks (#31184)
- Adds `native` inputs to rust tasks
- Adds `rustc --version` runtime input to `native` named input
2025-05-15 13:55:15 -04:00
Jason Jean 4d3fea7f9d chore(repo): update nx to 21.1.0-beta.1 2025-05-15 10:05:16 -04:00
Colum Ferry d61683efc6 feat(angular): migrate to angular rspack 21 (#31216)
## Current Behavior
The Angular plugin currently uses Angular Rspack at `^20.7.0`.
The latest release of Angular Rspack is `21.0.0`

## Expected Behavior
Use the latest version of Angular Rspack
2025-05-15 13:13:02 +01:00
Jonathan Cammisuli 81ecb22abe feat(core): add nx console messaging to TUI (#31148)
<!-- 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 is no communication between Nx CLI and Nx Console

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
This enables a connection between the Nx TUI app and Nx Console so that
we can send messages to console. This is used to update MCP tools on Nx
Console to assist with LLMs

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

Fixes #
2025-05-14 15:58:30 -04:00
Michal Jez 47b9b51dd3 docs(nx-cloud): add tip to check for non-unique NX_CI_EXECUTION_ID on DTE failures (#27573)
I ran into this issue the other day with my CI pipeline when the build
number got reset

Co-authored-by: Altan Stalker <altan@nrwl.io>
2025-05-14 17:39:33 +00:00
Henry Ing-Simmons f6d69baf14 chore(core): replace red in console with blue (#29026)
<!-- 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 -->
Red is used as a colour when running multiple processes in the command
line. This causes confusion as red is universally the colour for
danger/errors.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Red should not be a colour in the console and blue should be used
instead.

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

Fixes #19901
2025-05-14 16:08:06 +00:00
Jason Jean 5105d39117 chore(repo): update nx to 20.1.0-beta.0 (#31215)
<!-- 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.0.2`

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

This repo uses Nx `21.1.0-beta.0`

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

Fixes #
2025-05-14 12:04:14 -04:00
Tyler Hendrickson 21bdb35a07 fix(esbuild): update peerDep range (#30402)
## Current Behavior
`esbuild` has a [security
advisory](https://github.com/advisories/GHSA-67mh-4wv8-2f99) for
versions older than 0.25.0. `@nx/esbuild` does not allow versions
greater than 0.19.2 due to the range specified in peer dependencies.

A fix for this was attempted in #30167, but it still does not allow any
versions greater than 0.19.x due to the way [0.x.x releases are
handled](https://github.com/npm/node-semver#caret-ranges-123-025-004).

## Expected Behavior
`@nx/esbuild` allows any version from the current 0.19.2 onwards, not
including a future 1.x.x version. This will allow non-vulnerable
versions of `esbuild` to be used.

## Related Issue(s)
Fixes #30009 
Fixes #30370
2025-05-14 16:00:34 +00:00
Nicholas Cunningham cc22a07601 fix(nx-dev): Add docs for disableChecksum option for s3-cache (#31199)
Add documentation for `disableChecksum` flag for AWS S3 storage options
so users can opt out of validating checksum while retrieving remote
cache.

<!-- 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-05-14 11:32:20 -04:00
Juri 3e83c2ae1f docs(core): update enhance LLM feature page 2025-05-14 16:58:18 +02:00
Colum Ferry 9aee5b7adf feat(angular): handle prerender and appshell in covert to rspack (#31210)
## Current Behavior
The `convert-to-rspack` generator does not handle projects that use
Prerendering or App Shell

## Expected Behavior
The generator sets up Prerendering and App Shell

Fixes https://github.com/nrwl/angular-rspack/issues/88
2025-05-14 15:26:41 +01:00
Jonathan Gelin 3be687bf95 fix(module-federation): generalize the check of the remote project specified in the buildTarget (#31211)
<!-- 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 #30808
2025-05-14 15:00:44 +01:00
Emily Xiong e15e2ed106 fix(gradle): make ci inputs same as test inputs (#31198)
<!-- 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 ci test target does not contain inputs of test, it just contains
the test source file

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
change the ci targets to contain inputs of test
<img width="903" alt="Screenshot 2025-05-13 at 1 31 22 PM"
src="https://github.com/user-attachments/assets/d73de232-440a-439b-adb8-e22fc3fe3d8a"
/>


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

Fixes #
2025-05-14 10:00:08 -04:00
Isaac Mann 514cdd890d chore(core): disable flaky e2e tests (#31200)
Disable flaky `e2e-release` tasks
2025-05-14 09:58:39 -04:00
Isaac Mann 552d6b1ea8 docs(core): add webinar info for 2025-05-28 (#31201)
Adds a May 28th webinar info and notifier
2025-05-14 07:01:17 -04:00
Jonathan Cammisuli 889dee0854 chore(core): update rust to 2024 edition (#31156)
<!-- 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 using 2021 edition of rust

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Updates to 2024 edition to support more features that are coming in
other PRs

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

Fixes #
2025-05-13 18:11:05 -04:00
Jason Jean 3d73fd30a0 fix(core): make running a single task more transparent (#31163)
<!-- 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 a single task is in this uncanny framed state and doesn't exit
immediately.

<img width="1317" alt="image"
src="https://github.com/user-attachments/assets/13e7463f-9eb0-48db-95f2-c09e203d494f"
/>

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

Running a single task isn't framed and exits immediately.

This also fixes scrolling in interactive mode based on whether or not
the underlying terminal is in application cursor mode or not.


![image](https://github.com/user-attachments/assets/c32c85e7-edd6-4aba-9a15-bc75cc9ee5ba)


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

Fixes #

---------

Co-authored-by: JamesHenry <james@henry.sc>
2025-05-13 21:09:39 +00:00
Jack Hsu a31226437e docs(misc): update conformance rule options (#31183)
This PR updates our conformance rule that enforces module boundaries.
See here for more details: https://github.com/nrwl/ocean/pull/7377
2025-05-13 09:59:27 -06:00
Yiheng cd59a6678e feat(core): run parallel based on the number of cpu cores (#31011) 2025-05-13 16:19:16 +02:00
Juri 3f5fd896a1 feat(nx-dev): replace monorepo world link with office hours 2025-05-13 13:27:21 +02:00
Juri 70012ee082 docs(nx-dev): new blog post about integrating LLMs with Nx generate UI 2025-05-13 13:27:10 +02:00
Leosvel Pérez Espinosa e1c0be3d2d fix(angular): install @angular/build when using vitest test runner (#31169)
## Current Behavior

The application and library generators do not install the
`@angular/build` package when using the `vitest` test runner. This can
cause resolution issues depending on the package manager because the
package is a peer dependency of the `@analogjs/vite-plugin-angular`
package.

## Expected Behavior

The application and library generators should install the
`@angular/build` package when using the `vitest` test runner.

## Related Issue(s)

Fixes #30646
2025-05-13 13:22:49 +02:00
Austin Fahsl 8cf4b55174 docs(core): add Nx 21 to supported versions (#31182)
Update the supported Nx versions documentation to include Nx 21
2025-05-12 17:30:16 -04:00
Nicholas Cunningham f20b2e6a02 fix(nextjs): Update glob for cache output (#31177)
This PR refines the Next.js package plugin’s output glob to exclude the
.next/cache directory. Caching that path via AWS S3 leads to checksum
mismatches when restoring from the remote cache, so it’s now omitted.

related: https://github.com/nrwl/nx/issues/30338
2025-05-12 16:42:07 -04:00
Emily Xiong 5677831b17 fix(gradle): return success false for failed task (#31178)
<!-- 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-05-12 15:30:59 -04:00
Isaac Mann 07474a4092 Revert "docs(core): publish tutorial kit tutorials (#30973)" (#31179)
This reverts commit 2cb0fa2b55.

Removes the tutorialkit tutorials.
2025-05-12 15:23:41 -04:00
James Henry 07c8b4f41b fix(core): improve pinned tasks annotation on narrow width (#31175)
This is intended to be a super quick improvement until I can work on
something a bit more substantial.

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

We always try and render `[Pinned output {}]`.

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

We only render `[{}]` on narrow widths.

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

Fixes #
2025-05-12 19:06:14 +00:00
Jason Jean 29d9d154e9 chore(repo): add verbose logging when releasing (#31158)
<!-- 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 -->

Not much info is shown for errors.

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

More info is shown when publishing

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

Fixes #
2025-05-11 16:06:42 +04:00
Ian Luca cbb2619325 fix(core): do not follow symlinks when creating remote cache tarball (#31138)
<!-- 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

Symlinks in the remote cache tarball are "followed". That modifies the
output of Next.js projects using pnpm, causing a restored cache not to
work in production.

## Expected Behavior

Symlinks are added to the tarball, instead of being followed. I.e. the
cache output is not modified.

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

Should fix #31085.
2025-05-09 20:48:35 -04:00
Jonathan Cammisuli ce1d6b2e6e fix(core): change default native logging to "OFF" (#31161)
<!-- 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 -->
"ERROR" is set as the default logging level when using native logging.
This causes issues with the new function of calling the native logger
from the JS side.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
"OFF" is set as the default so that no logs appear on stdout if there
was no explicit opt-in.

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

Fixes #
2025-05-09 23:59:10 +00:00
Craigory Coppola bf1eec5eca feat(core): focus single tasks (#31159)
<!-- 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 a single task it is automatically focused, but the tasks
list is visible and the task is not interactive

## Expected Behavior
When running a single task, the tui is minimal without a tasks list and
with interactivity by default

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

Fixes #
2025-05-09 22:44:06 +00:00
Jack Hsu 5aa0c4050f fix(core): handle npm scope when matching project substring (#31160)
This PR fixes an issue if a JS project uses the same name as the npm
scope.

For example, if you have `@acme/acme` and `@acme/acme-e2e` projects,
then running `nx lint acme` will fail with an error:

```
 NX   Multiple projects matched:

@acme/acme-e2e
@acme/acme
```
## Current Behavior
Nx fails to run the task

## Expected Behavior
Nx should find the project to run the task for (ignoring scope)

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

Fixes #
2025-05-09 18:43:36 -04:00
Jason Jean b620ea7dc1 fix(core): show all native logs for debug mode (#31154)
<!-- 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 -->

TUI debug mode only shows native logs since the TUI launched.

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

TUI debug mode shows logs even before the TUI launched such as task
hashing logs and more.

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

Fixes #
2025-05-09 20:26:38 +00:00
Jonathan Cammisuli f5cc2d51b0 fix(core): simplify action dispatch, use mutex locking, and avoid unnecessary clones (#31157)
<!-- 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 many unwraps that we can avoid by using `parking_lot::mutex`
* There is an unnecessary `task::spawn` to dispatch actions. The channel
is non-blocking and this is wasted cycles
* There are a bunch of clones that are happening with the PtyInstances

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
* Uses `parking_lot::Mutex` and removes `unwraps()`
* Dispatches actions directly without going into tasks
* Uses tuple derefs to avoid clones, and uses 2 instead of 4

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

Fixes #
2025-05-09 15:40:07 -04:00
Mike Hartington 8082184dc7 docs(misc): fix blog posts for nx 21 (#31155)
<!-- 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-05-09 14:49:06 -04:00
Jason Jean 0a2553aa2c chore(core): add debug mode for tui (#31115)
<!-- 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 -->

Debugging the TUI is a chore

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

Debugging the TUI is a little better..

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

Fixes #
2025-05-09 11:57:32 -04:00
Stanislas Bernard cdba055744 fix(docs): typo in introduction.md (#31145)
<!-- 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's a typo.

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

Typo is fixed.

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

Fixes #
2025-05-09 10:39:29 -04:00
Philip Fulcher aef67bdc9f docs(nx-dev): add continuous tasks and terminal ui articles (#31092)
Co-authored-by: Juri <juri.strumpflohner@gmail.com>
2025-05-09 16:32:45 +02:00
Nicholas Cunningham 124eba7557 fix(core): Update React,Vue and Node generators applications for CNW (#31059)
<!-- 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 we create a React, Vue or Node app we add the app name
inside `package.json` under the nx
```
{
  "name": "@myworkspace/acme",
  "version": "0.0.1",
  "private": true,
  "nx": {
    "name": "acme"
  }
}

```

- When we create a publishable library using React/JS generator inside a
ts project references workspace the `--importPath` option.
## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
- Since the original intention is not known we should not automatically
add this to the project's `package.json`
- `importPath` option should not be required when using ts project
references.
## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->
For workspaces that are not using TS project references the result
remains unchanged.

Fixes #
2025-05-09 08:23:38 -04:00
Juri 00af9748ad docs(core): add Terminal UI video 2025-05-09 13:37:39 +02:00
Jason Jean 8c50b7f3af fix(core): only cleanup db connection on exit (#31137)
<!-- 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 -->

db connections are cleaned up on SIGTERM, SIGHUP, SIGINT, AND exit. On
SIGTERM, SIGHUP, and SIGINT, the process exits there.. which short
circuits other SIGTERM, SIGHUP, and SIGINT handlers.

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

db connections are only cleaned up when the process actually exits. It
does not exit the process here in response to any signals.

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

Fixes #
2025-05-08 22:35:01 +00:00
Emily Xiong f339a1ab40 fix(gradle): fix gradle tests (#30879)
<!-- 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, because it requires to sign locally, so i thought run command
like
`:project-graph:publishToMavenLocal -x
:project-graph:signNxProjectGraphPluginPluginMarkerMavenPublication -x
:project-graph:signPluginMavenPublication -x
:project-graph:publishNxProjectGraphPluginPluginMarkerMavenPublicationToMavenLocal
-x :project-graph:publishPluginMavenPublicationToMavenLocal` would
publish the plugin locally, but it actually does not. it does not throw
an error, but does not do anything at all.
so for e2e tests, it is actually pulling the latest published gradle
plugin from maven rather than test local code, hence the e2e errors.

also, currently project graph build for java version 21, we change it to
java 17 to be used by ocean repo.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
change the command to `./gradlew :project-graph:publishToMavenLocal
-PskipSign=true` and not apply signing when skip sign is true, so this
should be able to publish plugin to local repository.

work with java 17

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

Fixes #
2025-05-08 17:29:10 -04:00
Emily Xiong 468ec023c5 fix(gradle): specify idle timeout for gradle batch runner (#31009)
<!-- 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 is no idle timeout set for gradle, by default is 3 hours.
when running gradle in DTE, it seems to run into memory issue. Even
through using tooling api, the connection is closed when batch is done,
but i think the gradle daemon is still active in the background. when
running the next batch, it is going to start a new gradle daemon and i
got an error like
```
Starting a Gradle Daemon, 2 busy and 200 stopped Daemons could not be reused, use --status for details
```

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
add idle timeout for 10s.
this inline command will make gradle daemon to stop itself after 10s.


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

Fixes #
2025-05-08 17:26:16 -04:00
Jason Jean aea60e1a5e fix(core): handle process killing more robustly (#31131)
<!-- 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 -->

Cleanup is happening on SIGTERM, SIGINT, and SIGHUP signals and on
exit....

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

Cleanup is mostly done on exit.

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

Fixes #
2025-05-08 15:25:33 -04:00
Isaac Mann b6dc0d9e8e docs(core): render links in command descriptions (#30832)
Render links as links in command descriptions
- in the terminal, links are listed as text
- on the docs site, links are rendered as markdown links
2025-05-08 13:37:17 -04:00
4422 changed files with 260262 additions and 253282 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"
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"mcpServers": {
"nx-mcp": {
"url": "http://localhost:9470/mcp"
}
}
}
+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
*.gif,*.mp4,*.webp,*.avif,*.png,*.jpeg,*.jpg,*.tiff filter=lfs diff=lfs merge=lfs -text
+144 -13
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:
@@ -57,13 +59,26 @@ jobs:
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache Rust toolchain and cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
@@ -74,6 +89,14 @@ jobs:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Check Documentation
run: pnpm nx documentation
timeout-minutes: 20
@@ -143,10 +166,100 @@ 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
@@ -159,17 +272,35 @@ jobs:
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache Rust toolchain and cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- 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
with:
+93
View File
@@ -0,0 +1,93 @@
name: Claude Code
env:
PNPM_HOME: ~/.pnpm
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude:
if: |
contains(fromJson('["AgentEnder", "barbados-clemens", "Cammisuli", "Coly010", "FrozenPandaz", "isaacplmann", "JamesHenry", "jaysoo", "leosvelperez", "mandarini", "MaxKless", "meeroslav", "nartc", "ndcunningham", "philipjfulcher", "vsavkin", "xiongemi"]'), github.actor) &&
((github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))))
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
actions: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 250
- name: Install dependencies
run: |
sudo apt-get update
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: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10.11.1
run_install: false
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
.cargo-cache
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
pnpm playwright install --with-deps
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@beta
timeout-minutes: 90
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
allowed_tools: "Bash,Edit,Read,Write,Glob,Grep,LS,MultiEdit,NotebookRead,NotebookEdit"
+204 -180
View File
@@ -1,8 +1,8 @@
name: E2E matrix
on:
# schedule:
# - cron: "0 5 * * *"
schedule:
- cron: "0 5 * * *"
workflow_dispatch:
inputs:
debug_enabled:
@@ -19,12 +19,14 @@ jobs:
preinstall:
if: ${{ github.repository_owner == 'nrwl' }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
strategy:
matrix:
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
@@ -35,9 +37,9 @@ 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 }})
@@ -45,12 +47,13 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
fetch-depth: 0
filter: tree:0
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Set node
@@ -59,13 +62,17 @@ jobs:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Cache node_modules
id: cache-modules
- name: Get pnpm store directory
id: pnpm-cache
run: echo "path=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm store
uses: actions/cache@v4
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' }}
@@ -73,7 +80,6 @@ jobs:
run: brew install python-setuptools
- name: Install packages
if: steps.cache-modules.outputs.cache-hit != 'true'
run: pnpm install --frozen-lockfile
- name: Homebrew cache directory path
@@ -106,6 +112,7 @@ jobs:
prepare-matrix:
name: Prepare matrix combinations
if: ${{ github.repository_owner == 'nrwl' }}
timeout-minutes: 5
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.process-json.outputs.MATRIX }}
@@ -113,7 +120,8 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
fetch-depth: 0
filter: tree:0
- name: Process matrix data
id: process-json
@@ -128,6 +136,7 @@ jobs:
permissions:
contents: read
runs-on: ${{ matrix.os }}
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
@@ -137,7 +146,8 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
fetch-depth: 0
filter: tree:0
- name: Prepare dir for output
run: mkdir -p outputs
@@ -145,7 +155,7 @@ jobs:
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Use Node.js ${{ matrix.node_version }}
@@ -154,12 +164,22 @@ jobs:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Cache node_modules
id: cache-modules
uses: actions/cache@v4
- name: Install Rust
if: ${{ matrix.os != 'windows-latest' }}
run: |
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
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
- name: Install bun
if: ${{ matrix.os != 'windows-latest' }}
uses: oven-sh/setup-bun@v1
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ hashFiles('pnpm-lock.yaml') }}
bun-version: latest
- name: Install packages
run: pnpm install --frozen-lockfile
@@ -201,26 +221,116 @@ jobs:
if: steps.cache-cypress.outputs.cache-hit != 'true'
run: npx cypress install
- name: Install applesimutils, reset ios simulators
- name: Configure Detox Environment, Install applesimutils
if: ${{ matrix.os == 'macos-latest' }}
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
# 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
timeout-minutes: 10
continue-on-error: false
- name: Reset iOS Simulators
if: ${{ matrix.os == 'macos-latest' }}
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: ${{ 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"
- 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
- name: Run e2e tests
id: e2e-run
- name: Run e2e tests with pnpm (Linux/Windows)
id: e2e-run-pnpm
if: ${{ matrix.os != 'macos-latest' }}
run: pnpm nx run ${{ matrix.project }}:e2e-local
shell: bash
timeout-minutes: ${{ matrix.os_timeout }}
@@ -237,6 +347,33 @@ jobs:
SELECTED_PM: ${{ matrix.package_manager }}
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' && steps.reset-simulators.outcome == 'success' }}
run: |
# Run the tests
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'
NX_CI_EXECUTION_ENV: 'macos'
NX_E2E_VERBOSE_LOGGING: 'true'
NX_NATIVE_LOGGING: 'false'
NX_E2E_RUN_E2E: 'true'
NX_E2E_SKIP_CLEANUP: 'true'
NODE_OPTIONS: --max_old_space_size=8192
SELECTED_PM: 'npm'
npm_config_registry: http://localhost:4872
YARN_REGISTRY: http://localhost:4872
DEVELOPER_DIR: '/Applications/Xcode.app/Contents/Developer'
CI: true
- name: Save matrix config in file
if: ${{ always() }}
@@ -246,9 +383,13 @@ 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 }}"
matrix=$((
echo '${{ toJSON(matrix) }}'
) | jq --argjson delta $delta -c '. + { "status": "${{ steps.e2e-run.outcome}}", "duration": $delta }')
) | jq --argjson delta $delta -c '. + { "status": "'"$outcome"'", "duration": $delta }')
echo "$matrix" > 'outputs/matrix.json'
- name: Upload matrix config
@@ -268,15 +409,23 @@ jobs:
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@v4
with:
fetch-depth: 0
filter: tree:0
- name: Prepare dir for output
run: mkdir -p outputs
@@ -288,172 +437,45 @@ jobs:
- name: Join and stringify matrix configs
id: combine-json
run: |
combined=$((jq -s . outputs/*/matrix.json) | jq tostring)
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
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
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 }}
@@ -462,14 +484,15 @@ jobs:
if: ${{ always() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
needs: process-result
runs-on: ubuntu-latest
timeout-minutes: 10
name: Report duration per package manager
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
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 }}
@@ -477,13 +500,14 @@ jobs:
if: ${{ always() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
needs: process-result
runs-on: ubuntu-latest
name: Report duration per package manager
timeout-minutes: 10
name: Report duration per project
steps:
- name: Send notification
uses: ravsamhq/notify-slack-action@v2
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 }}
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
uses: pnpm/action-setup@v4
id: pnpm-install
with:
version: 9.8.0
version: 10.11.1
run_install: false
- name: Get pnpm store directory
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- uses: pnpm/action-setup@v4
with:
version: 9.8.0
version: 10.11.1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v3
+52 -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,62 @@ 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-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-angular', codeowners: 'S04SS457V38' },
{ name: 'e2e-expo', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-next', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-plugin', codeowners: 'S04SYHYKGNP' },
{ name: 'e2e-react', codeowners: 'S04TNCNJG5N' },
{ name: 'e2e-react-native', 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 +86,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);
}
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
- uses: pnpm/action-setup@v4
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
+103 -31
View File
@@ -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.
@@ -123,9 +123,13 @@ jobs:
settings:
- host: macos-13
target: x86_64-apple-darwin
setup: |-
rustup target add aarch64-apple-darwin
build: |
pnpm nx run-many --target=build-native -- --target=x86_64-apple-darwin
- host: windows-latest
setup: |-
rustup target add aarch64-pc-windows-msvc
build: pnpm nx run-many --target=build-native -- --target=x86_64-pc-windows-msvc
target: x86_64-pc-windows-msvc
# Windows 32bit (not needed)
@@ -136,23 +140,54 @@ 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 &&
build: |
set -e
apt-get update
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 &&
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
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: |-
rustup target add aarch64-apple-darwin
build: |
sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*;
export CC=$(xcrun -f clang);
@@ -163,17 +198,29 @@ 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 &&
build: |
set -e
apt-get update
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
setup: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf -y
rustup target add armv7-unknown-linux-gnueabihf
build: |
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=/usr/bin/arm-linux-gnueabihf-gcc pnpm nx run-many --target=build-native -- --target=armv7-unknown-linux-gnueabihf
# Android (not needed)
@@ -188,17 +235,36 @@ 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
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: |-
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
name: stable - ${{ matrix.settings.target }} - node@22.16.0
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
@@ -282,8 +348,8 @@ jobs:
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:
@@ -306,17 +372,18 @@ jobs:
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 npm install --location=global --ignore-scripts pnpm@10.11.1
curl https://sh.rustup.rs -sSf --output rustup.sh
sh rustup.sh -y --profile minimal --default-toolchain stable
source "$HOME/.cargo/env"
@@ -331,8 +398,11 @@ jobs:
whoami
env
freebsd-version
echo "Installing dependencies"
pnpm install --frozen-lockfile --ignore-scripts
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
@@ -344,7 +414,8 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: bindings-freebsd
path: packages/**/*.node
path: |
packages/nx/src/native/*.node
if-no-files-found: error
publish:
@@ -403,6 +474,7 @@ jobs:
VERSION: ${{ needs.resolve-required-data.outputs.version }}
DRY_RUN: ${{ needs.resolve-required-data.outputs.dry_run_flag }}
PUBLISH_BRANCH: ${{ needs.resolve-required-data.outputs.publish_branch }}
NX_VERBOSE_LOGGING: true
run: |
echo ""
# Create and check out the publish branch
+40 -1
View File
@@ -2,7 +2,6 @@ node_modules
/.idea
/.fleet
/.vscode
/.cursor
dist
/build
/coverage
@@ -36,6 +35,7 @@ CHANGELOG.md
.next
out
# Angular Cache
.angular
@@ -72,3 +72,42 @@ storybook-static
# Ignore Gradle project-specific cache directory
.gradle
.kotlin
.claude/settings.local.json
.cursor/rules/nx-rules.mdc
.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
# 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
vitest.config.*.timestamp*
+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": {}
}
}
}
+9
View File
@@ -9,6 +9,7 @@ assignment-rules:
- agent: linux-extra-large
parallelism: 1
# These projects should not need to be isolated.
- projects:
- nx-dev
targets:
@@ -16,6 +17,14 @@ 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
+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
+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:
+184
View File
@@ -0,0 +1,184 @@
When responding to queries about this repository:
1. Use the `nx_workspace` mcp tool for understanding the workspace architecture when appropriate
2. When working in projects, use the `nx_project` mcp tool to analyze and understand the specific project structure and
dependencies
3. Suggest relevant commands from the "Essential Commands" section when applicable
4. Highlight Nx's focus on monorepos and its key features like smart task execution, code generation, and project graph
analysis
5. Mention the plugin ecosystem and support for various frameworks when relevant
6. 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
+16 -7
View File
@@ -6,12 +6,13 @@
/tools/**/* @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
package.json @nrwl/nx-core-reviewers
pnpm-lock.yaml @nrwl/nx-core-reviewers
rust-toolchain @nrwl/nx-native-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
/images @nrwl/nx-docs-reviewers
/nx-dev/** @nrwl/nx-docs-reviewers
/typedoc-theme @nrwl/nx-docs-reviewers
@@ -137,6 +138,9 @@ rust-toolchain @nrwl/nx-native-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
@@ -145,8 +149,8 @@ rust-toolchain @nrwl/nx-native-reviewers
/packages/devkit/public-api.ts @FrozenPandaz @vsavkin
# Gradle
/packages/gradle/** @FrozenPandaz @MaxKless @xiongemi
/e2e/gradle/** @FrozenPandaz @MaxKless @xiongemi
/packages/gradle/** @FrozenPandaz @MaxKless
/e2e/gradle/** @FrozenPandaz @MaxKless
# Nx-Plugin
/docs/generated/packages/plugin/** @nrwl/nx-devkit-reviewers @nrwl/nx-docs-reviewers
@@ -174,10 +178,10 @@ rust-toolchain @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,6 +195,11 @@ rust-toolchain @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
+66 -3
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`).
@@ -333,6 +344,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 +386,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
+527 -73
View File
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -1,7 +1,7 @@
<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%">
<img alt="Nx - Smart Repos · Fast Builds" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
</picture>
</p>
@@ -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.
An AI-first build platform that connects everything from your editor to CI. Helping you deliver fast, without breaking things.
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
@@ -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?
@@ -82,17 +82,17 @@ help you get started.
| ![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) |
| 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 | Emily Xiong |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| ![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) | ![Emily Xiong](https://avatars.githubusercontent.com/u/16211801?s=160) |
| [philipjfulcher](https://github.com/philipjfulcher) | [barbados-clemens](https://github.com/barbados-clemens) | [Coly010](https://github.com/Coly010) | [xiongemi](https://github.com/xiongemi) |
| 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 | Nicholas Cunningham | Max Kless |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| ![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) |
| [nartc](https://github.com/nartc) | [ndcunningham](https://github.com/ndcunningham) | [MaxKless](https://github.com/MaxKless) |
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ReactStore</title>
<title>NxGraphDiff</title>
<base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
+11
View File
@@ -0,0 +1,11 @@
{
"name": "@nx/nx-graph-diff",
"version": "0.0.1",
"private": true,
"dependencies": {
"@monaco-editor/react": "^4.7.0",
"deep-equal": "^2.2.3",
"diff": "^8.0.2",
"monaco-editor": "^0.52.2"
}
}
+97
View File
@@ -0,0 +1,97 @@
.app {
min-height: 100vh;
background-color: #f5f5f5;
}
header {
background-color: #002147;
color: white;
padding: 1.5rem 2rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
header h1 {
margin: 0;
font-size: 2rem;
}
header p {
margin: 0.5rem 0 0 0;
opacity: 0.9;
}
header .warning {
background-color: rgba(255, 193, 7, 0.2);
color: #856404;
padding: 0.5rem;
border-radius: 4px;
margin-top: 1rem;
font-size: 0.9rem;
}
.main-content {
display: flex;
gap: 2rem;
padding: 2rem;
height: calc(100vh - 120px);
}
.editor-section {
flex: 1;
background: white;
border-radius: 8px;
padding: 1.5rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
}
.editor-section h2 {
margin-top: 0;
color: #333;
}
.graph-section {
flex: 1;
background: white;
border-radius: 8px;
padding: 1.5rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
overflow: hidden;
}
.graph-controls {
margin-bottom: 1rem;
display: flex;
gap: 1rem;
}
.graph-controls button {
background-color: #002147;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s;
}
.graph-controls button:hover {
background-color: #003366;
}
.graph-controls button:disabled {
background-color: #ccc;
cursor: not-allowed;
}
.restore-button {
background-color: #6c757d !important;
}
.restore-button:hover:not(:disabled) {
background-color: #5a6268 !important;
}
+137
View File
@@ -0,0 +1,137 @@
import { useState, useEffect } from 'react';
import ProjectGraph from './components/ProjectGraph';
import NxJsonEditor from './components/NxJsonEditor';
import DiffViewer from './components/DiffViewer';
import './app.module.css';
export function App() {
const [originalGraph, setOriginalGraph] = useState<any>(null);
const [currentGraph, setCurrentGraph] = useState<any>(null);
const [nxJson, setNxJson] = useState<any>(null);
const [showDiff, setShowDiff] = useState(false);
useEffect(() => {
// Load the current project graph
fetch('/.nx/workspace-data/project-graph.json')
.then((res) => res.json())
.then((data) => {
setOriginalGraph(data);
setCurrentGraph(data);
})
.catch((err) => console.error('Failed to load project graph:', err));
// Load nx.json
fetch('/nx.json')
.then((res) => res.json())
.then((data) => setNxJson(data))
.catch((err) => console.error('Failed to load nx.json:', err));
}, []);
const handleNxJsonUpdate = async (updatedNxJson: any) => {
try {
const response = await fetch('/api/update-nx-json', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ nxJson: updatedNxJson }),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
if (result.success) {
setCurrentGraph(result.graph);
setNxJson(updatedNxJson);
setShowDiff(true);
} else {
console.error('Failed to update graph:', result.error);
alert('Failed to update graph: ' + result.error);
}
} catch (error) {
console.error('Error updating nx.json:', error);
alert('Error updating nx.json: ' + (error as Error).message);
}
};
const handleRestoreOriginal = async () => {
try {
const response = await fetch('/api/restore-nx-json', {
method: 'POST',
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
if (result.success) {
// Reload the original data
window.location.reload();
} else {
console.error('Failed to restore original:', result.error);
alert('Failed to restore original: ' + result.error);
}
} catch (error) {
console.error('Error restoring original:', error);
alert('Error restoring original: ' + (error as Error).message);
}
};
return (
<div className="app">
<header>
<h1>Nx Graph Diff Viewer</h1>
<p>Visualize how changes to nx.json affect your project graph</p>
<p className="warning">
This tool modifies your actual nx.json file and regenerates the
project graph. Use with caution!
</p>
</header>
<div className="main-content">
<div className="editor-section">
<h2>nx.json Editor</h2>
{nxJson && (
<NxJsonEditor nxJson={nxJson} onUpdate={handleNxJsonUpdate} />
)}
</div>
<div className="graph-section">
<div className="graph-controls">
<button
onClick={() => setShowDiff(!showDiff)}
disabled={!currentGraph || currentGraph === originalGraph}
>
{showDiff ? 'Hide Diff' : 'Show Diff'}
</button>
<button
onClick={handleRestoreOriginal}
className="restore-button"
disabled={currentGraph === originalGraph}
>
Restore Original
</button>
</div>
{originalGraph &&
currentGraph &&
(showDiff ? (
<DiffViewer
originalGraph={originalGraph}
currentGraph={currentGraph}
/>
) : (
<ProjectGraph graph={currentGraph} />
))}
</div>
</div>
</div>
);
}
export default App;
@@ -0,0 +1,177 @@
.diff-viewer {
height: 100%;
overflow-y: auto;
}
.diff-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.diff-header h3 {
margin: 0;
color: #333;
}
.toggle-detailed {
background-color: #6c757d;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s;
}
.toggle-detailed:hover {
background-color: #5a6268;
}
.no-changes {
color: #666;
font-style: italic;
text-align: center;
padding: 2rem;
}
.changes-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.project-changes {
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 1rem;
background: #fafafa;
}
.project-changes h4 {
margin: 0 0 0.75rem 0;
color: #002147;
font-size: 1.1rem;
}
.change-items {
list-style: none;
margin: 0;
padding: 0;
}
.change-item {
padding: 0.5rem;
margin: 0.25rem 0;
border-radius: 4px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 14px;
display: flex;
align-items: center;
gap: 0.5rem;
}
.change-item.added {
background-color: #d4edda;
border-left: 4px solid #28a745;
}
.change-item.removed {
background-color: #f8d7da;
border-left: 4px solid #dc3545;
}
.change-item.modified {
background-color: #fff3cd;
border-left: 4px solid #ffc107;
}
.change-type {
font-weight: bold;
width: 20px;
}
.change-item.added .change-type {
color: #28a745;
}
.change-item.removed .change-type {
color: #dc3545;
}
.change-item.modified .change-type {
color: #856404;
}
.change-details {
flex: 1;
color: #333;
}
.change-item.detailed {
flex-direction: column;
align-items: flex-start;
}
.change-summary {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
}
.change-diff {
margin-top: 1rem;
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
}
.diff-section h6 {
margin: 0 0 0.5rem 0;
font-size: 0.85rem;
color: #666;
font-weight: 600;
}
.value-display {
background-color: #f8f9fa;
padding: 0.75rem;
border-radius: 4px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 0.8rem;
overflow-x: auto;
white-space: pre-wrap;
border: 1px solid #dee2e6;
}
.value-display.original {
border-left: 4px solid #dc3545;
background-color: #f8d7da;
}
.value-display.current {
border-left: 4px solid #28a745;
background-color: #d4edda;
}
.array-value {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.array-item {
background-color: rgba(255, 255, 255, 0.8);
padding: 0.25rem 0.5rem;
border-radius: 3px;
border: 1px solid #dee2e6;
}
.value-display em {
color: #6c757d;
font-style: italic;
}
@@ -0,0 +1,261 @@
import React, { useMemo, useState } from 'react';
import deepEqual from 'deep-equal';
import './DiffViewer.css';
interface DiffViewerProps {
originalGraph: any;
currentGraph: any;
}
interface Change {
type: 'added' | 'removed' | 'modified';
projectName: string;
targetName?: string;
details: string;
originalValue?: any;
currentValue?: any;
property?: string;
}
const DiffViewer: React.FC<DiffViewerProps> = ({
originalGraph,
currentGraph,
}) => {
const [showDetailedDiff, setShowDetailedDiff] = useState(true);
const changes = useMemo(() => {
const changesList: Change[] = [];
// Compare projects
const originalProjects =
originalGraph?.graph?.nodes || originalGraph?.nodes || {};
const currentProjects =
currentGraph?.graph?.nodes || currentGraph?.nodes || {};
// Check for removed projects
Object.keys(originalProjects).forEach((projectName) => {
if (!currentProjects[projectName]) {
changesList.push({
type: 'removed',
projectName,
details: 'Project removed',
});
}
});
// Check for added projects and modified projects
Object.keys(currentProjects).forEach((projectName) => {
if (!originalProjects[projectName]) {
changesList.push({
type: 'added',
projectName,
details: 'Project added',
});
} else {
// Check for modified targets
const originalTargets =
originalProjects[projectName].data.targets || {};
const currentTargets = currentProjects[projectName].data.targets || {};
// Check for removed targets
Object.keys(originalTargets).forEach((targetName) => {
if (!currentTargets[targetName]) {
changesList.push({
type: 'removed',
projectName,
targetName,
details: `Target "${targetName}" removed`,
});
}
});
// Check for added or modified targets
Object.keys(currentTargets).forEach((targetName) => {
if (!originalTargets[targetName]) {
changesList.push({
type: 'added',
projectName,
targetName,
details: `Target "${targetName}" added`,
});
} else if (
!deepEqual(originalTargets[targetName], currentTargets[targetName])
) {
const changes = [];
// Check specific changes and create detailed change entries
const propertiesToCheck = [
{ key: 'dependsOn', label: 'dependencies' },
{ key: 'inputs', label: 'inputs' },
{ key: 'outputs', label: 'outputs' },
{ key: 'cache', label: 'cache settings' },
{ key: 'options', label: 'options' },
{ key: 'executor', label: 'executor' },
];
const changedProperties: string[] = [];
propertiesToCheck.forEach(({ key, label }) => {
const originalValue = originalTargets[targetName][key];
const currentValue = currentTargets[targetName][key];
if (!deepEqual(originalValue, currentValue)) {
changedProperties.push(label);
// Create detailed change entry
changesList.push({
type: 'modified',
projectName,
targetName,
property: key,
details: `Target "${targetName}" ${label} changed`,
originalValue,
currentValue,
});
}
});
// Create summary entry if there are changes
if (changedProperties.length > 0) {
changesList.push({
type: 'modified',
projectName,
targetName,
details: `Target "${targetName}" modified: ${changedProperties.join(
', '
)}`,
});
}
}
});
}
});
return changesList;
}, [originalGraph, currentGraph]);
const groupedChanges = useMemo(() => {
const grouped: { [key: string]: Change[] } = {};
changes.forEach((change) => {
if (!grouped[change.projectName]) {
grouped[change.projectName] = [];
}
grouped[change.projectName].push(change);
});
return grouped;
}, [changes]);
// Filter changes based on detailed view setting
const displayChanges = useMemo(() => {
if (showDetailedDiff) {
return changes.filter((change) => change.property); // Only detailed changes
} else {
return changes.filter((change) => !change.property); // Only summary changes
}
}, [changes, showDetailedDiff]);
const groupedDisplayChanges = useMemo(() => {
const grouped: { [key: string]: Change[] } = {};
displayChanges.forEach((change) => {
if (!grouped[change.projectName]) {
grouped[change.projectName] = [];
}
grouped[change.projectName].push(change);
});
return grouped;
}, [displayChanges]);
const renderValue = (value: any) => {
if (Array.isArray(value)) {
return (
<div className="array-value">
{value.map((item, index) => (
<div key={index} className="array-item">
{typeof item === 'string' ? item : JSON.stringify(item, null, 2)}
</div>
))}
</div>
);
}
return typeof value === 'object'
? JSON.stringify(value, null, 2)
: String(value);
};
return (
<div className="diff-viewer">
<div className="diff-header">
<h3>Changes ({changes.filter((c) => !c.property).length})</h3>
<button
className="toggle-detailed"
onClick={() => setShowDetailedDiff(!showDetailedDiff)}
>
{showDetailedDiff ? 'Show Summary' : 'Show Detailed'}
</button>
</div>
{changes.length === 0 ? (
<p className="no-changes">No changes detected</p>
) : (
<div className="changes-list">
{Object.entries(groupedDisplayChanges).map(
([projectName, projectChanges]) => (
<div key={projectName} className="project-changes">
<h4>{projectName}</h4>
<ul className="change-items">
{projectChanges.map((change, index) => (
<li
key={index}
className={`change-item ${change.type} ${
showDetailedDiff ? 'detailed' : ''
}`}
>
<div className="change-summary">
<span className="change-type">
{change.type === 'added' && '+ '}
{change.type === 'removed' && '- '}
{change.type === 'modified' && '~ '}
</span>
<span className="change-details">{change.details}</span>
</div>
{showDetailedDiff && change.property && (
<div className="change-diff">
<div className="diff-section">
<h6>Before:</h6>
<div className="value-display original">
{change.originalValue ? (
renderValue(change.originalValue)
) : (
<em>undefined</em>
)}
</div>
</div>
<div className="diff-section">
<h6>After:</h6>
<div className="value-display current">
{change.currentValue ? (
renderValue(change.currentValue)
) : (
<em>undefined</em>
)}
</div>
</div>
</div>
)}
</li>
))}
</ul>
</div>
)
)}
</div>
)}
</div>
);
};
export default DiffViewer;
@@ -0,0 +1,64 @@
.nx-json-editor {
display: flex;
flex-direction: column;
height: 100%;
}
.editor-controls {
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 1rem;
}
.apply-button {
background-color: #28a745;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
font-weight: 500;
transition: background-color 0.2s;
}
.apply-button:hover {
background-color: #218838;
}
.error-message {
color: #dc3545;
font-size: 14px;
}
.updating-message {
color: #007bff;
font-size: 14px;
font-style: italic;
}
.editor-hints {
margin-top: 1rem;
padding: 1rem;
background-color: #f8f9fa;
border-radius: 4px;
border: 1px solid #e9ecef;
}
.editor-hints h4 {
margin: 0 0 0.5rem 0;
color: #495057;
font-size: 14px;
}
.editor-hints ul {
margin: 0;
padding-left: 1.5rem;
}
.editor-hints li {
margin: 0.25rem 0;
font-size: 13px;
color: #6c757d;
}
@@ -0,0 +1,85 @@
import React, { useState, useCallback } from 'react';
import Editor from '@monaco-editor/react';
import './NxJsonEditor.css';
interface NxJsonEditorProps {
nxJson: any;
onUpdate: (updatedNxJson: any) => void;
}
const NxJsonEditor: React.FC<NxJsonEditorProps> = ({ nxJson, onUpdate }) => {
const [editorValue, setEditorValue] = useState(
JSON.stringify(nxJson, null, 2)
);
const [error, setError] = useState<string | null>(null);
const [isUpdating, setIsUpdating] = useState(false);
const handleEditorChange = useCallback((value: string | undefined) => {
if (value) {
setEditorValue(value);
setError(null);
}
}, []);
const handleApplyChanges = useCallback(async () => {
try {
setIsUpdating(true);
setError(null);
const parsed = JSON.parse(editorValue);
await onUpdate(parsed);
} catch (e) {
setError('Invalid JSON: ' + (e as Error).message);
} finally {
setIsUpdating(false);
}
}, [editorValue, onUpdate]);
return (
<div className="nx-json-editor">
<div className="editor-controls">
<button
onClick={handleApplyChanges}
className="apply-button"
disabled={isUpdating}
>
{isUpdating ? 'Updating Graph...' : 'Apply Changes'}
</button>
{error && <span className="error-message">{error}</span>}
{isUpdating && (
<span className="updating-message">
Regenerating project graph...
</span>
)}
</div>
<Editor
height="600px"
defaultLanguage="json"
value={editorValue}
onChange={handleEditorChange}
theme="vs-dark"
options={{
minimap: { enabled: false },
fontSize: 14,
formatOnPaste: true,
formatOnType: true,
automaticLayout: true,
}}
/>
<div className="editor-hints">
<h4>Quick Examples:</h4>
<ul>
<li>Add a new target default: Add an entry to "targetDefaults"</li>
<li>
Modify build dependencies: Update "targetDefaults.build.dependsOn"
</li>
<li>Change cache settings: Update "targetDefaults.[target].cache"</li>
<li>Add inputs: Modify "targetDefaults.[target].inputs"</li>
</ul>
</div>
</div>
);
};
export default NxJsonEditor;
@@ -0,0 +1,149 @@
.project-graph {
height: 100%;
overflow-y: auto;
}
.project-graph h3 {
margin-top: 0;
color: #333;
}
.projects-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(500px, 1fr));
gap: 1rem;
}
.project-card {
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 1rem;
background: #fafafa;
transition: box-shadow 0.2s;
}
.project-card:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.project-card h4 {
margin: 0 0 0.5rem 0;
color: #002147;
font-size: 1.1rem;
}
.project-info {
margin-bottom: 1rem;
}
.project-info p {
margin: 0.25rem 0;
font-size: 0.9rem;
color: #666;
}
.project-info strong {
color: #333;
}
.targets {
margin-top: 0.5rem;
}
.targets h5 {
margin: 0 0 0.5rem 0;
font-size: 1rem;
color: #444;
}
.targets ul {
margin: 0;
padding-left: 1.5rem;
}
.target-item {
margin: 0.5rem 0;
padding: 0.75rem;
border: 1px solid #e9ecef;
border-radius: 4px;
background-color: #fff;
}
.target-header {
display: flex;
align-items: center;
margin-bottom: 0.5rem;
font-size: 0.9rem;
}
.target-header strong {
color: #495057;
}
.executor {
color: #666;
font-size: 0.85rem;
}
.target-details {
margin-left: 0.5rem;
}
.target-property {
margin: 0.4rem 0;
font-size: 0.85rem;
}
.property-label {
color: #6c757d;
font-weight: 500;
margin-right: 0.5rem;
display: inline-block;
min-width: 80px;
}
.property-value {
color: #495057;
}
.property-list {
margin-top: 0.25rem;
margin-left: 80px;
}
.input-item,
.output-item {
background-color: #f8f9fa;
padding: 0.25rem 0.5rem;
margin: 0.2rem 0;
border-radius: 3px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 0.8rem;
border-left: 3px solid #dee2e6;
word-break: break-all;
}
.input-item {
border-left-color: #007bff;
}
.output-item {
border-left-color: #28a745;
}
.cache-value {
font-weight: 500;
padding: 0.2rem 0.5rem;
border-radius: 3px;
font-size: 0.8rem;
}
.cache-value.enabled {
background-color: #d4edda;
color: #155724;
}
.cache-value.disabled {
background-color: #f8d7da;
color: #721c24;
}
@@ -0,0 +1,121 @@
import React from 'react';
import './ProjectGraph.css';
interface ProjectGraphProps {
graph: any;
}
const ProjectGraph: React.FC<ProjectGraphProps> = ({ graph }) => {
const projects = Object.entries(graph?.graph?.nodes || graph?.nodes || {});
return (
<div className="project-graph">
<h3>Projects ({projects.length})</h3>
<div className="projects-list">
{projects.map(([name, project]: [string, any]) => (
<div key={name} className="project-card">
<h4>{name}</h4>
<div className="project-info">
<p>
<strong>Type:</strong> {project.type}
</p>
<p>
<strong>Root:</strong> {project.data.root}
</p>
{project.data.tags && project.data.tags.length > 0 && (
<p>
<strong>Tags:</strong> {project.data.tags.join(', ')}
</p>
)}
</div>
{project.data.targets &&
Object.keys(project.data.targets).length > 0 && (
<div className="targets">
<h5>Targets:</h5>
<ul>
{Object.entries(project.data.targets).map(
([targetName, target]: [string, any]) => (
<li key={targetName} className="target-item">
<div className="target-header">
<strong>{targetName}</strong>
{target.executor && (
<span className="executor">
{' '}
({target.executor})
</span>
)}
</div>
<div className="target-details">
{target.dependsOn &&
target.dependsOn.length > 0 && (
<div className="target-property">
<span className="property-label">
Depends on:
</span>
<span className="property-value">
{target.dependsOn.join(', ')}
</span>
</div>
)}
{target.inputs && target.inputs.length > 0 && (
<div className="target-property">
<span className="property-label">Inputs:</span>
<div className="property-list">
{target.inputs.map(
(input: any, index: number) => (
<div key={index} className="input-item">
{typeof input === 'string'
? input
: JSON.stringify(input, null, 2)}
</div>
)
)}
</div>
</div>
)}
{target.outputs && target.outputs.length > 0 && (
<div className="target-property">
<span className="property-label">Outputs:</span>
<div className="property-list">
{target.outputs.map(
(output: string, index: number) => (
<div key={index} className="output-item">
{output}
</div>
)
)}
</div>
</div>
)}
{target.cache !== undefined && (
<div className="target-property">
<span className="property-label">Cache:</span>
<span
className={`cache-value ${
target.cache ? 'enabled' : 'disabled'
}`}
>
{target.cache ? 'enabled' : 'disabled'}
</span>
</div>
)}
</div>
</li>
)
)}
</ul>
</div>
)}
</div>
))}
</div>
</div>
);
};
export default ProjectGraph;
+51
View File
@@ -0,0 +1,51 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
padding: 0;
}
button {
font-family: inherit;
}
/* Scrollbar styles */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: #888;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
@@ -11,7 +11,9 @@
"@nx/react/typings/image.d.ts",
"vite/client"
],
"rootDir": "src"
"rootDir": "src",
"module": "esnext",
"moduleResolution": "bundler"
},
"exclude": [
"out-tsc",
@@ -23,14 +25,7 @@
"src/**/*.spec.js",
"src/**/*.test.js",
"src/**/*.spec.jsx",
"src/**/*.test.jsx",
"vite.config.ts",
"vite.config.mts",
"vitest.config.ts",
"vitest.config.mts",
"eslint.config.js",
"eslint.config.cjs",
"eslint.config.mjs"
"src/**/*.test.jsx"
],
"include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
}
@@ -4,9 +4,6 @@
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.spec.json"
}
],
"extends": "../../tsconfig.base.json"
+244
View File
@@ -0,0 +1,244 @@
/// <reference types='vitest' />
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { readFileSync, writeFileSync } from 'fs';
import { join } from 'path';
import { exec } from 'child_process';
import { promisify } from 'util';
const execAsync = promisify(exec);
export default defineConfig(() => ({
root: __dirname,
cacheDir: '../../node_modules/.vite/apps/nx-graph-diff',
server: {
port: 4200,
host: 'localhost',
middlewareMode: false,
},
plugins: [
react(),
{
name: 'nx-json-middleware',
configureServer(server) {
server.middlewares.use('/nx.json', (req, res, next) => {
if (req.method === 'GET') {
const nxJsonPath = join(__dirname, '../../nx.json');
try {
// Clear the require cache to ensure fresh content
delete require.cache[nxJsonPath];
// Read fresh content from disk
const content = readFileSync(nxJsonPath, 'utf-8');
// Set headers to prevent caching
res.setHeader('Content-Type', 'application/json');
res.setHeader(
'Cache-Control',
'no-cache, no-store, must-revalidate'
);
res.setHeader('Pragma', 'no-cache');
res.setHeader('Expires', '0');
console.log('Serving fresh nx.json, length:', content.length);
res.end(content);
} catch (err) {
console.error('Error reading nx.json:', err);
res.statusCode = 404;
res.end(JSON.stringify({ error: 'nx.json not found' }));
}
} else {
next();
}
});
server.middlewares.use(
'/.nx/workspace-data/project-graph.json',
(req, res, next) => {
if (req.method === 'GET') {
const graphPath = join(
__dirname,
'../../.nx/workspace-data/project-graph.json'
);
try {
// Read fresh content from disk
const content = readFileSync(graphPath, 'utf-8');
// Set headers to prevent caching
res.setHeader('Content-Type', 'application/json');
res.setHeader(
'Cache-Control',
'no-cache, no-store, must-revalidate'
);
res.setHeader('Pragma', 'no-cache');
res.setHeader('Expires', '0');
console.log(
'Serving fresh project-graph.json, length:',
content.length
);
res.end(content);
} catch (err) {
console.error('Error reading project-graph.json:', err);
res.statusCode = 404;
res.end(
JSON.stringify({ error: 'project-graph.json not found' })
);
}
} else {
next();
}
}
);
server.middlewares.use(
'/api/update-nx-json',
async (req, res, next) => {
if (req.method === 'POST') {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString();
});
req.on('end', async () => {
try {
const { nxJson } = JSON.parse(body);
// Save the original nx.json as backup
const nxJsonPath = join(__dirname, '../../nx.json');
const backupPath = join(__dirname, '../../nx.json.backup');
const originalContent = readFileSync(nxJsonPath, 'utf-8');
writeFileSync(backupPath, originalContent);
// Write the new nx.json
writeFileSync(nxJsonPath, JSON.stringify(nxJson, null, 2));
// Regenerate project graph
console.log('Regenerating project graph...');
const { stdout, stderr } = await execAsync(
'pnpm nx graph --file=.nx/workspace-data/project-graph.json',
{
cwd: join(__dirname, '../..'),
}
);
console.log('Graph generation stdout:', stdout);
if (stderr) {
console.log('Graph generation stderr:', stderr);
}
// Wait a moment for file system to settle
await new Promise((resolve) => setTimeout(resolve, 1000));
// Read the new project graph
const graphPath = join(
__dirname,
'../../.nx/workspace-data/project-graph.json'
);
console.log('Reading graph from:', graphPath);
if (!require('fs').existsSync(graphPath)) {
throw new Error(
`Project graph file does not exist at ${graphPath}`
);
}
const graphContent = readFileSync(graphPath, 'utf-8');
console.log('Graph content length:', graphContent.length);
const newGraph = JSON.parse(graphContent);
console.log(
'New graph nodes count:',
Object.keys(newGraph.nodes || {}).length
);
res.setHeader('Content-Type', 'application/json');
res.end(
JSON.stringify({
success: true,
graph: newGraph,
})
);
} catch (err) {
console.error('Error updating nx.json:', err);
res.statusCode = 500;
res.end(
JSON.stringify({
error: 'Failed to update nx.json and regenerate graph',
details: err.message,
})
);
}
});
} else {
res.statusCode = 405;
res.end(JSON.stringify({ error: 'Method not allowed' }));
}
}
);
server.middlewares.use(
'/api/restore-nx-json',
async (req, res, next) => {
if (req.method === 'POST') {
try {
const nxJsonPath = join(__dirname, '../../nx.json');
const backupPath = join(__dirname, '../../nx.json.backup');
// Restore original nx.json
const originalContent = readFileSync(backupPath, 'utf-8');
writeFileSync(nxJsonPath, originalContent);
// Regenerate project graph
console.log('Restoring project graph...');
const { stdout, stderr } = await execAsync(
'pnpm nx graph --file=.nx/workspace-data/project-graph.json',
{
cwd: join(__dirname, '../..'),
}
);
console.log('Restore stdout:', stdout);
if (stderr) {
console.log('Restore stderr:', stderr);
}
// Wait a moment for file system to settle
await new Promise((resolve) => setTimeout(resolve, 1000));
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ success: true }));
} catch (err) {
console.error('Error restoring nx.json:', err);
res.statusCode = 500;
res.end(
JSON.stringify({
error: 'Failed to restore nx.json',
details: err.message,
})
);
}
} else {
res.statusCode = 405;
res.end(JSON.stringify({ error: 'Method not allowed' }));
}
}
);
},
},
],
preview: {
port: 4200,
host: 'localhost',
},
// Uncomment this if you are using workers.
// worker: {
// plugins: [ nxViteTsPaths() ],
// },
build: {
outDir: './dist',
emptyOutDir: true,
reportCompressedSize: true,
commonjsOptions: {
transformMixedEsModules: true,
},
},
}));
+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
+54
View File
@@ -0,0 +1,54 @@
# Starlight Starter Kit: Basics
[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build)
```
pnpm create astro@latest -- --template starlight
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics)
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/withastro/starlight&create_from_path=examples/basics)
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwithastro%2Fstarlight%2Ftree%2Fmain%2Fexamples%2Fbasics&project-name=my-starlight-docs&repository-name=my-starlight-docs)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
Inside of your Astro + Starlight project, you'll see the following folders and files:
```
.
├── public/
├── src/
│ ├── assets/
│ ├── content/
│ │ ├── docs/
│ └── content.config.ts
├── astro.config.mjs
├── package.json
└── tsconfig.json
```
Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name.
Images can be added to `src/assets/` and embedded in Markdown with a relative link.
Static assets, like favicons, can be placed in the `public/` directory.
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :--------------------- | :----------------------------------------------- |
| `pnpm install` | Installs dependencies |
| `pnpm dev` | Starts local dev server at `localhost:4321` |
| `pnpm build` | Build your production site to `./dist/` |
| `pnpm preview` | Preview your build locally, before deploying |
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
| `pnpm astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Check out [Starlights docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
+99
View File
@@ -0,0 +1,99 @@
// @ts-check
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import { sectionSidebarPlugin } from './src/plugins/section-sidebar.plugin';
import netlify from '@astrojs/netlify';
import linkValidator from 'starlight-links-validator';
import react from '@astrojs/react';
import markdoc from '@astrojs/markdoc';
import tailwindcss from '@tailwindcss/vite';
// https://astro.build/config
export default defineConfig({
vite: { plugins: [tailwindcss()] },
site: 'https://docs.nx.dev',
adapter: netlify(),
integrations: [
markdoc(),
starlight({
title: 'Nx',
tagline:
'An AI-first build platform that connects everything from your editor to CI. Helping you deliver fast, without breaking things.',
customCss: ['./src/styles/global.css'],
favicon: '/favicon.svg',
logo: {
src: './src/assets/nx/Nx-light.png',
replacesTitle: true,
},
plugins: [
// linkValidator(),
sectionSidebarPlugin(),
],
routeMiddleware: ['./src/plugins/banner.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: [
{
label: 'Getting Started',
autogenerate: { directory: 'getting-started' },
},
{
label: 'Guides',
autogenerate: { directory: 'guides' },
},
{
label: 'Concepts',
autogenerate: { directory: 'concepts' },
},
{
label: 'References',
collapsed: true,
items: [
// have to use link bc slug is mapped to the /docs/ folder but we need the astro component in the pages/ dir
{ label: 'Nx CLI', link: 'api/nx-cli' },
{ label: 'Nx Cloud CLI', slug: 'api/nx-cloud-cli' },
{ label: 'create-nx-workspace', link: 'api/create-nx-workspace' },
{
label: 'devkit',
collapsed: true,
items: [
{ label: 'Overview', link: 'api/plugins/devkit/' },
{
label: 'Ng CLI Adapter',
link: 'api/plugins/devkit/ngcli_adapter',
},
],
},
// plugins are autogenerated from the Nx repository via the sidebar plugin
],
},
],
}),
react(),
],
});
+29
View File
@@ -0,0 +1,29 @@
import { defineMarkdocConfig, component } from '@astrojs/markdoc/config';
import starlightMarkdoc from '@astrojs/starlight-markdoc';
export default defineMarkdocConfig({
extends: [starlightMarkdoc()],
tags: {
youtube: {
render: component('./src/components/Youtube.astro'),
attributes: {
src: {
type: 'String',
required: true,
},
title: {
type: 'String',
required: true,
},
width: {
type: 'String',
default: '100%',
},
caption: {
type: 'String',
required: false,
},
},
},
},
});
+19
View File
@@ -0,0 +1,19 @@
{
"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-ui-icons": "workspace:*",
"@nx/nx-dev-ui-markdoc": "workspace:*",
"@tailwindcss/vite": "^4.1.11",
"astro": "^5.10.1",
"tailwindcss": "4.1.11"
}
}
+37
View File
@@ -0,0 +1,37 @@
{
"name": "astro-docs",
"targets": {
"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",
"serve": {
"continuous": true,
"dependsOn": [
{
"projects": ["devkit", "create-nx-workspace"],
"target": "build"
}
],
"command": "astro dev",
"options": {
"cwd": "astro-docs"
}
},
"build": {
"dependsOn": [
{
"projects": ["devkit", "create-nx-workspace"],
"target": "build"
}
],
"command": "astro build",
"options": {
"cwd": "astro-docs"
}
},
"astro": {
"command": "astro",
"options": {
"cwd": "astro-docs"
}
}
}
}
+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.
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

+4
View File
@@ -0,0 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://<YOUR SITE>/sitemap-index.xml
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,3 @@
<svg width="508" height="508" viewBox="0 0 508 508" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M404 179V141.5C404 120.8 387.2 104 366.5 104H141.5C120.8 104 104 120.8 104 141.5V366.5C104 387.2 120.8 404 141.5 404H179M404 179C362.6 179 329 212.6 329 254C329 295.4 295.4 329 254 329C212.6 329 179 362.6 179 404M404 179V365.364C404 386.691 386.691 404 365.364 404L179 404" stroke="#0A1A2D" stroke-width="36"/>
</svg>

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

@@ -0,0 +1,3 @@
<svg width="508" height="508" viewBox="0 0 508 508" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M404 179V141.5C404 120.8 387.2 104 366.5 104H141.5C120.8 104 104 120.8 104 141.5V366.5C104 387.2 120.8 404 141.5 404H179M404 179C362.6 179 329 212.6 329 254C329 295.4 295.4 329 254 329C212.6 329 179 362.6 179 404M404 179V365.364C404 386.691 386.691 404 365.364 404L179 404" stroke="white" stroke-width="36"/>
</svg>

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@@ -0,0 +1,17 @@
<svg width="172" height="39" viewBox="0 0 172 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_301_3)">
<path d="M69.6733 9.27841V29.642H66.8494L56.4985 14.7074H56.3096V29.642H53.2372V9.27841H56.0809L66.4417 24.233H66.6306V9.27841H69.6733Z" fill="#0F172A"/>
<path d="M76.2631 14.3693L79.6338 20.3153L83.0344 14.3693H86.2858L81.523 22.0057L86.3256 29.642H83.0742L79.6338 23.9347L76.2034 29.642H72.9421L77.6949 22.0057L73.0017 14.3693H76.2631Z" fill="#0F172A"/>
<path d="M113.901 15.9006H110.798C110.679 15.2377 110.457 14.6544 110.132 14.1506C109.807 13.6468 109.41 13.2192 108.939 12.8679C108.468 12.5166 107.941 12.2514 107.358 12.0724C106.781 11.8935 106.168 11.804 105.518 11.804C104.345 11.804 103.294 12.099 102.366 12.6889C101.445 13.2789 100.716 14.1439 100.179 15.2841C99.6486 16.4242 99.3835 17.8163 99.3835 19.4602C99.3835 21.1174 99.6486 22.5161 100.179 23.6562C100.716 24.7964 101.448 25.6581 102.376 26.2415C103.304 26.8248 104.348 27.1165 105.508 27.1165C106.151 27.1165 106.761 27.0303 107.338 26.858C107.921 26.679 108.448 26.4171 108.919 26.0724C109.39 25.7277 109.787 25.3068 110.112 24.8097C110.444 24.3059 110.672 23.7292 110.798 23.0795L113.901 23.0895C113.735 24.0904 113.413 25.0118 112.936 25.8537C112.465 26.6889 111.859 27.4115 111.116 28.0213C110.381 28.6245 109.539 29.0919 108.591 29.4233C107.643 29.7547 106.609 29.9205 105.489 29.9205C103.725 29.9205 102.154 29.5028 100.776 28.6676C99.3967 27.8258 98.3096 26.6226 97.5142 25.0582C96.7253 23.4938 96.3309 21.6278 96.3309 19.4602C96.3309 17.286 96.7287 15.42 97.5241 13.8622C98.3196 12.2978 99.4067 11.098 100.785 10.2628C102.164 9.42093 103.732 9 105.489 9C106.569 9 107.577 9.15578 108.511 9.46733C109.453 9.77225 110.298 10.223 111.047 10.8196C111.796 11.4096 112.416 12.1321 112.906 12.9872C113.397 13.8357 113.728 14.8068 113.901 15.9006Z" fill="#0F172A"/>
<path d="M120.311 9.27841V29.642H117.338V9.27841H120.311Z" fill="#0F172A"/>
<path d="M130.744 29.9503C129.312 29.9503 128.063 29.6222 126.996 28.9659C125.928 28.3097 125.1 27.3916 124.51 26.2116C123.92 25.0317 123.625 23.6529 123.625 22.0753C123.625 20.491 123.92 19.1056 124.51 17.919C125.1 16.7325 125.928 15.8111 126.996 15.1548C128.063 14.4986 129.312 14.1705 130.744 14.1705C132.176 14.1705 133.426 14.4986 134.493 15.1548C135.56 15.8111 136.389 16.7325 136.979 17.919C137.569 19.1056 137.864 20.491 137.864 22.0753C137.864 23.6529 137.569 25.0317 136.979 26.2116C136.389 27.3916 135.56 28.3097 134.493 28.9659C133.426 29.6222 132.176 29.9503 130.744 29.9503ZM130.754 27.4545C131.682 27.4545 132.451 27.2093 133.061 26.7188C133.671 26.2282 134.122 25.5753 134.413 24.7599C134.712 23.9446 134.861 23.0464 134.861 22.0653C134.861 21.0909 134.712 20.196 134.413 19.3807C134.122 18.5587 133.671 17.8991 133.061 17.402C132.451 16.9048 131.682 16.6562 130.754 16.6562C129.82 16.6562 129.044 16.9048 128.428 17.402C127.818 17.8991 127.364 18.5587 127.065 19.3807C126.774 20.196 126.628 21.0909 126.628 22.0653C126.628 23.0464 126.774 23.9446 127.065 24.7599C127.364 25.5753 127.818 26.2282 128.428 26.7188C129.044 27.2093 129.82 27.4545 130.754 27.4545Z" fill="#0F172A"/>
<path d="M150.857 23.3082V14.3693H153.84V29.642H150.917V26.9972H150.757C150.406 27.8125 149.843 28.492 149.067 29.0355C148.298 29.5724 147.34 29.8409 146.194 29.8409C145.212 29.8409 144.344 29.6255 143.588 29.1946C142.839 28.7571 142.249 28.1108 141.819 27.2557C141.394 26.4006 141.182 25.3433 141.182 24.0838V14.3693H144.155V23.7259C144.155 24.7666 144.444 25.5952 145.02 26.2116C145.597 26.8281 146.346 27.1364 147.267 27.1364C147.824 27.1364 148.378 26.9972 148.928 26.7188C149.485 26.4403 149.945 26.0194 150.31 25.456C150.681 24.8925 150.863 24.1766 150.857 23.3082Z" fill="#0F172A"/>
<path d="M163.552 29.9403C162.319 29.9403 161.218 29.6255 160.251 28.9957C159.29 28.3594 158.534 27.4545 157.984 26.2812C157.44 25.1013 157.168 23.6861 157.168 22.0355C157.168 20.3849 157.443 18.973 157.994 17.7997C158.55 16.6264 159.313 15.7282 160.281 15.1051C161.248 14.482 162.345 14.1705 163.572 14.1705C164.52 14.1705 165.282 14.3295 165.859 14.6477C166.442 14.9593 166.893 15.3239 167.211 15.7415C167.536 16.1591 167.788 16.527 167.967 16.8452H168.146V9.27841H171.119V29.642H168.215V27.2656H167.967C167.788 27.5904 167.529 27.9616 167.191 28.3793C166.86 28.7969 166.402 29.1615 165.819 29.473C165.236 29.7846 164.48 29.9403 163.552 29.9403ZM164.208 27.4048C165.063 27.4048 165.786 27.1795 166.376 26.7287C166.972 26.2713 167.423 25.6383 167.728 24.8295C168.04 24.0208 168.195 23.0795 168.195 22.0057C168.195 20.9451 168.043 20.017 167.738 19.2216C167.433 18.4261 166.986 17.8063 166.396 17.3622C165.806 16.9181 165.076 16.696 164.208 16.696C163.313 16.696 162.567 16.928 161.971 17.392C161.374 17.8561 160.924 18.4891 160.619 19.2912C160.32 20.0933 160.171 20.9981 160.171 22.0057C160.171 23.0265 160.324 23.9446 160.629 24.7599C160.933 25.5753 161.384 26.2216 161.981 26.6989C162.584 27.1695 163.326 27.4048 164.208 27.4048Z" fill="#0F172A"/>
<path d="M36.7916 10.5417V6.16669C36.7916 3.75169 34.8316 1.79169 32.4166 1.79169H6.16663C3.75163 1.79169 1.79163 3.75169 1.79163 6.16669V32.4167C1.79163 34.8317 3.75163 36.7917 6.16663 36.7917H10.5416M36.7916 10.5417C31.9616 10.5417 28.0416 14.4617 28.0416 19.2917C28.0416 24.1217 24.1216 28.0417 19.2916 28.0417C14.4616 28.0417 10.5416 31.9617 10.5416 36.7917M36.7916 10.5417V32.2841C36.7916 34.7723 34.7722 36.7917 32.2841 36.7917L10.5416 36.7917" stroke="#0F172A" stroke-width="3"/>
</g>
<defs>
<clipPath id="clip0_301_3">
<rect width="172" height="39" fill="white" transform="matrix(-1 0 0 1 172 0)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,17 @@
<svg width="172" height="39" viewBox="0 0 172 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_403_2)">
<path d="M69.6733 9.27841V29.642H66.8494L56.4985 14.7074H56.3096V29.642H53.2372V9.27841H56.0809L66.4417 24.233H66.6306V9.27841H69.6733Z" fill="white"/>
<path d="M76.2631 14.3693L79.6338 20.3153L83.0344 14.3693H86.2858L81.523 22.0057L86.3256 29.642H83.0742L79.6338 23.9347L76.2034 29.642H72.9421L77.6949 22.0057L73.0017 14.3693H76.2631Z" fill="white"/>
<path d="M113.901 15.9006H110.798C110.679 15.2377 110.457 14.6544 110.132 14.1506C109.807 13.6468 109.41 13.2192 108.939 12.8679C108.468 12.5166 107.941 12.2514 107.358 12.0724C106.781 11.8935 106.168 11.804 105.518 11.804C104.345 11.804 103.294 12.099 102.366 12.6889C101.445 13.2789 100.716 14.1439 100.179 15.2841C99.6486 16.4242 99.3835 17.8163 99.3835 19.4602C99.3835 21.1174 99.6486 22.5161 100.179 23.6562C100.716 24.7964 101.448 25.6581 102.376 26.2415C103.304 26.8248 104.348 27.1165 105.508 27.1165C106.151 27.1165 106.761 27.0303 107.338 26.858C107.921 26.679 108.448 26.4171 108.919 26.0724C109.39 25.7277 109.787 25.3068 110.112 24.8097C110.444 24.3059 110.672 23.7292 110.798 23.0795L113.901 23.0895C113.735 24.0904 113.413 25.0118 112.936 25.8537C112.465 26.6889 111.859 27.4115 111.116 28.0213C110.381 28.6245 109.539 29.0919 108.591 29.4233C107.643 29.7547 106.609 29.9205 105.489 29.9205C103.725 29.9205 102.154 29.5028 100.776 28.6676C99.3967 27.8258 98.3096 26.6226 97.5142 25.0582C96.7253 23.4938 96.3309 21.6278 96.3309 19.4602C96.3309 17.286 96.7287 15.42 97.5241 13.8622C98.3196 12.2978 99.4067 11.098 100.785 10.2628C102.164 9.42093 103.732 9 105.489 9C106.569 9 107.577 9.15578 108.511 9.46733C109.453 9.77225 110.298 10.223 111.047 10.8196C111.796 11.4096 112.416 12.1321 112.906 12.9872C113.397 13.8357 113.728 14.8068 113.901 15.9006Z" fill="white"/>
<path d="M120.311 9.27841V29.642H117.338V9.27841H120.311Z" fill="white"/>
<path d="M130.744 29.9503C129.312 29.9503 128.063 29.6222 126.996 28.9659C125.928 28.3097 125.1 27.3916 124.51 26.2116C123.92 25.0317 123.625 23.6529 123.625 22.0753C123.625 20.491 123.92 19.1056 124.51 17.919C125.1 16.7325 125.928 15.8111 126.996 15.1548C128.063 14.4986 129.312 14.1705 130.744 14.1705C132.176 14.1705 133.426 14.4986 134.493 15.1548C135.56 15.8111 136.389 16.7325 136.979 17.919C137.569 19.1056 137.864 20.491 137.864 22.0753C137.864 23.6529 137.569 25.0317 136.979 26.2116C136.389 27.3916 135.56 28.3097 134.493 28.9659C133.426 29.6222 132.176 29.9503 130.744 29.9503ZM130.754 27.4545C131.682 27.4545 132.451 27.2093 133.061 26.7188C133.671 26.2282 134.122 25.5753 134.413 24.7599C134.712 23.9446 134.861 23.0464 134.861 22.0653C134.861 21.0909 134.712 20.196 134.413 19.3807C134.122 18.5587 133.671 17.8991 133.061 17.402C132.451 16.9048 131.682 16.6562 130.754 16.6562C129.82 16.6562 129.044 16.9048 128.428 17.402C127.818 17.8991 127.364 18.5587 127.065 19.3807C126.774 20.196 126.628 21.0909 126.628 22.0653C126.628 23.0464 126.774 23.9446 127.065 24.7599C127.364 25.5753 127.818 26.2282 128.428 26.7188C129.044 27.2093 129.82 27.4545 130.754 27.4545Z" fill="white"/>
<path d="M150.857 23.3082V14.3693H153.84V29.642H150.917V26.9972H150.757C150.406 27.8125 149.843 28.492 149.067 29.0355C148.298 29.5724 147.34 29.8409 146.194 29.8409C145.212 29.8409 144.344 29.6255 143.588 29.1946C142.839 28.7571 142.249 28.1108 141.819 27.2557C141.394 26.4006 141.182 25.3433 141.182 24.0838V14.3693H144.155V23.7259C144.155 24.7666 144.444 25.5952 145.02 26.2116C145.597 26.8281 146.346 27.1364 147.267 27.1364C147.824 27.1364 148.378 26.9972 148.928 26.7188C149.485 26.4403 149.945 26.0194 150.31 25.456C150.681 24.8925 150.863 24.1766 150.857 23.3082Z" fill="white"/>
<path d="M163.552 29.9403C162.319 29.9403 161.218 29.6255 160.251 28.9957C159.29 28.3594 158.534 27.4545 157.984 26.2812C157.44 25.1013 157.168 23.6861 157.168 22.0355C157.168 20.3849 157.443 18.973 157.994 17.7997C158.55 16.6264 159.313 15.7282 160.281 15.1051C161.248 14.482 162.345 14.1705 163.572 14.1705C164.52 14.1705 165.282 14.3295 165.859 14.6477C166.442 14.9593 166.893 15.3239 167.211 15.7415C167.536 16.1591 167.788 16.527 167.967 16.8452H168.146V9.27841H171.119V29.642H168.215V27.2656H167.967C167.788 27.5904 167.529 27.9616 167.191 28.3793C166.86 28.7969 166.402 29.1615 165.819 29.473C165.236 29.7846 164.48 29.9403 163.552 29.9403ZM164.208 27.4048C165.063 27.4048 165.786 27.1795 166.376 26.7287C166.972 26.2713 167.423 25.6383 167.728 24.8295C168.04 24.0208 168.195 23.0795 168.195 22.0057C168.195 20.9451 168.043 20.017 167.738 19.2216C167.433 18.4261 166.986 17.8063 166.396 17.3622C165.806 16.9181 165.076 16.696 164.208 16.696C163.313 16.696 162.567 16.928 161.971 17.392C161.374 17.8561 160.924 18.4891 160.619 19.2912C160.32 20.0933 160.171 20.9981 160.171 22.0057C160.171 23.0265 160.324 23.9446 160.629 24.7599C160.933 25.5753 161.384 26.2216 161.981 26.6989C162.584 27.1695 163.326 27.4048 164.208 27.4048Z" fill="white"/>
<path d="M36.7916 10.5417V6.16669C36.7916 3.75169 34.8316 1.79169 32.4166 1.79169H6.16663C3.75163 1.79169 1.79163 3.75169 1.79163 6.16669V32.4167C1.79163 34.8317 3.75163 36.7917 6.16663 36.7917H10.5416M36.7916 10.5417C31.9616 10.5417 28.0416 14.4617 28.0416 19.2917C28.0416 24.1217 24.1216 28.0417 19.2916 28.0417C14.4616 28.0417 10.5416 31.9617 10.5416 36.7917M36.7916 10.5417V32.2841C36.7916 34.7723 34.7722 36.7917 32.2841 36.7917L10.5416 36.7917" stroke="white" stroke-width="3"/>
</g>
<defs>
<clipPath id="clip0_403_2">
<rect width="172" height="39" fill="white" transform="matrix(-1 0 0 1 172 0)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,10 @@
<svg width="344" height="221" viewBox="0 0 344 221" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.3535 191.192C40.8271 191.192 38.5414 190.639 36.4963 189.532C34.4752 188.401 32.8872 186.861 31.7323 184.912C30.5774 182.939 30 180.726 30 178.272C30 175.818 30.5774 173.616 31.7323 171.667C32.8872 169.694 34.4872 168.154 36.5324 167.048C38.5775 165.917 40.8632 165.351 43.3896 165.351C45.3625 165.351 47.167 165.688 48.8031 166.362C50.4392 167.011 51.8347 167.986 52.9896 169.285L50.6437 171.559C48.743 169.562 46.373 168.563 43.5339 168.563C41.6572 168.563 39.961 168.984 38.4452 169.827C36.9294 170.669 35.7384 171.836 34.8722 173.327C34.0301 174.795 33.609 176.443 33.609 178.272C33.609 180.1 34.0301 181.76 34.8722 183.252C35.7384 184.72 36.9294 185.875 38.4452 186.717C39.961 187.559 41.6572 187.98 43.5339 187.98C46.349 187.98 48.7189 186.969 50.6437 184.948L52.9896 187.222C51.8347 188.521 50.4272 189.508 48.767 190.182C47.1309 190.855 45.3264 191.192 43.3535 191.192Z" fill="#143055"/>
<path d="M85.9766 191.192C83.4262 191.192 81.1284 190.639 79.0833 189.532C77.0382 188.401 75.4261 186.849 74.2472 184.876C73.0923 182.903 72.5148 180.702 72.5148 178.272C72.5148 175.842 73.0923 173.64 74.2472 171.667C75.4261 169.694 77.0382 168.154 79.0833 167.048C81.1284 165.917 83.4262 165.351 85.9766 165.351C88.5029 165.351 90.7886 165.917 92.8338 167.048C94.8789 168.154 96.4789 169.694 97.6338 171.667C98.7887 173.616 99.3661 175.818 99.3661 178.272C99.3661 180.726 98.7887 182.939 97.6338 184.912C96.4789 186.861 94.8789 188.401 92.8338 189.532C90.7886 190.639 88.5029 191.192 85.9766 191.192ZM85.9766 187.98C87.8292 187.98 89.4894 187.559 90.957 186.717C92.4488 185.875 93.6157 184.72 94.4578 183.252C95.324 181.76 95.7571 180.1 95.7571 178.272C95.7571 176.443 95.324 174.795 94.4578 173.327C93.6157 171.836 92.4488 170.669 90.957 169.827C89.4894 168.984 87.8292 168.563 85.9766 168.563C84.1239 168.563 82.4397 168.984 80.9239 169.827C79.4322 170.669 78.2532 171.836 77.387 173.327C76.5449 174.795 76.1239 176.443 76.1239 178.272C76.1239 180.1 76.5449 181.76 77.387 183.252C78.2532 184.72 79.4322 185.875 80.9239 186.717C82.4397 187.559 84.1239 187.98 85.9766 187.98Z" fill="#143055"/>
<path d="M143.571 165.64V190.903H140.612L125.454 172.064V190.903H121.845V165.64H124.804L139.962 184.479V165.64H143.571Z" fill="#143055"/>
<path d="M175.458 191.192C173.557 191.192 171.717 190.903 169.936 190.326C168.18 189.724 166.796 188.954 165.786 188.016L167.121 185.201C168.084 186.067 169.311 186.777 170.802 187.33C172.318 187.86 173.87 188.124 175.458 188.124C177.551 188.124 179.115 187.776 180.15 187.078C181.184 186.356 181.702 185.406 181.702 184.227C181.702 183.36 181.413 182.663 180.836 182.133C180.282 181.58 179.584 181.159 178.742 180.87C177.924 180.581 176.757 180.257 175.241 179.896C173.341 179.439 171.801 178.981 170.622 178.524C169.467 178.067 168.469 177.369 167.626 176.431C166.808 175.469 166.399 174.181 166.399 172.569C166.399 171.222 166.748 170.007 167.446 168.924C168.168 167.842 169.25 166.975 170.694 166.326C172.138 165.676 173.93 165.351 176.072 165.351C177.563 165.351 179.031 165.544 180.475 165.929C181.918 166.314 183.157 166.867 184.192 167.589L183.001 170.476C181.942 169.802 180.811 169.297 179.608 168.96C178.405 168.599 177.226 168.419 176.072 168.419C174.026 168.419 172.487 168.792 171.452 169.538C170.441 170.284 169.936 171.246 169.936 172.425C169.936 173.291 170.225 174.001 170.802 174.554C171.38 175.084 172.09 175.505 172.932 175.818C173.798 176.106 174.965 176.419 176.432 176.756C178.333 177.213 179.861 177.67 181.016 178.127C182.171 178.584 183.157 179.282 183.975 180.221C184.817 181.159 185.239 182.422 185.239 184.01C185.239 185.333 184.878 186.548 184.156 187.655C183.434 188.738 182.339 189.604 180.872 190.254C179.404 190.879 177.599 191.192 175.458 191.192Z" fill="#143055"/>
<path d="M218.878 191.192C216.328 191.192 214.03 190.639 211.985 189.532C209.94 188.401 208.328 186.849 207.149 184.876C205.994 182.903 205.416 180.702 205.416 178.272C205.416 175.842 205.994 173.64 207.149 171.667C208.328 169.694 209.94 168.154 211.985 167.048C214.03 165.917 216.328 165.351 218.878 165.351C221.405 165.351 223.69 165.917 225.735 167.048C227.781 168.154 229.381 169.694 230.535 171.667C231.69 173.616 232.268 175.818 232.268 178.272C232.268 180.726 231.69 182.939 230.535 184.912C229.381 186.861 227.781 188.401 225.735 189.532C223.69 190.639 221.405 191.192 218.878 191.192ZM218.878 187.98C220.731 187.98 222.391 187.559 223.859 186.717C225.35 185.875 226.517 184.72 227.359 183.252C228.226 181.76 228.659 180.1 228.659 178.272C228.659 176.443 228.226 174.795 227.359 173.327C226.517 171.836 225.35 170.669 223.859 169.827C222.391 168.984 220.731 168.563 218.878 168.563C217.026 168.563 215.341 168.984 213.826 169.827C212.334 170.669 211.155 171.836 210.289 173.327C209.447 174.795 209.026 176.443 209.026 178.272C209.026 180.1 209.447 181.76 210.289 183.252C211.155 184.72 212.334 185.875 213.826 186.717C215.341 187.559 217.026 187.98 218.878 187.98Z" fill="#143055"/>
<path d="M254.747 165.64H258.356V187.763H272.034V190.903H254.747V165.64Z" fill="#143055"/>
<path d="M311.472 187.763V190.903H293.138V165.64H310.966V168.78H296.747V176.539H309.414V179.607H296.747V187.763H311.472Z" fill="#143055"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.4936 30H30.2225V127.745H59.4859V79.9321L99.0949 127.745H123.366V30H94.1026V77.8129L54.4936 30ZM33.2301 124.737V33.0075H53.0796L97.1102 86.1577V33.0075H120.358V124.737H100.509L56.4783 71.5873V124.737H33.2301ZM153.172 30H186.673L220.749 78.3213L186.683 127.745H151.648L187.249 78.3219L153.172 30ZM158.973 33.0075L190.942 78.3404L157.521 124.737H185.103L217.083 78.341L185.113 33.0075H158.973ZM243.307 108.196H313.984V127.745H243.307V108.196ZM246.314 111.204V124.737H310.976V111.204H246.314Z" fill="#143055"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@@ -0,0 +1,10 @@
<svg width="344" height="221" viewBox="0 0 344 221" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.3535 191.192C40.8271 191.192 38.5414 190.639 36.4963 189.532C34.4752 188.401 32.8872 186.861 31.7323 184.912C30.5774 182.939 30 180.726 30 178.272C30 175.818 30.5774 173.616 31.7323 171.667C32.8872 169.694 34.4872 168.154 36.5324 167.048C38.5775 165.917 40.8632 165.351 43.3896 165.351C45.3625 165.351 47.167 165.688 48.8031 166.362C50.4392 167.011 51.8347 167.986 52.9896 169.285L50.6437 171.559C48.743 169.562 46.373 168.563 43.5339 168.563C41.6572 168.563 39.961 168.984 38.4452 169.827C36.9294 170.669 35.7384 171.836 34.8722 173.327C34.0301 174.795 33.609 176.443 33.609 178.272C33.609 180.1 34.0301 181.76 34.8722 183.252C35.7384 184.72 36.9294 185.875 38.4452 186.717C39.961 187.559 41.6572 187.98 43.5339 187.98C46.349 187.98 48.7189 186.969 50.6437 184.948L52.9896 187.222C51.8347 188.521 50.4272 189.508 48.767 190.182C47.1309 190.855 45.3264 191.192 43.3535 191.192Z" fill="white"/>
<path d="M85.9766 191.192C83.4262 191.192 81.1284 190.639 79.0833 189.532C77.0382 188.401 75.4261 186.849 74.2472 184.876C73.0923 182.903 72.5148 180.702 72.5148 178.272C72.5148 175.842 73.0923 173.64 74.2472 171.667C75.4261 169.694 77.0382 168.154 79.0833 167.048C81.1284 165.917 83.4262 165.351 85.9766 165.351C88.5029 165.351 90.7886 165.917 92.8338 167.048C94.8789 168.154 96.4789 169.694 97.6338 171.667C98.7887 173.616 99.3661 175.818 99.3661 178.272C99.3661 180.726 98.7887 182.939 97.6338 184.912C96.4789 186.861 94.8789 188.401 92.8338 189.532C90.7886 190.639 88.5029 191.192 85.9766 191.192ZM85.9766 187.98C87.8292 187.98 89.4894 187.559 90.957 186.717C92.4488 185.875 93.6157 184.72 94.4578 183.252C95.324 181.76 95.7571 180.1 95.7571 178.272C95.7571 176.443 95.324 174.795 94.4578 173.327C93.6157 171.836 92.4488 170.669 90.957 169.827C89.4894 168.984 87.8292 168.563 85.9766 168.563C84.1239 168.563 82.4397 168.984 80.9239 169.827C79.4322 170.669 78.2532 171.836 77.387 173.327C76.5449 174.795 76.1239 176.443 76.1239 178.272C76.1239 180.1 76.5449 181.76 77.387 183.252C78.2532 184.72 79.4322 185.875 80.9239 186.717C82.4397 187.559 84.1239 187.98 85.9766 187.98Z" fill="white"/>
<path d="M143.571 165.64V190.903H140.612L125.454 172.064V190.903H121.845V165.64H124.804L139.962 184.479V165.64H143.571Z" fill="white"/>
<path d="M175.458 191.192C173.557 191.192 171.717 190.903 169.936 190.326C168.18 189.724 166.796 188.954 165.786 188.016L167.121 185.201C168.084 186.067 169.311 186.777 170.802 187.33C172.318 187.86 173.87 188.124 175.458 188.124C177.551 188.124 179.115 187.776 180.15 187.078C181.184 186.356 181.702 185.406 181.702 184.227C181.702 183.36 181.413 182.663 180.836 182.133C180.282 181.58 179.584 181.159 178.742 180.87C177.924 180.581 176.757 180.257 175.241 179.896C173.341 179.439 171.801 178.981 170.622 178.524C169.467 178.067 168.469 177.369 167.626 176.431C166.808 175.469 166.399 174.181 166.399 172.569C166.399 171.222 166.748 170.007 167.446 168.924C168.168 167.842 169.25 166.975 170.694 166.326C172.138 165.676 173.93 165.351 176.072 165.351C177.563 165.351 179.031 165.544 180.475 165.929C181.918 166.314 183.157 166.867 184.192 167.589L183.001 170.476C181.942 169.802 180.811 169.297 179.608 168.96C178.405 168.599 177.226 168.419 176.072 168.419C174.026 168.419 172.487 168.792 171.452 169.538C170.441 170.284 169.936 171.246 169.936 172.425C169.936 173.291 170.225 174.001 170.802 174.554C171.38 175.084 172.09 175.505 172.932 175.818C173.798 176.106 174.965 176.419 176.432 176.756C178.333 177.213 179.861 177.67 181.016 178.127C182.171 178.584 183.157 179.282 183.975 180.221C184.817 181.159 185.239 182.422 185.239 184.01C185.239 185.333 184.878 186.548 184.156 187.655C183.434 188.738 182.339 189.604 180.872 190.254C179.404 190.879 177.599 191.192 175.458 191.192Z" fill="white"/>
<path d="M218.878 191.192C216.328 191.192 214.03 190.639 211.985 189.532C209.94 188.401 208.328 186.849 207.149 184.876C205.994 182.903 205.416 180.702 205.416 178.272C205.416 175.842 205.994 173.64 207.149 171.667C208.328 169.694 209.94 168.154 211.985 167.048C214.03 165.917 216.328 165.351 218.878 165.351C221.405 165.351 223.69 165.917 225.735 167.048C227.781 168.154 229.381 169.694 230.535 171.667C231.69 173.616 232.268 175.818 232.268 178.272C232.268 180.726 231.69 182.939 230.535 184.912C229.381 186.861 227.781 188.401 225.735 189.532C223.69 190.639 221.405 191.192 218.878 191.192ZM218.878 187.98C220.731 187.98 222.391 187.559 223.859 186.717C225.35 185.875 226.517 184.72 227.359 183.252C228.226 181.76 228.659 180.1 228.659 178.272C228.659 176.443 228.226 174.795 227.359 173.327C226.517 171.836 225.35 170.669 223.859 169.827C222.391 168.984 220.731 168.563 218.878 168.563C217.026 168.563 215.341 168.984 213.826 169.827C212.334 170.669 211.155 171.836 210.289 173.327C209.447 174.795 209.026 176.443 209.026 178.272C209.026 180.1 209.447 181.76 210.289 183.252C211.155 184.72 212.334 185.875 213.826 186.717C215.341 187.559 217.026 187.98 218.878 187.98Z" fill="white"/>
<path d="M254.747 165.64H258.356V187.763H272.034V190.903H254.747V165.64Z" fill="white"/>
<path d="M311.472 187.763V190.903H293.138V165.64H310.966V168.78H296.747V176.539H309.414V179.607H296.747V187.763H311.472Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.4937 30H30.2227V127.745H59.486V79.9321L99.095 127.745H123.366V30H94.1028V77.8129L54.4937 30ZM33.2302 124.737V33.0075H53.0797L97.1103 86.1577V33.0075H120.359V124.737H100.509L56.4785 71.5873V124.737H33.2302ZM153.173 30H186.673L220.749 78.3213L186.683 127.745H151.648L187.249 78.3219L153.173 30ZM158.974 33.0075L190.942 78.3404L157.521 124.737H185.103L217.083 78.341L185.114 33.0075H158.974ZM243.307 108.196H313.984V127.745H243.307V108.196ZM246.314 111.204V124.737H310.976V111.204H246.314Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@@ -0,0 +1,10 @@
<svg width="536" height="97" viewBox="0 0 536 97" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M40.9208 30H30V66.6005H43.5953V53.8792L54.1338 66.6005H65.0547V30H51.4593V42.7212L40.9208 30ZM93.7248 30H77.8642L90.6309 48.1037L77.307 66.6005H93.7411L106.491 48.1028L93.7248 30ZM32.8504 63.7501V32.8504H39.5807L54.3097 50.6301V32.8504H62.2043V63.7501H55.4739L40.7449 45.9704V63.7501H32.8504ZM94.1312 48.1212L83.3622 32.8504H92.2471L103.016 48.1214L92.2439 63.7501H82.8731L94.1312 48.1212ZM142 56.2685H114.492V66.6005H142V56.2685ZM117.343 63.7501V59.1189H139.15V63.7501H117.343Z" fill="#143055"/>
<path d="M186.568 67.2486C182.943 67.2486 179.664 66.4546 176.729 64.8665C173.829 63.2439 171.551 61.0345 169.894 58.2381C168.237 55.4072 167.408 52.2311 167.408 48.7097C167.408 45.1883 168.237 42.0295 169.894 39.2331C171.551 36.4022 173.847 34.1927 176.781 32.6047C179.715 30.9821 182.995 30.1708 186.62 30.1708C189.451 30.1708 192.04 30.6541 194.388 31.6207C196.735 32.5529 198.738 33.9511 200.395 35.8153L197.029 39.0777C194.301 36.2123 190.901 34.7796 186.827 34.7796C184.134 34.7796 181.701 35.3838 179.526 36.5921C177.351 37.8004 175.642 39.4748 174.399 41.6152C173.191 43.7211 172.586 46.0859 172.586 48.7097C172.586 51.3335 173.191 53.7156 174.399 55.856C175.642 57.9619 177.351 59.619 179.526 60.8273C181.701 62.0356 184.134 62.6398 186.827 62.6398C190.866 62.6398 194.267 61.1898 197.029 58.2899L200.395 61.5523C198.738 63.4166 196.718 64.832 194.336 65.7987C191.988 66.7653 189.399 67.2486 186.568 67.2486Z" fill="#143055"/>
<path d="M236.852 67.2486C233.192 67.2486 229.895 66.4546 226.961 64.8665C224.026 63.2439 221.713 61.0172 220.022 58.1863C218.365 55.3554 217.536 52.1965 217.536 48.7097C217.536 45.2229 218.365 42.064 220.022 39.2331C221.713 36.4022 224.026 34.1927 226.961 32.6047C229.895 30.9821 233.192 30.1708 236.852 30.1708C240.477 30.1708 243.756 30.9821 246.691 32.6047C249.625 34.1927 251.921 36.4022 253.578 39.2331C255.235 42.0295 256.064 45.1883 256.064 48.7097C256.064 52.2311 255.235 55.4072 253.578 58.2381C251.921 61.0345 249.625 63.2439 246.691 64.8665C243.756 66.4546 240.477 67.2486 236.852 67.2486ZM236.852 62.6398C239.51 62.6398 241.892 62.0356 243.998 60.8273C246.138 59.619 247.813 57.9619 249.021 55.856C250.264 53.7156 250.885 51.3335 250.885 48.7097C250.885 46.0859 250.264 43.7211 249.021 41.6152C247.813 39.4748 246.138 37.8004 243.998 36.5921C241.892 35.3838 239.51 34.7796 236.852 34.7796C234.193 34.7796 231.777 35.3838 229.602 36.5921C227.461 37.8004 225.77 39.4748 224.527 41.6152C223.319 43.7211 222.714 46.0859 222.714 48.7097C222.714 51.3335 223.319 53.7156 224.527 55.856C225.77 57.9619 227.461 59.619 229.602 60.8273C231.777 62.0356 234.193 62.6398 236.852 62.6398Z" fill="#143055"/>
<path d="M308.617 30.5851V66.8344H304.371L282.621 39.8027V66.8344H277.443V30.5851H281.689L303.439 57.6167V30.5851H308.617Z" fill="#143055"/>
<path d="M343.495 67.2486C340.768 67.2486 338.127 66.8344 335.572 66.0058C333.052 65.1427 331.067 64.038 329.617 62.6916L331.533 58.6524C332.914 59.8952 334.675 60.9136 336.815 61.7077C338.99 62.4672 341.217 62.8469 343.495 62.8469C346.499 62.8469 348.743 62.3463 350.227 61.3452C351.712 60.3095 352.454 58.9458 352.454 57.2542C352.454 56.0113 352.04 55.0102 351.211 54.2507C350.417 53.4566 349.416 52.8525 348.208 52.4382C347.034 52.0239 345.36 51.5579 343.185 51.04C340.457 50.3841 338.248 49.7281 336.556 49.0722C334.899 48.4163 333.466 47.4151 332.258 46.0687C331.084 44.6878 330.497 42.8408 330.497 40.5277C330.497 38.5944 330.998 36.851 331.999 35.2975C333.035 33.7439 334.588 32.5011 336.66 31.569C338.731 30.6368 341.303 30.1708 344.376 30.1708C346.516 30.1708 348.622 30.447 350.693 30.9993C352.765 31.5517 354.543 32.3457 356.027 33.3814L354.318 37.5242C352.799 36.5576 351.177 35.8326 349.451 35.3492C347.724 34.8314 346.033 34.5725 344.376 34.5725C341.441 34.5725 339.232 35.1076 337.747 36.1778C336.297 37.248 335.572 38.6289 335.572 40.3206C335.572 41.5634 335.987 42.5818 336.815 43.3759C337.644 44.1354 338.662 44.7395 339.87 45.1883C341.113 45.6026 342.788 46.0514 344.894 46.5347C347.621 47.1907 349.813 47.8466 351.47 48.5026C353.127 49.1585 354.543 50.1597 355.717 51.5061C356.925 52.8525 357.529 54.6649 357.529 56.9435C357.529 58.8422 357.011 60.5857 355.976 62.1737C354.94 63.7273 353.369 64.9701 351.263 65.9022C349.157 66.7998 346.568 67.2486 343.495 67.2486Z" fill="#143055"/>
<path d="M394.922 67.2486C391.263 67.2486 387.966 66.4546 385.032 64.8665C382.097 63.2439 379.784 61.0172 378.092 58.1863C376.435 55.3554 375.607 52.1965 375.607 48.7097C375.607 45.2229 376.435 42.064 378.092 39.2331C379.784 36.4022 382.097 34.1927 385.032 32.6047C387.966 30.9821 391.263 30.1708 394.922 30.1708C398.547 30.1708 401.827 30.9821 404.762 32.6047C407.696 34.1927 409.992 36.4022 411.649 39.2331C413.306 42.0295 414.135 45.1883 414.135 48.7097C414.135 52.2311 413.306 55.4072 411.649 58.2381C409.992 61.0345 407.696 63.2439 404.762 64.8665C401.827 66.4546 398.547 67.2486 394.922 67.2486ZM394.922 62.6398C397.581 62.6398 399.963 62.0356 402.069 60.8273C404.209 59.619 405.884 57.9619 407.092 55.856C408.335 53.7156 408.956 51.3335 408.956 48.7097C408.956 46.0859 408.335 43.7211 407.092 41.6152C405.884 39.4748 404.209 37.8004 402.069 36.5921C399.963 35.3838 397.581 34.7796 394.922 34.7796C392.264 34.7796 389.848 35.3838 387.673 36.5921C385.532 37.8004 383.841 39.4748 382.598 41.6152C381.389 43.7211 380.785 46.0859 380.785 48.7097C380.785 51.3335 381.389 53.7156 382.598 55.856C383.841 57.9619 385.532 59.619 387.673 60.8273C389.848 62.0356 392.264 62.6398 394.922 62.6398Z" fill="#143055"/>
<path d="M435.514 30.5851H440.692V62.3291H460.318V66.8344H435.514V30.5851Z" fill="#143055"/>
<path d="M506.031 62.3291V66.8344H479.725V30.5851H505.306V35.0903H484.903V46.224H503.08V50.6257H484.903V62.3291H506.031Z" fill="#143055"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,10 @@
<svg width="536" height="97" viewBox="0 0 536 97" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M40.9208 30H30V66.6005H43.5953V53.8792L54.1338 66.6005H65.0547V30H51.4593V42.7212L40.9208 30ZM93.7248 30H77.8642L90.6309 48.1037L77.307 66.6005H93.7411L106.491 48.1028L93.7248 30ZM32.8504 63.7501V32.8504H39.5807L54.3097 50.6301V32.8504H62.2043V63.7501H55.4739L40.7449 45.9704V63.7501H32.8504ZM94.1312 48.1212L83.3622 32.8504H92.2471L103.016 48.1214L92.2439 63.7501H82.8731L94.1312 48.1212ZM142 56.2685H114.492V66.6005H142V56.2685ZM117.343 63.7501V59.1189H139.15V63.7501H117.343Z" fill="white"/>
<path d="M186.568 67.2486C182.943 67.2486 179.664 66.4546 176.729 64.8665C173.829 63.2439 171.551 61.0345 169.894 58.2381C168.237 55.4072 167.408 52.2311 167.408 48.7097C167.408 45.1883 168.237 42.0295 169.894 39.2331C171.551 36.4022 173.847 34.1927 176.781 32.6047C179.715 30.9821 182.995 30.1708 186.62 30.1708C189.451 30.1708 192.04 30.6541 194.388 31.6207C196.735 32.5529 198.738 33.9511 200.395 35.8153L197.029 39.0777C194.301 36.2123 190.901 34.7796 186.827 34.7796C184.134 34.7796 181.701 35.3838 179.526 36.5921C177.351 37.8004 175.642 39.4748 174.399 41.6152C173.191 43.7211 172.586 46.0859 172.586 48.7097C172.586 51.3335 173.191 53.7156 174.399 55.856C175.642 57.9619 177.351 59.619 179.526 60.8273C181.701 62.0356 184.134 62.6398 186.827 62.6398C190.866 62.6398 194.267 61.1898 197.029 58.2899L200.395 61.5523C198.738 63.4166 196.718 64.832 194.336 65.7987C191.988 66.7653 189.399 67.2486 186.568 67.2486Z" fill="white"/>
<path d="M236.852 67.2486C233.192 67.2486 229.895 66.4546 226.961 64.8665C224.026 63.2439 221.713 61.0172 220.022 58.1863C218.365 55.3554 217.536 52.1965 217.536 48.7097C217.536 45.2229 218.365 42.064 220.022 39.2331C221.713 36.4022 224.026 34.1927 226.961 32.6047C229.895 30.9821 233.192 30.1708 236.852 30.1708C240.477 30.1708 243.756 30.9821 246.691 32.6047C249.625 34.1927 251.921 36.4022 253.578 39.2331C255.235 42.0295 256.064 45.1883 256.064 48.7097C256.064 52.2311 255.235 55.4072 253.578 58.2381C251.921 61.0345 249.625 63.2439 246.691 64.8665C243.756 66.4546 240.477 67.2486 236.852 67.2486ZM236.852 62.6398C239.51 62.6398 241.892 62.0356 243.998 60.8273C246.138 59.619 247.813 57.9619 249.021 55.856C250.264 53.7156 250.885 51.3335 250.885 48.7097C250.885 46.0859 250.264 43.7211 249.021 41.6152C247.813 39.4748 246.138 37.8004 243.998 36.5921C241.892 35.3838 239.51 34.7796 236.852 34.7796C234.193 34.7796 231.777 35.3838 229.602 36.5921C227.461 37.8004 225.77 39.4748 224.527 41.6152C223.319 43.7211 222.714 46.0859 222.714 48.7097C222.714 51.3335 223.319 53.7156 224.527 55.856C225.77 57.9619 227.461 59.619 229.602 60.8273C231.777 62.0356 234.193 62.6398 236.852 62.6398Z" fill="white"/>
<path d="M308.617 30.5851V66.8344H304.371L282.621 39.8027V66.8344H277.443V30.5851H281.689L303.439 57.6167V30.5851H308.617Z" fill="white"/>
<path d="M343.495 67.2486C340.768 67.2486 338.127 66.8344 335.572 66.0058C333.052 65.1427 331.067 64.038 329.617 62.6916L331.533 58.6524C332.914 59.8952 334.675 60.9136 336.815 61.7077C338.99 62.4672 341.217 62.8469 343.495 62.8469C346.499 62.8469 348.743 62.3463 350.227 61.3452C351.712 60.3095 352.454 58.9458 352.454 57.2542C352.454 56.0113 352.04 55.0102 351.211 54.2507C350.417 53.4566 349.416 52.8525 348.208 52.4382C347.034 52.0239 345.36 51.5579 343.185 51.04C340.457 50.3841 338.248 49.7281 336.556 49.0722C334.899 48.4163 333.466 47.4151 332.258 46.0687C331.084 44.6878 330.497 42.8408 330.497 40.5277C330.497 38.5944 330.998 36.851 331.999 35.2975C333.035 33.7439 334.588 32.5011 336.66 31.569C338.731 30.6368 341.303 30.1708 344.376 30.1708C346.516 30.1708 348.622 30.447 350.693 30.9993C352.765 31.5517 354.543 32.3457 356.027 33.3814L354.318 37.5242C352.799 36.5576 351.177 35.8326 349.451 35.3492C347.724 34.8314 346.033 34.5725 344.376 34.5725C341.441 34.5725 339.232 35.1076 337.747 36.1778C336.297 37.248 335.572 38.6289 335.572 40.3206C335.572 41.5634 335.987 42.5818 336.815 43.3759C337.644 44.1354 338.662 44.7395 339.87 45.1883C341.113 45.6026 342.788 46.0514 344.894 46.5347C347.621 47.1907 349.813 47.8466 351.47 48.5026C353.127 49.1585 354.543 50.1597 355.717 51.5061C356.925 52.8525 357.529 54.6649 357.529 56.9435C357.529 58.8422 357.011 60.5857 355.976 62.1737C354.94 63.7273 353.369 64.9701 351.263 65.9022C349.157 66.7998 346.568 67.2486 343.495 67.2486Z" fill="white"/>
<path d="M394.922 67.2486C391.263 67.2486 387.966 66.4546 385.032 64.8665C382.097 63.2439 379.784 61.0172 378.092 58.1863C376.435 55.3554 375.607 52.1965 375.607 48.7097C375.607 45.2229 376.435 42.064 378.092 39.2331C379.784 36.4022 382.097 34.1927 385.032 32.6047C387.966 30.9821 391.263 30.1708 394.922 30.1708C398.547 30.1708 401.827 30.9821 404.762 32.6047C407.696 34.1927 409.992 36.4022 411.649 39.2331C413.306 42.0295 414.135 45.1883 414.135 48.7097C414.135 52.2311 413.306 55.4072 411.649 58.2381C409.992 61.0345 407.696 63.2439 404.762 64.8665C401.827 66.4546 398.547 67.2486 394.922 67.2486ZM394.922 62.6398C397.581 62.6398 399.963 62.0356 402.069 60.8273C404.209 59.619 405.884 57.9619 407.092 55.856C408.335 53.7156 408.956 51.3335 408.956 48.7097C408.956 46.0859 408.335 43.7211 407.092 41.6152C405.884 39.4748 404.209 37.8004 402.069 36.5921C399.963 35.3838 397.581 34.7796 394.922 34.7796C392.264 34.7796 389.848 35.3838 387.673 36.5921C385.532 37.8004 383.841 39.4748 382.598 41.6152C381.389 43.7211 380.785 46.0859 380.785 48.7097C380.785 51.3335 381.389 53.7156 382.598 55.856C383.841 57.9619 385.532 59.619 387.673 60.8273C389.848 62.0356 392.264 62.6398 394.922 62.6398Z" fill="white"/>
<path d="M435.514 30.5851H440.692V62.3291H460.318V66.8344H435.514V30.5851Z" fill="white"/>
<path d="M506.031 62.3291V66.8344H479.725V30.5851H505.306V35.0903H484.903V46.224H503.08V50.6257H484.903V62.3291H506.031Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M499.651 555.512L416.132 686.623L277.653 462.192L277.333 697.143H180V300H278.426L418.345 535.244L418.479 428.768L499.651 555.512V555.512ZM515.678 402.082C516.318 400.804 515.678 301.305 515.891 300H418.559C418.612 301.571 418.425 400.564 418.479 402.082H515.678V402.082ZM665.917 512.181C654.556 511.963 643.406 515.267 634.003 521.639C624.6 528.011 617.406 537.137 613.411 547.762C620.029 537.871 629.827 530.531 641.187 526.953C652.546 523.374 664.788 523.772 675.89 528.08C686.45 532.368 700.344 539.319 711.357 535.617C706.19 528.388 699.374 522.491 691.472 518.416C683.57 514.34 674.81 512.203 665.917 512.181V512.181ZM756.316 540.438C746.317 536.976 734.983 533.061 726.743 522.301C725.143 520.17 723.65 517.774 722.05 515.244C718.48 508.669 713.651 502.86 707.837 498.145C699.997 492.393 689.704 489.57 676.37 489.57C663.264 489.573 650.454 493.463 639.563 500.745C628.673 508.028 620.193 518.376 615.197 530.477C621.53 521.672 630.067 514.682 639.954 510.206C649.84 505.73 660.73 503.925 671.535 504.971C682.339 506.017 692.679 509.878 701.52 516.168C710.362 522.457 717.395 530.955 721.917 540.811C724.168 544.503 727.558 547.366 731.578 548.97C735.598 550.574 740.031 550.832 744.21 549.706C757.357 546.909 756.476 559.294 776.29 563.501V559.959C776.21 548.081 769.73 545.312 756.29 540.438H756.316ZM810.289 574.154C813.196 572.389 815.582 569.887 817.207 566.903C818.833 563.919 819.638 560.559 819.543 557.163C819.276 478.411 755.277 411.031 676.344 411.031C652.616 411.011 629.257 416.887 608.369 428.129C587.482 439.37 569.722 455.625 556.691 475.428C556.424 474.736 516.105 411.776 515.678 411.031H418.479L510.825 555.458L420.719 697.143H515.118L556.184 634.131L597.997 697.143H692.424L606.824 562.596C605.406 559.975 604.638 557.052 604.584 554.074C604.581 544.663 606.433 535.344 610.037 526.649C613.64 517.955 618.923 510.054 625.585 503.398C632.246 496.743 640.155 491.464 648.86 487.862C657.565 484.26 666.895 482.406 676.317 482.406H676.344C716.023 482.406 722.637 506.109 731.197 517.241C748.103 539.239 781.863 529.598 781.863 558.282C781.924 561.571 782.846 564.788 784.539 567.611C786.233 570.434 788.637 572.764 791.513 574.37C794.388 575.976 797.635 576.801 800.93 576.763C804.224 576.725 807.451 575.826 810.289 574.154V574.154ZM819.623 577.697C815.009 587.604 804.69 586.698 799.49 594.715C794.796 601.932 802.53 605.687 802.53 605.687C802.53 605.687 811.516 609.842 816.876 597.405C819.649 591.252 820.609 584.408 819.623 577.697V577.697Z" fill="#020617"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M499.651 555.512L416.132 686.623L277.653 462.192L277.333 697.143H180V300H278.426L418.345 535.244L418.479 428.768L499.651 555.512V555.512ZM515.678 402.082C516.318 400.804 515.678 301.305 515.891 300H418.559C418.612 301.571 418.425 400.564 418.479 402.082H515.678V402.082ZM665.917 512.181C654.556 511.963 643.406 515.267 634.003 521.639C624.6 528.011 617.406 537.137 613.411 547.762C620.029 537.871 629.827 530.531 641.187 526.952C652.546 523.374 664.788 523.772 675.89 528.08C686.45 532.368 700.344 539.319 711.357 535.617C706.19 528.388 699.374 522.491 691.472 518.416C683.57 514.34 674.81 512.203 665.917 512.181V512.181ZM756.316 540.438C746.317 536.975 734.983 533.06 726.743 522.301C725.143 520.17 723.65 517.773 722.05 515.243C718.48 508.669 713.651 502.86 707.837 498.145C699.997 492.393 689.704 489.57 676.37 489.57C663.264 489.573 650.454 493.463 639.563 500.745C628.673 508.028 620.193 518.376 615.197 530.477C621.53 521.672 630.067 514.682 639.954 510.206C649.84 505.73 660.73 503.925 671.535 504.971C682.339 506.017 692.679 509.878 701.52 516.168C710.362 522.457 717.395 530.955 721.917 540.811C724.168 544.503 727.558 547.366 731.578 548.97C735.598 550.574 740.031 550.832 744.21 549.706C757.357 546.909 756.476 559.293 776.29 563.501V559.959C776.21 548.081 769.73 545.311 756.29 540.438H756.316ZM810.289 574.154C813.196 572.389 815.582 569.887 817.207 566.903C818.833 563.919 819.638 560.559 819.543 557.163C819.276 478.411 755.277 411.031 676.344 411.031C652.616 411.011 629.257 416.887 608.369 428.129C587.482 439.37 569.722 455.625 556.691 475.428C556.424 474.735 516.105 411.776 515.678 411.031H418.479L510.825 555.458L420.719 697.143H515.118L556.184 634.131L597.997 697.143H692.424L606.824 562.596C605.406 559.975 604.638 557.052 604.584 554.073C604.581 544.663 606.433 535.344 610.037 526.649C613.64 517.954 618.923 510.054 625.585 503.398C632.246 496.743 640.155 491.463 648.86 487.861C657.565 484.259 666.895 482.406 676.317 482.406H676.344C716.023 482.406 722.637 506.108 731.197 517.241C748.103 539.239 781.863 529.598 781.863 558.281C781.924 561.571 782.846 564.788 784.539 567.611C786.233 570.434 788.637 572.764 791.513 574.37C794.388 575.976 797.635 576.801 800.93 576.763C804.224 576.725 807.451 575.826 810.289 574.154V574.154ZM819.623 577.696C815.009 587.604 804.69 586.698 799.49 594.715C794.796 601.932 802.53 605.687 802.53 605.687C802.53 605.687 811.516 609.842 816.876 597.404C819.649 591.252 820.609 584.408 819.623 577.696V577.696Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More