[0.81] Move CI/Release pipelines to office/ISS ADO project - #16360
Conversation
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 40 out of 40 changed files in this pull request and generated 3 comments.
Suppressed comments (4)
vnext/Scripts/Warm-RnwFeedCache.ps1:76
- This default is copied from the newer branch, but the 0.81 CLI-init script pins
@react-native-community/template@0.81.0-nightly-202565-2f67cec. For any nightly warm-up (including the documented-ReactNativeVersionexample), this generates a different dependency closure thancreaternwapp.cmd, so the feed is not warmed for the packages the 0.81 CLI test actually restores.
vnext/Scripts/Warm-RnwFeedCache.ps1:90 UpdateNightlyDependencies.ps1is not present in this backport, so every invocation with a nightly React Native version fails whenUpdate-NightlyPackageJsontries to call this path. PR #16350 added that helper alongside these callers; please backport it as well.
.ado/README.md:84- This statement is not true for the backport: #16350's
package.json,yarn.lock, andstring_decodershim changes were omitted, and this branch still resolves versions such aslinkify-it5.0.0 that the source PR pinned to address Component Governance. Either port branch-compatible dependency fixes and regenerate the lockfile or revise this claim; otherwise the new Office SDL run can still report the alerts described as cleared.
this repo). `guardian/sdl/.gdnsuppress` is an **empty** suppression set: all
Component Governance alerts are fixed at the source (dependency `resolutions` in the
root `package.json`), so nothing is suppressed.
docs/build-pipelines.md:3
- The new scheduled feed warm-up is a fourth Azure DevOps pipeline, so the documented count is now stale.
| call git config user.name "React-Native-Windows Bot" | ||
| call git config user.email "53619745+rnbot@users.noreply.github.com" |
| call git config user.name "React-Native-Windows Bot" | ||
| call git config user.email "53619745+rnbot@users.noreply.github.com" |
| parameters: | ||
| buildEnvironment: ${{ parameters.buildEnvironment }} |
bd760c7 to
141be35
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 87 out of 90 changed files in this pull request and generated 1 comment.
Suppressed comments (3)
vnext/Scripts/creaternwlib.cmd:148
- The backported PR explicitly says
creaternwlib.cmdshould stop on the first error, but these new Git commands and the subsequent Yarn/init commands still have noERRORLEVELchecks. A failed install, commit, orinit-windowsis followed by more successful commands, and the finalpopdcan therefore leave this script reporting success to the pipeline. Add fail-fast handling for each external command rather than only checking the initial generator.
vnext/Scripts/creaternwapp.cmd:150 - The backported PR explicitly says
creaternwapp.cmdshould stop on the first error, but the new Git commands and the subsequent Yarn/init commands still have noERRORLEVELchecks. A failed install, commit, orinit-windowsis followed by more successful commands, and the finalpopdcan therefore leave this script reporting success to the pipeline. Add fail-fast handling for each external command rather than only checking the initial generator.
packages/react-native-windows-init/src/Cli.ts:11 - These spacing-only edits conflict with the repository formatter:
.prettierrc:6setsbracketSpacingtofalse, and the rest of this package uses forms such as{GenerateWindows, GenerateWindows62}.yarn format:verifywill reject this file. Run the repository formatter so all object/import braces in this file return to the configured style.
| enableScripts: false No newline at end of file | ||
| enableScripts: false | ||
|
|
||
| yarnPath: .yarn/releases/yarn-4.13.0.cjs |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 87 out of 90 changed files in this pull request and generated 2 comments.
Suppressed comments (6)
.yarnrc.yml:3
yarnPathpoints every Yarn invocation at.yarn/releases/yarn-4.13.0.cjs, but that file is not present in this change or the checkout. Yarn therefore exits before dependency installation, breaking the new--immutableCI steps. Commit the pinned release file (or removeyarnPathand provision Yarn 4 through a reliable mechanism).
vnext/Scripts/creaternwlib.cmd:148- The backported PR explicitly says these scripts now stop on the first error, but the newly added
git configcalls (like the other post-generation calls) are not checked. A failed config/commit/init can be masked by later successful commands, leaving this CI step green with an incomplete library. Add fail-fast checks after each external command in both CLI scripts.
vnext/Scripts/creaternwapp.cmd:150 - The backported PR explicitly says these scripts now stop on the first error, but the newly added
git configcalls (like the other post-generation calls) are not checked. Their failures can be masked by later successful commands, so the app-init CI step may report success after an incomplete setup. Add fail-fast checks after each external command in both CLI scripts.
.ado/release-pipeline.yml:253 - This job runs in parallel with
PushNpm, whose--check-npmeligibility check uses this same public ADO registry via the pipeline-levelNPM_CONFIG_REGISTRY. If this mirror publishes first,PushNpmsees the new version in ADO, removes its tarball, and skips npmjs.com publishing. Make the npmjs check authoritative and independent of the mirror, or order the ADO mirror jobs afterPushNpm.
- template: .ado/templates/publish-npm-to-ado-feed.yml@self
parameters:
azureSubscription: ${{ parameters.adoFeedServiceConnection }}
npmFeedRegistry: 'https://pkgs.dev.azure.com/ms/react-native/_packaging/react-native-public/npm/registry/'
packagesPath: '$(Pipeline.Workspace)/npm-feed-packages'
docs/build-pipelines.md:3
- The PR adds a fourth Azure DevOps pipeline (
warm-feed-cache-pipeline.yml), but this overview still says there are three and omits it from the table. This now conflicts with.ado/README.md:11-16; include the feed warm-up entry here as well.
.ado/README.md:93 - This release-target list omits the two new npm ADO destinations even though
release-pipeline.ymladds both jobs and lines 3-5 say npm is mirrored into both feeds. As written, the documentation understates the release behavior and its “all five destinations” count is no longer accurate.
`release-pipeline.yml` publishes from ISS to all five destinations:
- npm → npmjs.com via `EsrpRelease@11`
- NuGet → `ms/react-native` (private) and `ms/react-native-public` (public) feeds
- NuGet → nuget.org (API key from `OGX-JSHost-KV`)
| - template: .ado/jobs/universal-single.yml@self | ||
| parameters: | ||
| buildPlatform: ${{ matrix.BuildPlatform }} | ||
| buildConfiguration: ${{ matrix.BuildConfiguration }} | ||
| buildEnvironment: ${{ parameters.buildEnvironment }} | ||
| useFabric: true | ||
| skipSetup: true |
| import fs from '@react-native-windows/fs'; | ||
| import semver from 'semver'; | ||
| import {execSync} from 'child_process'; | ||
| import { execSync } from 'child_process'; |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 87 out of 90 changed files in this pull request and generated 1 comment.
Suppressed comments (8)
.yarnrc.yml:3
yarnPathpoints to a file that is not present in this PR or checkout. Every rootyarninvocation will try to load this missing file, so the newyarn install --immutablesteps fail before installing dependencies. Commit the pinned Yarn release at this path (or removeyarnPathand provision Yarn 4 another way).
vnext/Scripts/creaternwapp.cmd:150- This backport includes the new Git identity but omits the surrounding fail-fast changes from #16350. A failed
yarn install,git config,yarn add, orinit-windowscan still be overwritten by a later successful command, making the CLI-init pipeline report success for a broken generated app. Restore theif errorlevel 1 goto :failurechecks and preserved exit-code epilogue.
vnext/Scripts/creaternwlib.cmd:148 - This backport includes the new Git identity but omits the surrounding fail-fast changes from #16350. Failures from the preceding install or later
yarn add, commit, andinit-windowscalls can be masked by subsequent commands, producing a false-green CLI library job. Restore the parent PR's error checks and preserved exit-code epilogue.
packages/react-native-windows-init/src/Cli.ts:11 - This file has
@format, but the change adds spaces inside braces throughout, contrary tobracketSpacing: falsein.prettierrc:6. Theformat:verifyCI step will reject it; run the repository formatter so all of these additions use the configured style.
.ado/build-template.yml:603 - The backport deletes the entire CLI stage, so neither CI nor PR validates
react-native init/init-windowsagainst the produced packages. This contradictsdocs/build-pipelines.md:15,22,51-53and removes the consumer of the Verdaccio/feed work added here. Restore the stage afterTests.
.ado/variables/shared.yml:16 - The network-isolation backport is incomplete: the tester sources still load images from Facebook, Giphy, Pexels, and fbcdn URLs (for example
packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js:24-26,403,604andpackages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExScroll.js:115-118). Those replacements were part of #16350; without them, E2E runs can still attempt blocked egress.
package.json:66 - The Component Governance fixes from #16350 were not fully backported. In particular, the root resolution and local
string_decodershim are absent, while this PR's lockfile still resolvesstring_decoder1.1.1 and 1.3.0. This leaves the no-fix advisory that the parent PR explicitly removed, so the claim of zero alerts will not hold.
docs/build-pipelines.md:3 - The PR adds a fourth pipeline (
warm-feed-cache-pipeline.yml), but this overview still says there are three and its table omits the warm-up pipeline. Update the count and add the scheduled Office Unofficial pipeline so this document matches.ado/README.md:11-16.
| # Azure DevOps resource id for AAD access tokens. | ||
| $AdoResourceId = '499b84ac-1321-427f-aa17-267ca6975798' | ||
| $RepoRoot = (Resolve-Path "$PSScriptRoot\..\..").Path | ||
| $UpdateNightly = Join-Path $RepoRoot 'vnext\Scripts\UpdateNightlyDependencies.ps1' |
dfc8210 to
c7ffb39
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 193 out of 197 changed files in this pull request and generated 1 comment.
Suppressed comments (4)
vnext/Scripts/creaternwapp.cmd:150
- This backport omits #16350's failure-propagation flow. These new Git commands—and the surrounding Yarn/add/init commands—can fail, but execution continues and a later successful command can overwrite
%ERRORLEVEL%, making CLI generation report success after an incomplete app. Port the originalif errorlevel 1 goto :failurechecks and preservedEXIT_CODEcleanup.
vnext/Scripts/creaternwlib.cmd:148 - This backport omits #16350's failure-propagation flow. These new Git commands—and the surrounding Yarn/add/init commands—can fail, but execution continues and a later successful command can overwrite
%ERRORLEVEL%, making CLI generation report success after an incomplete library. Port the originalif errorlevel 1 goto :failurechecks and preservedEXIT_CODEcleanup.
.ado/build-template.yml:603 - Restoring this deletion is required: this is the only inclusion of
cli-init-windows.yml, so neither CI nor PR now runs CLI init verification. That contradicts this PR's backported CLI work anddocs/build-pipelines.md:15,51-53, which still documents a CLI stage that validates the just-built packages.
.ado/templates/publish-symbols.yml:17 - Symbol publication is a declared release target, but this setting converts authentication, service, or indexing failures into a successful release with missing symbols. Let the release fail so it cannot silently ship packages without the corresponding debugging artifacts.
continueOnError: true
| private _dimensionsOnActivate: IDimensions; | ||
|
|
||
| private readonly _internalRef: React.RefObject<ViewWin32> | ||
| private readonly _internalRef: React.RefObject<ViewWin32|null> |
37b58f7
into
microsoft:0.81-stable
Description
Type of Change
Why
Backports #16350 and #16359 to
0.81-stable, moving the CI and Release pipelinesto the office/ISS Azure DevOps project (the same move already made on
main).Builds in that project are network-isolated, run on the Office 1ES pipeline
templates, and restore packages from an internal feed. To pass there the build has
to be self-contained: no outbound network at build time, no unapproved package
sources, and a clean Component Governance scan. This PR also carries the fixes
0.81-stableneeds to build and go green under those constraints.What
CI and Release pipeline migration
ci-pipeline.yml) and PR (pr-pipeline.yml) now extend the Office/1ESpipeline templates and run on the internal x64 pool with the
rnw-img-vs2026-node24image. CI triggers onmainand the active0.8x-stablebranches, plus a weekly heartbeat so it is not auto-disabled.release-pipeline.ymlplus templates; the oldrelease.yml,publish.yml, andwindows-vs-pr.ymlare removed.(
publish-npm-to-ado-feed.yml), along withpublish-symbols.yml.(
auth-npm-feed.yml); PR builds read the pre-warmed feed anonymously..ado/README.mddocuments the pipeline layout.Yarn 4 (Berry)
.yarn/releases/yarn-4.13.0.cjs, setpackageManager: yarn@4.13.0, and regenerateyarn.lock(this accounts formost of the diff's line count). The CI install step moves from
midgard-yarn-stricttoyarn install --immutable. Adds astring_decodershim wired in as a
portal:resolution.Feed warming
vnext/Scripts/Warm-RnwFeedCache.ps1andwarm-feed-cache-pipeline.ymlpre-populate the internal feed (build tools, the app/lib CLI-init dependency
closures, the repo's own published packages, and the NuGet closure) so
network-isolated PR builds can restore anonymously.
Component Governance security bumps
package.jsonresolutionspin vulnerable transitive dependencies to patchedversions (basic-ftp, simple-git, shell-quote, form-data, ws, minimatch,
js-yaml, yaml, picomatch, nanoid, linkify-it, and others), with a regenerated
yarn.lock.uuidis moved to 14.x because that is the only release line withthe fix.
extract-ziphas no fixed release yet and is baselined inGuardianCustomConfiguration.json.NuGet restore fixes
0.0.0-2604.21001-94aa5e1d→0.0.0-2608.12001-35d34796to pick up crash fixes; lockfiles updated.fallback folder (
.nuget/empty-uwp-fallback) and point restore at it so thosemachine-injected, SDK-versioned packages resolve from the feed instead of a
local copy whose content hash differs per machine.
NuGetRestoreForceEvaluateAllSolutions.ps1for VS 2026 (MSB4086/MSB4184guards, strip nuget.org from a
node_modulesNuGet.Config, guard an emptyPlatformToolsetVersion).Network isolation
data:PNG (updated overrides and snapshots) so the tests do not reach theinternet.
image (
BackgroundDownloadDisabled=1) so it stops calling the VS CDN duringisolated builds.
Reduced complexity
VM image
.ado/image/rnw-img-vs2026-node24.jsonimage definition used bythe pipelines.
Testing
office/ISS project: Yarn 4 install, NuGet restore, the native builds, and the
network-isolation checks run under the isolated build.
uuid14.x (a major bump) has only been smoke-tested viarequire; it has nothad a full build validated.
Changelog
Should this change be included in the release notes: no
CI/build-infrastructure and security-dependency changes, not
user-facing runtime changes. Change files (type
patch) are included for theaffected packages.
Microsoft Reviewers: Open in CodeFlow