Skip to content

fix(post-publish): handle Rush version bump in npm-post-publish pipeline#6

Closed
iclanton wants to merge 74 commits intomainfrom
fix-post-publish
Closed

fix(post-publish): handle Rush version bump in npm-post-publish pipeline#6
iclanton wants to merge 74 commits intomainfrom
fix-post-publish

Conversation

@iclanton
Copy link
Copy Markdown
Owner

Summary

  • Fix issues with updates to rushstack-websites (prior commit): adds DisableInstallRunRushLockfile parameter to the install-run-rush.yaml template and uses it for the rushstack-websites stage, which doesn't have a lockfile checked in.

  • Handle Rush version bump in post-publish pipeline (this commit): when bump-decoupled-local-dependencies updates the Rush version in rush.json, the subsequent rush update step would fail because install-run-rush.js tried to install the new Rush version while INSTALL_RUN_RUSH_LOCKFILE_PATH still pointed to the old version's lockfile.

    Fix:

    • BumpDecoupledLocalDependencies now emits RushWasUpdated (true/false) and NewRushVersion as Azure Pipelines variables, and only writes rush.json when the version actually changed.
    • If RushWasUpdated is true, a new conditional step bootstraps the new Rush version (skipping lockfile validation), then copies the new lockfile into common/config/validation/rush-package-lock.json before rush update runs — so rush update proceeds normally with a matching lockfile.

Test plan

  • Verify the pipeline runs successfully when Rush is not updated (normal path unchanged)
  • Verify the pipeline runs successfully when Rush is updated (new bootstrap steps trigger, rush update no longer fails)

🤖 Generated with Claude Code

iclanton and others added 30 commits February 22, 2026 14:53
* Initial plan

* Fix race condition in FileSystem.create*Link helpers by factoring isExistError handler into dedicated helpers

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>
…osoft#5666)

* Introduce the heft-image-typings-generator-plugin.

* Use the new plugin in build-tests projects.

* Add the typigns generator to the web rig.

* Rewrite the plugin to handle general static assets.

* fixup! Rewrite the plugin to handle general static assets.

* fixup! Rewrite the plugin to handle general static assets.

* Remove usage of the plugin in the heft-typescript-composite-test project.

* fixup! Use the new plugin in build-tests projects.

* fixup! Rewrite the plugin to handle general static assets.

* Add unit test.

* Rationalzie the plugin options.

* fixup! Use the new plugin in build-tests projects.

* fixup! Rationalzie the plugin options.

* PR feedback.

* fixup! Rationalzie the plugin options.

* fixup! PR feedback.

