fix(core): prevent graph output from being truncated (#23446)

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

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

## Current Behavior
--graph stdout and --file stdout aren't documented. When printing graph
to stdout, its possible for some output to get missed.

## Expected Behavior
Existing flags are documented, and `--print` is more discoverable. We
await stdout finishing before exiting the program.

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

Fixes #18689
This commit is contained in:
Craigory Coppola 2024-05-31 18:05:26 -04:00 committed by GitHub
parent 1e7cd7e9e6
commit a308e1dc6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 532 additions and 157 deletions

View File

@ -59,12 +59,30 @@ Run build for only projects with the tag `dotnet`:
nx affected -t=build --exclude='*,!tag:dotnet' nx affected -t=build --exclude='*,!tag:dotnet'
``` ```
Use the currently executing project name in your command.: Use the currently executing project name in your command:
```shell ```shell
nx affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest nx affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx affected -t=build --graph
```
Save the task graph to a file:
```shell
nx affected -t=build --graph=output.json
```
Print the task graph to the console:
```shell
nx affected -t=build --graph=stdout
```
## Options ## Options
### ~~all~~ ### ~~all~~
@ -109,7 +127,7 @@ Change the way Nx is calculating the affected command by providing directly chan
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### head ### head

View File

@ -35,6 +35,12 @@ Generate a static website with project graph into an html file, accompanied by a
nx graph --file=output.html nx graph --file=output.html
``` ```
Print the project graph as JSON to the console:
```shell
nx graph --print
```
Show the graph where every node is either an ancestor or a descendant of todos-feature-main: Show the graph where every node is either an ancestor or a descendant of todos-feature-main:
```shell ```shell
@ -89,7 +95,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Output file (e.g. --file=output.json or --file=dep-graph.html) Output file (e.g. --file=output.json or --file=dep-graph.html).
### files ### files
@ -141,6 +147,12 @@ Type: `number`
Bind the project graph server to a specific port. Bind the project graph server to a specific port.
### print
Type: `boolean`
Print the project graph to stdout in the terminal.
### targets ### targets
Type: `string` Type: `string`

View File

@ -301,7 +301,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
##### help ##### help

View File

@ -71,6 +71,24 @@ Run lint, test, and build targets for all projects. Requires Nx v15.4+:
nx run-many --targets=lint,test,build nx run-many --targets=lint,test,build
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx run-many -t=build --graph
```
Save the task graph to a file:
```shell
nx run-many -t=build --graph=output.json
```
Print the task graph to the console:
```shell
nx run-many -t=build --graph=stdout
```
## Options ## Options
### all ### all
@ -105,7 +123,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### help ### help

View File

@ -1,44 +1,163 @@
--- ---
title: 'run - CLI command' title: 'run - CLI command'
description: 'Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file.' description: 'Run a target for a project
(e.g., nx run myapp:serve:production).
You can also use the infix notation to run a target:
(e.g., nx serve myapp --configuration=production)
You can skip the use of Nx cache by using the --skip-nx-cache option.'
--- ---
# run # run
Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file. Run a target for a project
(e.g., nx run myapp:serve:production).
You can also use the infix notation to run a target:
(e.g., nx serve myapp --configuration=production)
You can skip the use of Nx cache by using the --skip-nx-cache option.
## Usage ## Usage
```shell ```shell
nx run <target> [options] nx run [project][:target][:configuration] [_..]
``` ```
Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpx nx`. Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`.
### Examples ### Examples
Run the `build` target for the `myapp` : Run the target build for the myapp project:
```shell ```shell
nx run myapp:build nx run myapp:build
``` ```
Run the `build` target for the `myapp` project with a `production` configuration: Run the target build for the myapp project, with production configuration:
```shell ```shell
nx run myapp:build:production nx run myapp:build:production
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx run myapp:build --graph
```
Save the task graph to a file:
```shell
nx run myapp:build --graph=output.json
```
Print the task graph to the console:
```shell
nx run myapp:build --graph=stdout
```
Run's a target named build:test for the myapp project. Note the quotes around the target name to prevent "test" from being considered a configuration:
```shell
nx run myapp:"build:test"
```
## Options ## Options
### configuration (-c) ### batch
A named builder configuration, defined in the "configurations" section of the workspace configuration file. The builder uses the named configuration to run the given target. Type: `boolean`
### help Default: `false`
Show help Run task(s) in batches for executors which support batches
### configuration
Type: `string`
This is the configuration to use when performing tasks on projects
### exclude
Type: `string`
Exclude certain projects from being processed
### graph
Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### nxBail
Type: `boolean`
Default: `false`
Stop command execution after the first failed task
### nxIgnoreCycles
Type: `boolean`
Default: `false`
Ignore cycles in the task graph
### output-style
Type: `string`
Choices: [dynamic, static, stream, stream-without-prefixes, compact]
Defines how Nx emits outputs tasks logs
| option | description |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| dynamic | use dynamic output life cycle, previous content is overwritten or modified as new outputs are added, display minimal logs by default, always show errors. This output format is recommended on your local development environments. |
| static | uses static output life cycle, no previous content is rewritten or modified as new outputs are added. This output format is recommened for CI environments. |
| stream | nx by default logs output to an internal output stream, enable this option to stream logs to stdout / stderr |
| stream-without-prefixes | nx prefixes the project name the target is running on, use this option remove the project name prefix from output |
### parallel
Type: `string`
Max number of parallel processes [default is 3]
### project
Type: `string`
Target project
### runner
Type: `string`
This is the name of the tasks runner configured in nx.json
### skipNxCache
Type: `boolean`
Default: `false`
Rerun the tasks even when the results are available in the cache
### verbose
Type: `boolean`
Prints additional information about the commands (e.g., stack traces)
### version ### version
Type: `boolean`
Show version number Show version number

View File

@ -23,7 +23,7 @@ Show all projects in the workspace:
nx show projects nx show projects
``` ```
Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many.: Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many:
```shell ```shell
nx show projects --projects api-* nx show projects --projects api-*
@ -53,19 +53,19 @@ Show affected projects in the workspace, excluding end-to-end projects:
nx show projects --affected --exclude=*-e2e nx show projects --affected --exclude=*-e2e
``` ```
If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON.: If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON:
```shell ```shell
nx show project my-app nx show project my-app
``` ```
Show detailed information about "my-app" in a json format.: Show detailed information about "my-app" in a json format:
```shell ```shell
nx show project my-app --json nx show project my-app --json
``` ```
Show information about "my-app" in a human readable format.: Show information about "my-app" in a human readable format:
```shell ```shell
nx show project my-app --json false nx show project my-app --json false

View File

@ -59,12 +59,30 @@ Run build for only projects with the tag `dotnet`:
nx affected -t=build --exclude='*,!tag:dotnet' nx affected -t=build --exclude='*,!tag:dotnet'
``` ```
Use the currently executing project name in your command.: Use the currently executing project name in your command:
```shell ```shell
nx affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest nx affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx affected -t=build --graph
```
Save the task graph to a file:
```shell
nx affected -t=build --graph=output.json
```
Print the task graph to the console:
```shell
nx affected -t=build --graph=stdout
```
## Options ## Options
### ~~all~~ ### ~~all~~
@ -109,7 +127,7 @@ Change the way Nx is calculating the affected command by providing directly chan
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### head ### head

View File

@ -35,6 +35,12 @@ Generate a static website with project graph into an html file, accompanied by a
nx graph --file=output.html nx graph --file=output.html
``` ```
Print the project graph as JSON to the console:
```shell
nx graph --print
```
Show the graph where every node is either an ancestor or a descendant of todos-feature-main: Show the graph where every node is either an ancestor or a descendant of todos-feature-main:
```shell ```shell
@ -89,7 +95,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Output file (e.g. --file=output.json or --file=dep-graph.html) Output file (e.g. --file=output.json or --file=dep-graph.html).
### files ### files
@ -141,6 +147,12 @@ Type: `number`
Bind the project graph server to a specific port. Bind the project graph server to a specific port.
### print
Type: `boolean`
Print the project graph to stdout in the terminal.
### targets ### targets
Type: `string` Type: `string`

View File

@ -301,7 +301,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
##### help ##### help

View File

@ -71,6 +71,24 @@ Run lint, test, and build targets for all projects. Requires Nx v15.4+:
nx run-many --targets=lint,test,build nx run-many --targets=lint,test,build
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx run-many -t=build --graph
```
Save the task graph to a file:
```shell
nx run-many -t=build --graph=output.json
```
Print the task graph to the console:
```shell
nx run-many -t=build --graph=stdout
```
## Options ## Options
### all ### all
@ -105,7 +123,7 @@ Exclude certain projects from being processed
Type: `string` Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### help ### help

View File

@ -1,44 +1,163 @@
--- ---
title: 'run - CLI command' title: 'run - CLI command'
description: 'Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file.' description: 'Run a target for a project
(e.g., nx run myapp:serve:production).
You can also use the infix notation to run a target:
(e.g., nx serve myapp --configuration=production)
You can skip the use of Nx cache by using the --skip-nx-cache option.'
--- ---
# run # run
Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file. Run a target for a project
(e.g., nx run myapp:serve:production).
You can also use the infix notation to run a target:
(e.g., nx serve myapp --configuration=production)
You can skip the use of Nx cache by using the --skip-nx-cache option.
## Usage ## Usage
```shell ```shell
nx run <target> [options] nx run [project][:target][:configuration] [_..]
``` ```
Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpx nx`. Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`.
### Examples ### Examples
Run the `build` target for the `myapp` : Run the target build for the myapp project:
```shell ```shell
nx run myapp:build nx run myapp:build
``` ```
Run the `build` target for the `myapp` project with a `production` configuration: Run the target build for the myapp project, with production configuration:
```shell ```shell
nx run myapp:build:production nx run myapp:build:production
``` ```
Preview the task graph that Nx would run inside a webview:
```shell
nx run myapp:build --graph
```
Save the task graph to a file:
```shell
nx run myapp:build --graph=output.json
```
Print the task graph to the console:
```shell
nx run myapp:build --graph=stdout
```
Run's a target named build:test for the myapp project. Note the quotes around the target name to prevent "test" from being considered a configuration:
```shell
nx run myapp:"build:test"
```
## Options ## Options
### configuration (-c) ### batch
A named builder configuration, defined in the "configurations" section of the workspace configuration file. The builder uses the named configuration to run the given target. Type: `boolean`
### help Default: `false`
Show help Run task(s) in batches for executors which support batches
### configuration
Type: `string`
This is the configuration to use when performing tasks on projects
### exclude
Type: `string`
Exclude certain projects from being processed
### graph
Type: `string`
Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.
### nxBail
Type: `boolean`
Default: `false`
Stop command execution after the first failed task
### nxIgnoreCycles
Type: `boolean`
Default: `false`
Ignore cycles in the task graph
### output-style
Type: `string`
Choices: [dynamic, static, stream, stream-without-prefixes, compact]
Defines how Nx emits outputs tasks logs
| option | description |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| dynamic | use dynamic output life cycle, previous content is overwritten or modified as new outputs are added, display minimal logs by default, always show errors. This output format is recommended on your local development environments. |
| static | uses static output life cycle, no previous content is rewritten or modified as new outputs are added. This output format is recommened for CI environments. |
| stream | nx by default logs output to an internal output stream, enable this option to stream logs to stdout / stderr |
| stream-without-prefixes | nx prefixes the project name the target is running on, use this option remove the project name prefix from output |
### parallel
Type: `string`
Max number of parallel processes [default is 3]
### project
Type: `string`
Target project
### runner
Type: `string`
This is the name of the tasks runner configured in nx.json
### skipNxCache
Type: `boolean`
Default: `false`
Rerun the tasks even when the results are available in the cache
### verbose
Type: `boolean`
Prints additional information about the commands (e.g., stack traces)
### version ### version
Type: `boolean`
Show version number Show version number

View File

@ -23,7 +23,7 @@ Show all projects in the workspace:
nx show projects nx show projects
``` ```
Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many.: Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many:
```shell ```shell
nx show projects --projects api-* nx show projects --projects api-*
@ -53,19 +53,19 @@ Show affected projects in the workspace, excluding end-to-end projects:
nx show projects --affected --exclude=*-e2e nx show projects --affected --exclude=*-e2e
``` ```
If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON.: If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON:
```shell ```shell
nx show project my-app nx show project my-app
``` ```
Show detailed information about "my-app" in a json format.: Show detailed information about "my-app" in a json format:
```shell ```shell
nx show project my-app --json nx show project my-app --json
``` ```
Show information about "my-app" in a human readable format.: Show information about "my-app" in a human readable format:
```shell ```shell
nx show project my-app --json false nx show project my-app --json false

View File

@ -1,44 +0,0 @@
---
title: 'run - CLI command'
description: 'Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file.'
---
# run
Runs a target defined for your project. Target definitions can be found in the `scripts` property of the project `package.json`, or in the `targets` property of the project `project.json` file.
## Usage
```shell
nx run <target> [options]
```
Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpx nx`.
### Examples
Run the `build` target for the `myapp` :
```shell
nx run myapp:build
```
Run the `build` target for the `myapp` project with a `production` configuration:
```shell
nx run myapp:build:production
```
## Options
### configuration (-c)
A named builder configuration, defined in the "configurations" section of the workspace configuration file. The builder uses the named configuration to run the given target.
### help
Show help
### version
Show version number

View File

@ -2,9 +2,9 @@ import { CommandModule } from 'yargs';
import { handleErrors } from '../../utils/params'; import { handleErrors } from '../../utils/params';
import { import {
withAffectedOptions, withAffectedOptions,
withDepGraphOptions,
withTargetAndConfigurationOption, withTargetAndConfigurationOption,
} from '../yargs-utils/shared-options'; } from '../yargs-utils/shared-options';
import { withGraphOptions } from '../graph/command-object';
const affectedGraphDeprecationMessage = const affectedGraphDeprecationMessage =
'Use `nx graph --affected`, or `nx affected --graph` instead depending on which best suits your use case. The `affected:graph` command has been removed in Nx 19.'; 'Use `nx graph --affected`, or `nx affected --graph` instead depending on which best suits your use case. The `affected:graph` command has been removed in Nx 19.';
@ -18,7 +18,7 @@ export const yargsAffectedGraphCommand: CommandModule = {
command: 'affected:graph', command: 'affected:graph',
describe: false, describe: false,
aliases: ['affected:dep-graph'], aliases: ['affected:dep-graph'],
builder: (yargs) => withAffectedOptions(withDepGraphOptions(yargs)), builder: (yargs) => withAffectedOptions(withGraphOptions(yargs)),
handler: (args) => handler: (args) =>
handleErrors(false, () => { handleErrors(false, () => {
throw new Error(affectedGraphDeprecationMessage); throw new Error(affectedGraphDeprecationMessage);

View File

@ -39,7 +39,22 @@ export const examples: Record<string, Example[]> = {
}, },
{ {
command: 'affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest', command: 'affected -t build --tag=$NX_TASK_TARGET_PROJECT:latest',
description: 'Use the currently executing project name in your command.', description: 'Use the currently executing project name in your command',
},
{
command: 'affected -t=build --graph',
description: 'Preview the task graph that Nx would run inside a webview',
},
{
command: 'affected -t=build --graph=output.json',
description: 'Save the task graph to a file',
},
{
command: 'affected -t=build --graph=stdout',
description: 'Print the task graph to the console',
}, },
], ],
'affected:test': [ 'affected:test': [
@ -142,6 +157,12 @@ export const examples: Record<string, Example[]> = {
description: description:
'Generate a static website with project graph into an html file, accompanied by an asset folder called static', 'Generate a static website with project graph into an html file, accompanied by an asset folder called static',
}, },
{
command: 'graph --print',
description: 'Print the project graph as JSON to the console',
},
{ {
command: 'graph --focus=todos-feature-main', command: 'graph --focus=todos-feature-main',
description: description:
@ -217,6 +238,54 @@ export const examples: Record<string, Example[]> = {
description: description:
'Run lint, test, and build targets for all projects. Requires Nx v15.4+', 'Run lint, test, and build targets for all projects. Requires Nx v15.4+',
}, },
{
command: 'run-many -t=build --graph',
description: 'Preview the task graph that Nx would run inside a webview',
},
{
command: 'run-many -t=build --graph=output.json',
description: 'Save the task graph to a file',
},
{
command: 'run-many -t=build --graph=stdout',
description: 'Print the task graph to the console',
},
],
run: [
{
command: 'run myapp:build',
description: 'Run the target build for the myapp project',
},
{
command: 'run myapp:build:production',
description:
'Run the target build for the myapp project, with production configuration',
},
{
command: 'run myapp:build --graph',
description: 'Preview the task graph that Nx would run inside a webview',
},
{
command: 'run myapp:build --graph=output.json',
description: 'Save the task graph to a file',
},
{
command: 'run myapp:build --graph=stdout',
description: 'Print the task graph to the console',
},
{
command: 'run myapp:"build:test"',
description:
'Run\'s a target named build:test for the myapp project. Note the quotes around the target name to prevent "test" from being considered a configuration',
},
], ],
migrate: [ migrate: [
{ {
@ -276,7 +345,7 @@ export const examples: Record<string, Example[]> = {
{ {
command: 'show projects --projects api-*', command: 'show projects --projects api-*',
description: description:
'Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many.', 'Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many',
}, },
{ {
@ -303,18 +372,17 @@ export const examples: Record<string, Example[]> = {
{ {
command: 'show project my-app', command: 'show project my-app',
description: description:
'If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON.', 'If in an interactive terminal, opens the project detail view. If not in an interactive terminal, defaults to JSON',
}, },
{ {
command: 'show project my-app --json', command: 'show project my-app --json',
description: 'Show detailed information about "my-app" in a json format.', description: 'Show detailed information about "my-app" in a json format',
}, },
{ {
command: 'show project my-app --json false', command: 'show project my-app --json false',
description: description: 'Show information about "my-app" in a human readable format',
'Show information about "my-app" in a human readable format.',
}, },
{ {

View File

@ -1,18 +1,18 @@
import { CommandModule } from 'yargs'; import { Argv, CommandModule } from 'yargs';
import { linkToNxDevAndExamples } from '../yargs-utils/documentation'; import { linkToNxDevAndExamples } from '../yargs-utils/documentation';
import { import {
parseCSV,
withAffectedOptions, withAffectedOptions,
withDepGraphOptions,
withVerbose, withVerbose,
} from '../yargs-utils/shared-options'; } from '../yargs-utils/shared-options';
export const yargsDepGraphCommand: CommandModule = { export const yargsGraphCommand: CommandModule = {
command: 'graph', command: 'graph',
describe: 'Graph dependencies within workspace', describe: 'Graph dependencies within workspace',
aliases: ['dep-graph'], aliases: ['dep-graph'],
builder: (yargs) => builder: (yargs) =>
linkToNxDevAndExamples( linkToNxDevAndExamples(
withVerbose(withAffectedOptions(withDepGraphOptions(yargs))), withVerbose(withAffectedOptions(withGraphOptions(yargs))),
'dep-graph' 'dep-graph'
) )
.option('affected', { .option('affected', {
@ -27,3 +27,70 @@ export const yargsDepGraphCommand: CommandModule = {
handler: async (args) => handler: async (args) =>
await (await import('./graph')).generateGraph(args as any, []), await (await import('./graph')).generateGraph(args as any, []),
}; };
export function withGraphOptions(yargs: Argv) {
return yargs
.option('file', {
describe:
'Output file (e.g. --file=output.json or --file=dep-graph.html).',
type: 'string',
})
.option('print', {
describe: 'Print the project graph to stdout in the terminal.',
type: 'boolean',
})
.option('view', {
describe: 'Choose whether to view the projects or task graph',
type: 'string',
default: 'projects',
choices: ['projects', 'tasks'],
})
.option('targets', {
describe: 'The target to show tasks for in the task graph',
type: 'string',
coerce: parseCSV,
})
.option('focus', {
describe:
'Use to show the project graph for a particular project and every node that is either an ancestor or a descendant.',
type: 'string',
})
.option('exclude', {
describe:
'List of projects delimited by commas to exclude from the project graph.',
type: 'string',
coerce: parseCSV,
})
.option('groupByFolder', {
describe: 'Group projects by folder in the project graph',
type: 'boolean',
})
.option('host', {
describe: 'Bind the project graph server to a specific ip address.',
type: 'string',
})
.option('port', {
describe: 'Bind the project graph server to a specific port.',
type: 'number',
})
.option('watch', {
describe: 'Watch for changes to project graph and update in-browser',
type: 'boolean',
default: true,
})
.option('open', {
describe: 'Open the project graph in the browser.',
type: 'boolean',
default: true,
});
}

View File

@ -349,7 +349,7 @@ export async function generateGraph(
splitArgsIntoNxArgsAndOverrides( splitArgsIntoNxArgsAndOverrides(
args, args,
'affected', 'affected',
{ printWarnings: true }, { printWarnings: args.file !== 'stdout' },
readNxJson() readNxJson()
).nxArgs, ).nxArgs,
rawGraph rawGraph
@ -401,6 +401,7 @@ export async function generateGraph(
2 2
) )
); );
await output.drain();
process.exit(0); process.exit(0);
} }

View File

@ -13,7 +13,7 @@ import {
yargsViewLogsCommand, yargsViewLogsCommand,
} from './connect/command-object'; } from './connect/command-object';
import { yargsDaemonCommand } from './daemon/command-object'; import { yargsDaemonCommand } from './daemon/command-object';
import { yargsDepGraphCommand } from './graph/command-object'; import { yargsGraphCommand } from './graph/command-object';
import { yargsExecCommand } from './exec/command-object'; import { yargsExecCommand } from './exec/command-object';
import { import {
yargsFormatCheckCommand, yargsFormatCheckCommand,
@ -68,7 +68,7 @@ export const commandsObject = yargs
.command(yargsAffectedGraphCommand) .command(yargsAffectedGraphCommand)
.command(yargsConnectCommand) .command(yargsConnectCommand)
.command(yargsDaemonCommand) .command(yargsDaemonCommand)
.command(yargsDepGraphCommand) .command(yargsGraphCommand)
.command(yargsExecCommand) .command(yargsExecCommand)
.command(yargsFormatCheckCommand) .command(yargsFormatCheckCommand)
.command(yargsFormatWriteCommand) .command(yargsFormatWriteCommand)

View File

@ -52,7 +52,7 @@ export function withRunOptions<T>(yargs: Argv<T>): Argv<T & RunOptions> {
.option('graph', { .option('graph', {
type: 'string', type: 'string',
describe: describe:
'Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser.', 'Show the task graph of the command. Pass a file path to save the graph data instead of viewing it in the browser. Pass "stdout" to print the results to the terminal.',
coerce: (value) => coerce: (value) =>
// when the type of an opt is "string", passing `--opt` comes through as having an empty string value. // when the type of an opt is "string", passing `--opt` comes through as having an empty string value.
// this coercion allows `--graph` to be passed through as a boolean directly, and also normalizes the // this coercion allows `--graph` to be passed through as a boolean directly, and also normalizes the
@ -273,60 +273,6 @@ export function withOutputStyleOption(
}); });
} }
export function withDepGraphOptions(yargs: Argv) {
return yargs
.option('file', {
describe:
'Output file (e.g. --file=output.json or --file=dep-graph.html)',
type: 'string',
})
.option('view', {
describe: 'Choose whether to view the projects or task graph',
type: 'string',
default: 'projects',
choices: ['projects', 'tasks'],
})
.option('targets', {
describe: 'The target to show tasks for in the task graph',
type: 'string',
coerce: parseCSV,
})
.option('focus', {
describe:
'Use to show the project graph for a particular project and every node that is either an ancestor or a descendant.',
type: 'string',
})
.option('exclude', {
describe:
'List of projects delimited by commas to exclude from the project graph.',
type: 'string',
coerce: parseCSV,
})
.option('groupByFolder', {
describe: 'Group projects by folder in the project graph',
type: 'boolean',
})
.option('host', {
describe: 'Bind the project graph server to a specific ip address.',
type: 'string',
})
.option('port', {
describe: 'Bind the project graph server to a specific port.',
type: 'number',
})
.option('watch', {
describe: 'Watch for changes to project graph and update in-browser',
type: 'boolean',
default: true,
})
.option('open', {
describe: 'Open the project graph in the browser.',
type: 'boolean',
default: true,
});
}
export function withRunOneOptions(yargs: Argv) { export function withRunOneOptions(yargs: Argv) {
const executorShouldShowHelp = !( const executorShouldShowHelp = !(
process.argv[2] === 'run' && process.argv[3] === '--help' process.argv[2] === 'run' && process.argv[3] === '--help'

View File

@ -17,7 +17,10 @@ import {
const importFresh = require('import-fresh'); const importFresh = require('import-fresh');
const sharedCommands = ['generate', 'run', 'exec']; // Docs for these commands are inside docs/shared/cli - they are not dynamically generated.
const sharedCommands = ['generate', 'exec'];
// These commands are hidden from the documentation.
const hiddenCommands = ['$0']; const hiddenCommands = ['$0'];
export async function generateCliDocumentation( export async function generateCliDocumentation(