From 7ce487e492d01e1903410c4ddad6908773161e5f Mon Sep 17 00:00:00 2001 From: Victor Savkin Date: Thu, 2 Jun 2022 09:30:48 -0400 Subject: [PATCH] feat(core): ability to pass extra target deps when invoking commands --- packages/nx/src/command-line/affected.ts | 10 +++++-- packages/nx/src/command-line/run-many.ts | 19 ++++++++++-- packages/nx/src/command-line/run-one.ts | 14 +++++++-- packages/nx/src/tasks-runner/run-command.ts | 32 +++++++++++++++++++-- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/packages/nx/src/command-line/affected.ts b/packages/nx/src/command-line/affected.ts index 75e6e53f13485..c54de49ab4225 100644 --- a/packages/nx/src/command-line/affected.ts +++ b/packages/nx/src/command-line/affected.ts @@ -17,10 +17,15 @@ import { ProjectGraph, ProjectGraphProjectNode } from '../config/project-graph'; import { projectHasTarget } from '../utils/project-graph-utils'; import { filterAffected } from '../project-graph/affected/affected-project-graph'; import { readEnvironment } from './read-environment'; +import { TargetDependencyConfig } from 'nx/src/config/workspace-json-project-json'; export async function affected( command: 'apps' | 'libs' | 'graph' | 'print-affected' | 'affected', - parsedArgs: yargs.Arguments & RawNxArgs + parsedArgs: yargs.Arguments & RawNxArgs, + extraTargetDependencies: Record< + string, + (TargetDependencyConfig | string)[] + > = {} ): Promise { performance.mark('command-execution-begins'); const env = readEnvironment(); @@ -116,7 +121,8 @@ export async function affected( env, nxArgs, overrides, - null + null, + extraTargetDependencies ); break; } diff --git a/packages/nx/src/command-line/run-many.ts b/packages/nx/src/command-line/run-many.ts index 56a0f7a0b537a..670f4961b3fa8 100644 --- a/packages/nx/src/command-line/run-many.ts +++ b/packages/nx/src/command-line/run-many.ts @@ -9,8 +9,15 @@ import { performance } from 'perf_hooks'; import { ProjectGraph, ProjectGraphProjectNode } from '../config/project-graph'; import { createProjectGraphAsync } from '../project-graph/project-graph'; import { readEnvironment } from './read-environment'; +import { TargetDependencyConfig } from '../config/workspace-json-project-json'; -export async function runMany(parsedArgs: yargs.Arguments & RawNxArgs) { +export async function runMany( + parsedArgs: yargs.Arguments & RawNxArgs, + extraTargetDependencies: Record< + string, + (TargetDependencyConfig | string)[] + > = {} +) { performance.mark('command-execution-begins'); const env = readEnvironment(); const { nxArgs, overrides } = splitArgsIntoNxArgsAndOverrides( @@ -25,7 +32,15 @@ export async function runMany(parsedArgs: yargs.Arguments & RawNxArgs) { const projectGraph = await createProjectGraphAsync(); const projects = projectsToRun(nxArgs, projectGraph); - await runCommand(projects, projectGraph, env, nxArgs, overrides, null); + await runCommand( + projects, + projectGraph, + env, + nxArgs, + overrides, + null, + extraTargetDependencies + ); } function projectsToRun( diff --git a/packages/nx/src/command-line/run-one.ts b/packages/nx/src/command-line/run-one.ts index 86a90d92351c8..d609d5131b6f6 100644 --- a/packages/nx/src/command-line/run-one.ts +++ b/packages/nx/src/command-line/run-one.ts @@ -9,11 +9,18 @@ import { workspaceRoot } from '../utils/workspace-root'; import { splitTarget } from '../utils/split-target'; import { output } from '../utils/output'; import { readEnvironment } from './read-environment'; -import { ProjectsConfigurations } from '../config/workspace-json-project-json'; +import { + ProjectsConfigurations, + TargetDependencyConfig, +} from '../config/workspace-json-project-json'; export async function runOne( cwd: string, - args: { [k: string]: any } + args: { [k: string]: any }, + extraTargetDependencies: Record< + string, + (TargetDependencyConfig | string)[] + > = {} ): Promise { performance.mark('command-execution-begins'); performance.measure('code-loading', 'init-local', 'command-execution-begins'); @@ -51,7 +58,8 @@ export async function runOne( env, nxArgs, overrides, - opts.project + opts.project, + extraTargetDependencies ); } diff --git a/packages/nx/src/tasks-runner/run-command.ts b/packages/nx/src/tasks-runner/run-command.ts index 464b4fc88ac24..ef7940b3943f7 100644 --- a/packages/nx/src/tasks-runner/run-command.ts +++ b/packages/nx/src/tasks-runner/run-command.ts @@ -18,6 +18,7 @@ import { NxJsonConfiguration } from '../config/nx-json'; import { Task } from '../config/task-graph'; import { createTaskGraph } from './create-task-graph'; import { findCycle, makeAcyclic } from './task-graph-utils'; +import { TargetDependencyConfig } from 'nx/src/config/workspace-json-project-json'; async function getTerminalOutputLifeCycle( initiatingProject: string, @@ -79,11 +80,15 @@ export async function runCommand( { nxJson }: { nxJson: NxJsonConfiguration }, nxArgs: NxArgs, overrides: any, - initiatingProject: string | null + initiatingProject: string | null, + extraTargetDependencies: Record ) { const { tasksRunner, runnerOptions } = getRunner(nxArgs, nxJson); - const defaultDependencyConfigs = nxJson.targetDependencies; + const defaultDependencyConfigs = mergeTargetDependencies( + nxJson.targetDependencies, + extraTargetDependencies + ); const projectNames = projectsToRun.map((t) => t.name); const taskGraph = createTaskGraph( projectGraph, @@ -174,6 +179,29 @@ export async function runCommand( process.exit(anyFailures ? 1 : 0); } +function mergeTargetDependencies( + a: Record | null, + b: Record | null +): Record { + const res = {}; + if (a) { + Object.keys(a).forEach((k) => { + res[k] = a[k]; + }); + } + if (b) { + Object.keys(b).forEach((k) => { + if (res[k]) { + res[k] = [...res[k], b[k]]; + } else { + res[k] = b[k]; + } + }); + + return res; + } +} + async function anyFailuresInPromise( promise: Promise<{ [id: string]: TaskStatus }> ) {