From ebd68953900d3ee3a03aabdbb7fa076245784114 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:33:32 +0000 Subject: [PATCH 1/9] Initial plan From c403c3cf01037f5ff2eb2b26b1cd84b3f7ad5f2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:50:22 +0000 Subject: [PATCH 2/9] Add validation for parameterNamesToIgnore in rush-project.json Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --- .../src/api/RushProjectConfiguration.ts | 23 +++++++++++++++++++ .../api/test/RushProjectConfiguration.test.ts | 9 +++++++- .../RushProjectConfiguration.test.ts.snap | 8 +++++++ .../test-project-e/config/rush-project.json | 9 ++++++++ .../a/config/rush-project.json | 9 ++++++++ .../test/invalidParameterRepo/a/package.json | 4 ++++ .../common/config/rush/command-line.json | 12 ++++++++++ .../logic/test/invalidParameterRepo/rush.json | 10 ++++++++ 8 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json create mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json create mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json create mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json create mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json diff --git a/libraries/rush-lib/src/api/RushProjectConfiguration.ts b/libraries/rush-lib/src/api/RushProjectConfiguration.ts index 6ee20c8e91a..ffe80620e7a 100644 --- a/libraries/rush-lib/src/api/RushProjectConfiguration.ts +++ b/libraries/rush-lib/src/api/RushProjectConfiguration.ts @@ -341,6 +341,29 @@ export class RushProjectConfiguration { } } } + + // Validate that parameter names to ignore actually exist for this operation + if (operationSettings.parameterNamesToIgnore) { + // Build a set of valid parameter names for this phase + const validParameterNames: Set = new Set(); + for (const parameter of phase.associatedParameters) { + validParameterNames.add(parameter.longName); + } + + // Check each parameter name to ignore + for (const parameterName of operationSettings.parameterNamesToIgnore) { + if (!validParameterNames.has(parameterName)) { + terminal.writeErrorLine( + `The project "${project.packageName}" has a ` + + `"${RUSH_PROJECT_CONFIGURATION_FILE.projectRelativeFilePath}" configuration that specifies ` + + `"${parameterName}" in "parameterNamesToIgnore" for operation "${operationName}", ` + + `but this parameter is not associated with the operation. ` + + `Valid parameters for this operation are: ${Array.from(validParameterNames).sort().join(', ') || '(none)'}.` + ); + hasErrors = true; + } + } + } } } diff --git a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts index e4bbc4971fd..acc583d643b 100644 --- a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts @@ -57,7 +57,7 @@ function validateConfiguration(rushProjectConfiguration: RushProjectConfiguratio try { rushProjectConfiguration.validatePhaseConfiguration( Array.from(rushProjectConfiguration.operationSettingsByOperationName.keys()).map( - (phaseName) => ({ name: phaseName }) as IPhase + (phaseName) => ({ name: phaseName, associatedParameters: new Set() }) as IPhase ), terminal ); @@ -100,6 +100,13 @@ describe(RushProjectConfiguration.name, () => { expect(() => validateConfiguration(rushProjectConfiguration)).toThrowError(); }); + + it('validates that parameters in parameterNamesToIgnore exist for the operation', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-e'); + + expect(() => validateConfiguration(rushProjectConfiguration)).toThrowError(); + }); }); describe(RushProjectConfiguration.prototype.getCacheDisabledReason.name, () => { diff --git a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap index a5ff1832598..ed241edaa1a 100644 --- a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap +++ b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap @@ -71,3 +71,11 @@ exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush- exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush-project.json config that extends another config file: validation: terminal warning 1`] = `""`; exports[`RushProjectConfiguration operationSettingsByOperationName throws an error when loading a rush-project.json config that lists an operation twice 1`] = `"The operation \\"_phase:a\\" occurs multiple times in the \\"operationSettings\\" array in \\"/config/rush-project.json\\"."`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal error 1`] = `"The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies \\"--invalid-parameter\\" in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\", but this parameter is not associated with the operation. Valid parameters for this operation are: (none).[n]The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies \\"--another-invalid\\" in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\", but this parameter is not associated with the operation. Valid parameters for this operation are: (none).[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal warning 1`] = `""`; diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json new file mode 100644 index 00000000000..41d73633d8e --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--invalid-parameter", "--another-invalid"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json new file mode 100644 index 00000000000..cc07b64af7d --- /dev/null +++ b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", + "operationSettings": [ + { + "operationName": "build", + "parameterNamesToIgnore": ["--invalid-parameter", "--production"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json new file mode 100644 index 00000000000..9113c2528ed --- /dev/null +++ b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "version": "1.0.0" +} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json new file mode 100644 index 00000000000..fc66949f7d9 --- /dev/null +++ b/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", + "commands": [], + "parameters": [ + { + "longName": "--production", + "description": "A production flag", + "parameterKind": "flag", + "associatedCommands": ["build"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json new file mode 100644 index 00000000000..98a496d9c0a --- /dev/null +++ b/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json @@ -0,0 +1,10 @@ +{ + "rushVersion": "5.162.0", + "pnpmVersion": "9.12.1", + "projects": [ + { + "packageName": "a", + "projectFolder": "a" + } + ] +} From 41a2a298db3fc6c8e5af49ee34be0db81c846ef7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:52:42 +0000 Subject: [PATCH 3/9] Remove unused test repository --- .../invalidParameterRepo/a/config/rush-project.json | 9 --------- .../logic/test/invalidParameterRepo/a/package.json | 4 ---- .../common/config/rush/command-line.json | 12 ------------ .../src/logic/test/invalidParameterRepo/rush.json | 10 ---------- 4 files changed, 35 deletions(-) delete mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json delete mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json delete mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json delete mode 100644 libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json deleted file mode 100644 index cc07b64af7d..00000000000 --- a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/config/rush-project.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", - "operationSettings": [ - { - "operationName": "build", - "parameterNamesToIgnore": ["--invalid-parameter", "--production"] - } - ] -} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json deleted file mode 100644 index 9113c2528ed..00000000000 --- a/libraries/rush-lib/src/logic/test/invalidParameterRepo/a/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "a", - "version": "1.0.0" -} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json deleted file mode 100644 index fc66949f7d9..00000000000 --- a/libraries/rush-lib/src/logic/test/invalidParameterRepo/common/config/rush/command-line.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", - "commands": [], - "parameters": [ - { - "longName": "--production", - "description": "A production flag", - "parameterKind": "flag", - "associatedCommands": ["build"] - } - ] -} diff --git a/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json b/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json deleted file mode 100644 index 98a496d9c0a..00000000000 --- a/libraries/rush-lib/src/logic/test/invalidParameterRepo/rush.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "rushVersion": "5.162.0", - "pnpmVersion": "9.12.1", - "projects": [ - { - "packageName": "a", - "projectFolder": "a" - } - ] -} From 918f35b716af6d5023145053ba7f91b01fbaeff4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 23:14:38 +0000 Subject: [PATCH 4/9] Address PR feedback: combine error messages and add malformed parameter test Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --- .../src/api/RushProjectConfiguration.ts | 24 ++++++++++++------- .../RushProjectConfiguration.test.ts.snap | 2 +- .../test-project-e/config/rush-project.json | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/libraries/rush-lib/src/api/RushProjectConfiguration.ts b/libraries/rush-lib/src/api/RushProjectConfiguration.ts index ffe80620e7a..7dd28c3c789 100644 --- a/libraries/rush-lib/src/api/RushProjectConfiguration.ts +++ b/libraries/rush-lib/src/api/RushProjectConfiguration.ts @@ -350,19 +350,25 @@ export class RushProjectConfiguration { validParameterNames.add(parameter.longName); } - // Check each parameter name to ignore + // Collect all invalid parameter names + const invalidParameterNames: string[] = []; for (const parameterName of operationSettings.parameterNamesToIgnore) { if (!validParameterNames.has(parameterName)) { - terminal.writeErrorLine( - `The project "${project.packageName}" has a ` + - `"${RUSH_PROJECT_CONFIGURATION_FILE.projectRelativeFilePath}" configuration that specifies ` + - `"${parameterName}" in "parameterNamesToIgnore" for operation "${operationName}", ` + - `but this parameter is not associated with the operation. ` + - `Valid parameters for this operation are: ${Array.from(validParameterNames).sort().join(', ') || '(none)'}.` - ); - hasErrors = true; + invalidParameterNames.push(parameterName); } } + + // Report all invalid parameters in a single message + if (invalidParameterNames.length > 0) { + terminal.writeErrorLine( + `The project "${project.packageName}" has a ` + + `"${RUSH_PROJECT_CONFIGURATION_FILE.projectRelativeFilePath}" configuration that specifies ` + + `invalid parameter(s) in "parameterNamesToIgnore" for operation "${operationName}": ` + + `${invalidParameterNames.join(', ')}. ` + + `Valid parameters for this operation are: ${Array.from(validParameterNames).sort().join(', ') || '(none)'}.` + ); + hasErrors = true; + } } } } diff --git a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap index ed241edaa1a..f982c23cc22 100644 --- a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap +++ b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap @@ -72,7 +72,7 @@ exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush- exports[`RushProjectConfiguration operationSettingsByOperationName throws an error when loading a rush-project.json config that lists an operation twice 1`] = `"The operation \\"_phase:a\\" occurs multiple times in the \\"operationSettings\\" array in \\"/config/rush-project.json\\"."`; -exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal error 1`] = `"The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies \\"--invalid-parameter\\" in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\", but this parameter is not associated with the operation. Valid parameters for this operation are: (none).[n]The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies \\"--another-invalid\\" in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\", but this parameter is not associated with the operation. Valid parameters for this operation are: (none).[n]"`; +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal error 1`] = `"The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --invalid-parameter, --another-invalid, -malformed-parameter. Valid parameters for this operation are: (none).[n]"`; exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal output 1`] = `""`; diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json index 41d73633d8e..0dfe8b808e0 100644 --- a/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json @@ -3,7 +3,7 @@ { "operationName": "_phase:build", "outputFolderNames": ["lib"], - "parameterNamesToIgnore": ["--invalid-parameter", "--another-invalid"] + "parameterNamesToIgnore": ["--invalid-parameter", "--another-invalid", "-malformed-parameter"] } ] } From e71cd0e43b7dab778b412f8978f333495d57dd10 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 23:28:49 +0000 Subject: [PATCH 5/9] Add changelog entry for rush-lib Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --- ...te-parameter-names-to-ignore_2025-11-13-23-26.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json diff --git a/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json b/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json new file mode 100644 index 00000000000..e1ad61a7af9 --- /dev/null +++ b/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/rush-lib" + } + ], + "packageName": "@microsoft/rush-lib", + "email": "198982749+Copilot@users.noreply.github.com" +} From 380e1ec5b4be6a9351c98489e1abd9faa2c381e9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 23:42:39 +0000 Subject: [PATCH 6/9] Add tests for parameter validation with valid parameters Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --- .../api/test/RushProjectConfiguration.test.ts | 50 +++++++++++++++++++ .../RushProjectConfiguration.test.ts.snap | 16 ++++++ .../test-project-f/config/rush-project.json | 9 ++++ .../test-project-g/config/rush-project.json | 9 ++++ 4 files changed, 84 insertions(+) create mode 100644 libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json create mode 100644 libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json diff --git a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts index acc583d643b..8a74143361f 100644 --- a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts @@ -2,6 +2,7 @@ // See LICENSE in the project root for license information. import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; +import type { CommandLineParameter } from '@rushstack/ts-command-line'; import type { IPhase } from '../CommandLineConfiguration'; import type { RushConfigurationProject } from '../RushConfigurationProject'; @@ -70,6 +71,35 @@ function validateConfiguration(rushProjectConfiguration: RushProjectConfiguratio } } +function validateConfigurationWithParameters( + rushProjectConfiguration: RushProjectConfiguration | undefined, + parameterNames: string[] +): void { + const terminalProvider: StringBufferTerminalProvider = new StringBufferTerminalProvider(); + const terminal: Terminal = new Terminal(terminalProvider); + + if (rushProjectConfiguration) { + try { + // Create mock parameters with the specified names + const mockParameters = new Set( + parameterNames.map((name) => ({ longName: name }) as CommandLineParameter) + ); + + rushProjectConfiguration.validatePhaseConfiguration( + Array.from(rushProjectConfiguration.operationSettingsByOperationName.keys()).map( + (phaseName) => ({ name: phaseName, associatedParameters: mockParameters }) as IPhase + ), + terminal + ); + } finally { + expect(terminalProvider.getOutput()).toMatchSnapshot('validation: terminal output'); + expect(terminalProvider.getErrorOutput()).toMatchSnapshot('validation: terminal error'); + expect(terminalProvider.getWarningOutput()).toMatchSnapshot('validation: terminal warning'); + expect(terminalProvider.getVerboseOutput()).toMatchSnapshot('validation: terminal verbose'); + } + } +} + describe(RushProjectConfiguration.name, () => { describe('operationSettingsByOperationName', () => { it('loads a rush-project.json config that extends another config file', async () => { @@ -107,6 +137,26 @@ describe(RushProjectConfiguration.name, () => { expect(() => validateConfiguration(rushProjectConfiguration)).toThrowError(); }); + + it('validates nonexistent parameters when operation has valid parameters', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-f'); + + // Provide some valid parameters for the operation + expect(() => + validateConfigurationWithParameters(rushProjectConfiguration, ['--production', '--verbose']) + ).toThrowError(); + }); + + it('validates mix of existent and nonexistent parameters', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-g'); + + // Provide some valid parameters, test-project-g references both valid and invalid ones + expect(() => + validateConfigurationWithParameters(rushProjectConfiguration, ['--production', '--verbose']) + ).toThrowError(); + }); }); describe(RushProjectConfiguration.prototype.getCacheDisabledReason.name, () => { diff --git a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap index f982c23cc22..2ebe9d5908a 100644 --- a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap +++ b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap @@ -72,6 +72,22 @@ exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush- exports[`RushProjectConfiguration operationSettingsByOperationName throws an error when loading a rush-project.json config that lists an operation twice 1`] = `"The operation \\"_phase:a\\" occurs multiple times in the \\"operationSettings\\" array in \\"/config/rush-project.json\\"."`; +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal error 1`] = `"The project \\"test-project-g\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --nonexistent-param. Valid parameters for this operation are: --production, --verbose.[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal warning 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal error 1`] = `"The project \\"test-project-f\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --nonexistent-param, --another-nonexistent. Valid parameters for this operation are: --production, --verbose.[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal warning 1`] = `""`; + exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal error 1`] = `"The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --invalid-parameter, --another-invalid, -malformed-parameter. Valid parameters for this operation are: (none).[n]"`; exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal output 1`] = `""`; diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json new file mode 100644 index 00000000000..fe9cc4909ae --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--nonexistent-param", "--another-nonexistent"] + } + ] +} diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json new file mode 100644 index 00000000000..ab34f9ea349 --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--production", "--nonexistent-param", "--verbose"] + } + ] +} From 323c54a82080bcd292aecde37697def4abaf93be Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 17 Nov 2025 14:14:51 -0800 Subject: [PATCH 7/9] Update libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts Co-authored-by: David Michon --- .../rush-lib/src/api/test/RushProjectConfiguration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts index 8a74143361f..a1352f49fa1 100644 --- a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts @@ -86,7 +86,7 @@ function validateConfigurationWithParameters( ); rushProjectConfiguration.validatePhaseConfiguration( - Array.from(rushProjectConfiguration.operationSettingsByOperationName.keys()).map( + Array.from(rushProjectConfiguration.operationSettingsByOperationName.keys(), (phaseName) => ({ name: phaseName, associatedParameters: mockParameters }) as IPhase ), terminal From a09a23cba4ee5b8efcac8302217dcfe7b35140a9 Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 17 Nov 2025 14:19:13 -0800 Subject: [PATCH 8/9] Update common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json --- ...lot-validate-parameter-names-to-ignore_2025-11-13-23-26.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json b/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json index e1ad61a7af9..eb970183340 100644 --- a/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json +++ b/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json @@ -3,7 +3,7 @@ { "comment": "", "type": "none", - "packageName": "@microsoft/rush-lib" + "packageName": "@microsoft/rush" } ], "packageName": "@microsoft/rush-lib", From e4eb97fcce90156e19fe38586b49e1d106be4b3a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 17 Nov 2025 22:20:44 +0000 Subject: [PATCH 9/9] Fix changelog entry to use @microsoft/rush package name Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --- ...lot-validate-parameter-names-to-ignore_2025-11-13-23-26.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename common/changes/@microsoft/{rush-lib => rush}/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json (81%) diff --git a/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json b/common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json similarity index 81% rename from common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json rename to common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json index eb970183340..68f87a1f804 100644 --- a/common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json +++ b/common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json @@ -6,6 +6,6 @@ "packageName": "@microsoft/rush" } ], - "packageName": "@microsoft/rush-lib", + "packageName": "@microsoft/rush", "email": "198982749+Copilot@users.noreply.github.com" }