* Refactor binary and text to resource and source.
…ia storageEndpoint (microsoft#5664)

* add optional storageEndpoint config

* add change

* Update common/changes/@microsoft/rush/feat-custom-endpoint-azure-blob-storage_2026-02-23-03-40.json

Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com>

---------

Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com>
…put folders (microsoft#5665)

* [heft-typescript-plugin] Add emitModulePackageJson option for ESM output folders

Add a new 'emitModulePackageJson' option for 'additionalModuleKindsToEmit'
entries in typescript.json. When enabled, the TypeScript plugin writes a
package.json with the appropriate "type" field ("module" for ESNext/ES2015,
"commonjs" for CommonJS) to the output folder after compilation.

This ensures Node.js correctly interprets .js files in ESM output folders
like lib-esm/, fixing named import failures on Node 18 where .js files
without a nearest "type": "module" package.json are treated as CommonJS.

Enabled by default in local-node-rig and decoupled-local-node-rig for
their lib-esm output.

* fixup! [heft-typescript-plugin] Add emitModulePackageJson option for ESM output folders

* Convert something to a destructuring.

* fixup! [heft-typescript-plugin] Add emitModulePackageJson option for ESM output folders
…ge.json and pnpm-lock.yaml (microsoft#5668)

* Update ajv to version 8.18.0 and adjust related dependencies in package.json and pnpm-lock.yaml

* Update ajv to version 8.18.0 and adjust related dependencies in package.json and pnpm-lock.yaml

* Rush change.

---------

Co-authored-by: Lucas Akira Uehara <ksakira10@users.noreply.github.com>
Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com>
…er-coersion (microsoft#5669)

* feat: playwright-versioning

Allow manually passing in the version of playwright to use for the tunnel and still default to the playwright-core version if not provided.
This allows us to use the tunnel with different versions of playwright without needing to update the tunnel package itself.

* bugfix: remove-semver-coercion

Remove semver coercion from the Playwright version in the handshake message. This allows for more flexible version handling and avoids issues with prerelease version formats.

* misc: rush-change
…es after publish. (microsoft#5661)

* Add AzDO pipeline to bump decoupled local dependencies after publish

* Fix GitHub PR step to show API error responses on failure

* Use service connection credentials from git config for GitHub API calls
* Add AzDO pipeline to bump decoupled local dependencies after publish

* Fix GitHub PR step to show API error responses on failure

* Use service connection credentials from git config for GitHub API calls

* Extract push + GitHub PR steps into a reusable template

* Address PR review: sanitize inputs, protect credentials, add security comments

* Rename to npm-post-publish, publish api artifact, add API docs update stage

* Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* Extract api artifact publishing to separate branch

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* Only install to repo-toolbox.

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* fixup! Rename to npm-post-publish, add api artifact, add API docs update stage using multi-repo checkout

* TEMP: download api artifact from latest npmPublish for testing

* Use api-documenter-docusaurus-plugin.

* fixup! Use api-documenter-docusaurus-plugin.

* chore: bump decoupled local dependencies

* chore: generate change files for decoupled dependency bump

---------

Co-authored-by: Ian Clanton-Thuon <iclanton@users.noreply.github.com>
Co-authored-by: Rushbot <rushbot@users.noreply.github.com>
…crosoft#5672)

* Bump TSDoc dependencies.

* Update Bump @typescript-eslint/* dependencies.
…yles` and `@rushstack/hashed-folder-copy-plugin`. (microsoft#5673)

* Normalize .npmignores.

* Rush change.

* fixup! Normalize .npmignores.

* fixup! Rush change.
* chore: bump decoupled local dependencies

* chore: generate change files for decoupled dependency bump

---------

Co-authored-by: Rushbot <rushbot@users.noreply.github.com>
…icrosoft#5688)

* correct launch option

* rush change

* ext version bump

---------

Co-authored-by: supsing <supsing_microsoft@users.noreply.github.com>
rushbot and others added 27 commits March 14, 2026 00:13
…icrosoft#5700)

* Initial plan

* Add RUSH_QUIET_MODE environment variable

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>

* Remove erroneous @microsoft/rush-lib change file

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>

* Deduplicate quiet mode handling in install-run-rush; fix reset() method

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>

* Update rush-lib.api.md with quietMode and RUSH_QUIET_MODE API entries

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>

* Fix RUSH_QUIET_MODE position in rush-lib.api.md to match source declaration order

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>
microsoft#5708)

Agent-Logs-Url: https://github.com/microsoft/rushstack/sessions/32548397-4715-49df-ac93-946ff98db320

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>
microsoft#5707)

* fix: add preventAutoclose to ProblemCollector, inject strip-colors transform, always wire problemCollector

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
Agent-Logs-Url: https://github.com/microsoft/rushstack/sessions/8b2eb275-c191-44e9-8d69-dd1c166c7985

* fix: add @microsoft/rush patch change file

Co-authored-by: dmichon-msft <26827560+dmichon-msft@users.noreply.github.com>
Agent-Logs-Url: https://github.com/microsoft/rushstack/sessions/1bcedf3e-f266-4978-ad80-c7ccb325056a

---------

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: Rushbot <rushbot@users.noreply.github.com>
…oft#5718)

Co-authored-by: Ben Papp <BPapp-MS@users.noreply.github.com>
…commands; add published versions JSON plugin. (microsoft#5701)

* Add functions to better support commands provided by global commands.

* Introduce rush-published-versions-json-plugin.

* fixup! Introduce rush-published-versions-json-plugin.

* fixup! Introduce rush-published-versions-json-plugin.

* fixup! Introduce rush-published-versions-json-plugin.

* fixup! Introduce rush-published-versions-json-plugin.

* Add "globalPlugin" command kind for plugin-native global commands

Introduces a new "globalPlugin" commandKind for command-line.json that can only
be used in Rush plugin command-line.json files. Unlike "global" commands, it has
no shellCommand — the implementation must be provided entirely by the plugin via
the runGlobalCustomCommand hook with setHandled().

- Added globalPluginCommandKind constant to RushConstants
- Added globalPluginCommand to JSON schema (no shellCommand/autoinstallerName)
- Added IGlobalPluginCommandJson type; at runtime, normalized to IGlobalCommandConfig
  with shellCommand="" and isPluginOnly=true (similar to bulk→phased conversion)
- Rejected globalPlugin in repo command-line.json (loadFromFileOrDefault)
- Updated plugin command-line.json to use the new kind
- Fixed plugin .npmignore to include command-line.json

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add changefile for globalPlugin command kind

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR feedback: rename isPluginOnly to providedByPlugin

Rename isPluginOnly → providedByPlugin for clarity per review feedback.
Also update the first changefile comment to reflect the globalPlugin design.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Split changefiles: API additions vs globalPlugin command kind

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rushbot <rushbot@users.noreply.github.com>
…opy conflicts across npm-packlist versions (microsoft#5720)

* fix(package-extractor): preventing duplicate-copy conflicts across npm-packlist versions

* docs(README.md): update readme

* Fix different behavior on Windows that was breaking the unit test

* Prepare to publish a PATCH version of Rush

---------

Co-authored-by: LPegasus <lpegasus@users.noreply.github.com>
Co-authored-by: Pete Gonzalez <4673363+octogonz@users.noreply.github.com>
… bumping (microsoft#5723)

* Add the Rush plugin for recording published versions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Replace record-versions step with Rush plugin in post-publish pipeline.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Remove repo-toolbox record-versions action.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Update bump-decoupled-local-dependencies to update autoinstallers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fixup! Update bump-decoupled-local-dependencies to update autoinstallers.

* Clean up pipeline YAML.

* fixup! Update bump-decoupled-local-dependencies to update autoinstallers.

* Address PR feedback: use install-run-rush.yaml template; add run-repo-toolbox.yaml template

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…tor, CommonVersionsConfiguration, and VersionPolicy (microsoft#5724)

* Refactor PackageJsonEditor.

* fixup! Refactor PackageJsonEditor.

* fixup! Refactor PackageJsonEditor.

* Add changelog entry for PackageJsonEditor async API refactor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Update a downstream project to use the async APIs.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
If `bump-decoupled-local-dependencies` updates the Rush version in
`rush.json`, the subsequent `rush update` step would fail because
`install-run-rush.js` tried to install the new Rush version but the
checked-in `rush-package-lock.json` still referenced the old version.

Fix by emitting `RushWasUpdated` and `NewRushVersion` Azure Pipelines
variables from `BumpDecoupledLocalDependencies`, then conditionally
bootstrapping the new Rush version (skipping lockfile validation) and
updating the checked-in lockfile before running `rush update` normally.

Also only write `rush.json` when the Rush version actually changed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@iclanton
Copy link
Copy Markdown
Owner Author

Closing in favor of a PR against microsoft/rushstack.

@iclanton iclanton closed this Mar 25, 2026
@iclanton iclanton deleted the fix-post-publish branch March 25, 2026 16:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.