-
Notifications
You must be signed in to change notification settings - Fork 653
[rush] Add project-level parameter ignoring to prevent unnecessary cache invalidation #5433
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[rush] Add project-level parameter ignoring to prevent unnecessary cache invalidation #5433
Conversation
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/test/parameterIgnoringRepo/common/config/rush/command-line.json
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Outdated
Show resolved
Hide resolved
|
@copilot address feedback |
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
dmichon-msft
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot Follow the provided guidance for how to properly unit test the ignoring of command line parameters.
libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Outdated
Show resolved
Hide resolved
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Outdated
Show resolved
Hide resolved
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Show resolved
Hide resolved
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Outdated
Show resolved
Hide resolved
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts
Outdated
Show resolved
Hide resolved
Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
|
@copilot Run |
Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com>
dmichon-msft
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just a minor touchup to the change file remaining
...n/changes/@microsoft/rush/copilot-add-project-level-parameter-ignoring_2025-11-13-00-17.json
Outdated
Show resolved
Hide resolved
D4N14L
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This took a lot more wiring in than I would have thought... maybe an argument for discussing changes here, but certainly not for this PR.
…ion-test (#5456) * [rush-lib] fix bridge package command (#5411) * rush change * fix: enable prerelease version matching in bridge-package command * Update changelogs [skip ci] * Bump versions [skip ci] * Introduce an ESLint rule to coalesce imports. (#5414) * Use the no-duplicate-imports rule. * fixup! Use the no-duplicate-imports rule. * fixup! Use the no-duplicate-imports rule. * Fix duplicate import issues. * Use the import/no-duplicates rule. * Manual fixes. * [eslint-plugin] Document the @rushstack/typedef-var rule and clarify scope (#5410) * docs(eslint-plugin): document the @rushstack/typedef-var rule * chore(changefile): add changefile for typedef-var documentation * docs: remove for...of and for...in exception from typedef-var rule documentation * Update changelogs [skip ci] * Bump versions [skip ci] * Bump decpouled local dependencies. (#5415) * [heft-rspack-plugin] Initial implementation of a Rspack Heft plugin. (#4015) * Update changelogs [skip ci] * Bump versions [skip ci] * Update changelogs [skip ci] * Bump versions [skip ci] * [rush] Fork npm-check into rush-lib (#5416) * Fork npm-check * rush update * Update test scripts in package json * rush update * Fix test file * Add and update readmes * Update readme, update config * Update readme --------- Co-authored-by: cmalonzo <cmalonzo@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * Update changelogs [skip ci] * Bump versions [skip ci] * Fix an issue with the return type of Executable.waitForExitAsync. (#5417) * Clean up the `repo-scripts bump-decoupled-local-dependencies` action. (#5418) * Move files around in repo-toolbox. * Don't bump allowed alternative dependencies. * Include @rushstack/set-webpack-public-path-plugin@^4.1.16 in common-versions.json. * [eslint-plugin] Introduce `@rushstack/import-requires-chunk-name` and `@rushstack/pair-react-dom-render-unmount` rules. (#5419) * Include the @rushstack/import-requires-chunk-name rule. * Include the @rushstack/pair-react-dom-render-unmount rule. * fixup! Include the @rushstack/pair-react-dom-render-unmount rule. * Include missing documentation. * Rush change. * Sort README entries. * Update changelogs [skip ci] * Bump versions [skip ci] * Extract CredentialCache from Rush into @rushstack/credential-cache (#5421) * Add new credential-cache package * Add test command * Factor out CredentialCache * Fix routing * Fix API * Update readme * Update readme * rush update * Forward rush-user folder name * Remove old credentials schema * Restore caching in getHomeFolder * Remove reexport of areDeepEqual * Update API md * Centralize polyfill --------- Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0. (#5422) * Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0. * Fix an issue where the ESLint process will crash when running in the ESLint VSCode extension in ESLint >=9.37.0. * Update changelogs [skip ci] * Bump versions [skip ci] * Bump decoupled local dependencies. (#5420) * [heft-lint] Fix TypeScript program passing (#5428) Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> * [API Extractor] Add support for printing a diff of changed API reports in non-local builds. (#5427) * Fix an issue where verbose API extractor messages may not be passed to the Heft plugin. * Add diff printing to API Extractor's report issue logging. * Expose an alwaysShowChangedApiReportDiffOnNonLocalBuild option in the api-extractor-heft-plugin configuration file. * Use the alwaysShowChangedApiReportDiffOnNonLocalBuild in the local rig * fixup! Add diff printing to API Extractor's report issue logging. * Generate a JSON schemas artifact after publish. (#5429) * Copy JSON schemas to projects' temp/json-schemas folders. * Introduce a tool for collecting JSON schemas. * Record JSON schemas during publish. * Produce artifacts during CI. * Fix publish. (#5430) * Update changelogs [skip ci] * Bump versions [skip ci] * [heft-node-rig] Add lib-dts and lib-esm to cleanFiles glob (#5438) * Initial plan * Add lib-dts and lib-esm to cleanFiles in heft-node-rig Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Add change file for heft-node-rig Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * [eslint-plugin] Fix no-external-local-imports in editor (#5441) * [eslint-plugin] Fix calculation of project folder in ESLint * [heft-lint] Set parserOptions.tsconfigRootDir --------- Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * Bump decoupled local dependencies. (#5440) * Bump cyclic dependencies. * Bump TSDoc dependencies. * Rush update. * [devx] Apply schemas to Rush/Heft config files in VS Code, add clean build launch config (#5445) * Bind schemas in vscode * Add clean build launch config --------- Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> * [heft-typescript] Support `${configDir}` token in tsconfig.json (#5444) * Support ${configDir} in typescript file copier * Use ${configDir} in local rigs * Use const * Fix a TSDoc link. --------- Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * [lint] Ensure correctness of SARIF output logs (#5443) * [eslint-bulk] Report bulk suppressions as suppressions * [heft-lint] Include suppressed results * Enable sarif log for local rigs, add test * Fix lint cache * Fix typo in TSLint --------- Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> * Update changelogs [skip ci] * Bump versions [skip ci] * [rush] Add project-level parameter ignoring to prevent unnecessary cache invalidation (#5433) * Initial plan * Add parameter ignoring feature to rush-lib Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Add tests for parameter ignoring feature Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Refactor to eliminate code duplication in parameter collection Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Improve documentation and add clarifying comments Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Address PR feedback: use ignoredParameterValues and improve filtering Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Address final PR feedback: improve logging and test coverage Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Centralize parameter creation helper and share with BaseScriptAction Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Ensure all parameter types are tested for filtering Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Refactor parameter helpers into cli/parsing directory Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Use CommandLineParser to parse parameter values in test Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Use executeWithoutErrorHandlingAsync instead of executeAsync Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Add rush change file for project-level parameter ignoring feature Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Adjust formatting of change file --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> Co-authored-by: David Michon <dmichon@microsoft.com> * [rush-lib] Add validation for parameterNamesToIgnore in rush-project.json (#5448) * Initial plan * Add validation for parameterNamesToIgnore in rush-project.json Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Remove unused test repository * Address PR feedback: combine error messages and add malformed parameter test Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Add changelog entry for rush-lib Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Add tests for parameter validation with valid parameters Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Update libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts Co-authored-by: David Michon <dmichon@microsoft.com> * Update common/changes/@microsoft/rush-lib/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json * Fix changelog entry to use @microsoft/rush package name Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com> Co-authored-by: David Michon <dmichon@microsoft.com> * [rush-lib] Add PathProjectSelectorParser with path: scheme and auto-routing (#5451) * Initial plan * Add PathProjectSelectorParser implementation with path: scheme Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Address code review feedback and add comprehensive unit tests for selector parsers Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Add tests for VersionPolicyProjectSelectorParser and SubspaceSelectorParser Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Refactor tests into separate files and improve PathProjectSelectorParser testability Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Add change file for PathProjectSelectorParser feature Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Update common/changes/@microsoft/rush/copilot-add-path-project-selector-parser_2025-11-17-22-30.json * Address code review feedback: make workingDirectory required and add comprehensive tests Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Fix Windows path separator issue by normalizing to forward slashes for LookupByPath Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Use consistent cwd from RushCommandLineParser for path resolution Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> * Auto-route relative and absolute POSIX paths to path: selector Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Use Path.convertToSlashes helper instead of manual path separator conversion Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> * Rush change. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> Co-authored-by: David Michon <dmichon@microsoft.com> Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com> * Initial plan * Generate changelogs for webpack version bump Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com> --------- Co-authored-by: Lincoln <778157949@qq.com> Co-authored-by: Rushbot <rushbot@users.noreply.github.com> Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com> Co-authored-by: yuza🍊 <yuji.min.dev@gmail.com> Co-authored-by: Camille Malonzo <cmalonzo@microsoft.com> Co-authored-by: cmalonzo <cmalonzo@users.noreply.github.com> Co-authored-by: David Michon <dmichon@microsoft.com> Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com> Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com>
Summary
Custom command-line parameters currently propagate to all projects in a Rush command, causing cache invalidation even when parameters don't affect specific operations. This PR adds
parameterNamesToIgnoretorush-project.jsonto exclude irrelevant parameters from cache key calculation and command invocation.Fixes #5432
Details
Schema & Interface
parameterNamesToIgnore?: string[]toIOperationSettingsinrush-project.jsonlongNamevalues (e.g.,--production,--verbose)Core Logic
getCustomParameterValuesByPhase→getCustomParameterValuesByOperation{ parameterValues, ignoredParameterValues }for filtered parameters and loggingoperation.settings.parameterNamesToIgnoreagainst parameterlongNameappendToArgListfor both included and ignored parameters to get actual CLI valuesRunners
ShellOperationRunnerandIPCOperationRunneracceptignoredParameterValuesterminal.writeLine()before invocation with clear message indicating project-level configurationPlugins
IPCOperationRunnerPluginuses newgetCustomParameterValuesByOperationfunctionShardedPhaseOperationPluginderives ignored values from operation settings for both collator and shard operationsParameter Parsing Helpers
cli/parsing/defineCustomParameters.tshelper that accepts a target map to avoid copyingIParameterJsonfor consistencycli/parsing/associateParametersByPhase.tshelper extracted fromPhasedScriptActionBaseScriptActionandPhasedScriptActionto use shared helpersConfiguration Example
{ "operationSettings": [ { "operationName": "_phase:build", "parameterNamesToIgnore": ["--production"] } ] }The
--productionparameter will be excluded from command invocation and cache key for this operation, preventing cache breaks when the parameter changes but doesn't affect the build output.How it was tested
CommandLineParser.executeWithoutErrorHandlingAsync()to properly parse parameter values through the standard parsing flowparameterNamesToIgnoreconfigurationImpacted documentation
rush-project.schema.json- Updated with newparameterNamesToIgnorefieldOriginal prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.