From d5a7fa4785eb5626b7f813c595ec5cd8e038a17e Mon Sep 17 00:00:00 2001 From: Jason Jean Date: Thu, 17 Nov 2022 11:27:04 -0500 Subject: [PATCH] fix(misc): fix run-many for invalid projects --- packages/nx/src/command-line/run-many.ts | 30 +++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/nx/src/command-line/run-many.ts b/packages/nx/src/command-line/run-many.ts index 6523bf08fc05e..a153ef444f460 100644 --- a/packages/nx/src/command-line/run-many.ts +++ b/packages/nx/src/command-line/run-many.ts @@ -9,6 +9,7 @@ import { ProjectGraph, ProjectGraphProjectNode } from '../config/project-graph'; import { createProjectGraphAsync } from '../project-graph/project-graph'; import { TargetDependencyConfig } from '../config/workspace-json-project-json'; import { readNxJson } from '../config/configuration'; +import { output } from '../utils/output'; export async function runMany( args: { [k: string]: any }, @@ -56,6 +57,8 @@ export function projectsToRun( ): ProjectGraphProjectNode[] { const selectedProjects = new Map(); const validProjects = runnableForTarget(projectGraph.nodes, nxArgs.target); + const validProjectNames = Array.from(validProjects.keys()); + const invalidProjects: string[] = []; // --all is default now, if --projects is provided, it'll override the --all if (nxArgs.all && nxArgs.projects.length === 0) { @@ -64,14 +67,18 @@ export function projectsToRun( } } else { for (const nameOrGlob of nxArgs.projects) { - const project = projectGraph.nodes[nameOrGlob]; - - if (project) { - selectedProjects.set(project.name, project); + if (validProjects.has(nameOrGlob)) { + selectedProjects.set(nameOrGlob, projectGraph.nodes[nameOrGlob]); + continue; + } else if (projectGraph.nodes[nameOrGlob]) { + invalidProjects.push(nameOrGlob); continue; } - const matchedProjectNames = minimatch.match(validProjects, nameOrGlob); + const matchedProjectNames = minimatch.match( + validProjectNames, + nameOrGlob + ); if (matchedProjectNames.length === 0) { throw new Error(`No projects matching: ${nameOrGlob}`); @@ -84,6 +91,13 @@ export function projectsToRun( ); }); } + + if (invalidProjects.length > 0) { + output.warn({ + title: `the following do not have configuration for "${nxArgs.target}"`, + bodyLines: invalidProjects.map((name) => `- ${name}`), + }); + } } for (const nameOrGlob of nxArgs.exclude ?? []) { @@ -109,12 +123,12 @@ export function projectsToRun( function runnableForTarget( projects: Record, target: string -): string[] { - const runnable: string[] = []; +): Set { + const runnable = new Set(); for (let projectName in projects) { const project = projects[projectName]; if (projectHasTarget(project, target)) { - runnable.push(projectName); + runnable.add(projectName); } } return runnable;