diff --git a/.ado/publish.yml b/.ado/publish.yml index 46fb3142865..7b097e64267 100644 --- a/.ado/publish.yml +++ b/.ado/publish.yml @@ -211,53 +211,6 @@ extends: - script: dir /s "$(Pipeline.Workspace)\published-packages" displayName: Show created npm packages - # Beachball usually takes care about the NPM package tagging based on the values in package.json files. - # We use the ESRP Release where we must provide the tag explictly (the productstate parameter). - # Fortunately, we just use two tags: latest and some custom tag like "canary", "v0.73-stable", etc. - # The npmGroupByTag.js script groups the created NPM package by these two tags into the specified folders. - - pwsh: | - node .ado/scripts/npmGroupByTag.js "$(Pipeline.Workspace)\published-packages" "$(Pipeline.Workspace)\published-packages\custom-tag" "$(Pipeline.Workspace)\published-packages\latest-tag" - displayName: Group npm packages by tag - - - script: dir /s "$(Pipeline.Workspace)\published-packages" - displayName: Show grouped npm packages by tag - - # Publish NPM packages using ESRP Release task with the custom tag such as "canary", "v0.73-stable", etc. - - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' - displayName: 'ESRP Release to npmjs.com (custom tag)' - condition: and(succeeded(), ${{ not(parameters.skipNpmPublish) }}, eq(variables['NpmCustomFolderHasContent'], 'true')) - inputs: - connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' - usemanagedidentity: false - keyvaultname: 'OGX-JSHost-KV' - authcertname: 'OGX-JSHost-Auth4' - signcertname: 'OGX-JSHost-Sign3' - clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' - domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' - contenttype: npm - folderlocation: '$(NpmCustomFolder)' - productstate: '$(NpmCustomTag)' - owners: 'vmorozov@microsoft.com' - approvers: 'khosany@microsoft.com' - - # Publish NPM packages using ESRP Release task with the "latest" tag. - - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' - displayName: 'ESRP Release to npmjs.com (latest)' - condition: and(succeeded(), ${{ not(parameters.skipNpmPublish) }}, eq(variables['NpmLatestFolderHasContent'], 'true')) - inputs: - connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' - usemanagedidentity: false - keyvaultname: 'OGX-JSHost-KV' - authcertname: 'OGX-JSHost-Auth4' - signcertname: 'OGX-JSHost-Sign3' - clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' - domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' - contenttype: npm - folderlocation: '$(NpmLatestFolder)' - productstate: 'latest' - owners: 'vmorozov@microsoft.com' - approvers: 'khosany@microsoft.com' - # Beachball reverts to local state after publish, but we want the updates it added - script: git pull origin $(SourceBranchWithFolders) displayName: git pull diff --git a/.ado/release.yml b/.ado/release.yml index 1ea74d65666..c3a17ad095e 100644 --- a/.ado/release.yml +++ b/.ado/release.yml @@ -26,12 +26,51 @@ extends: customBuildTags: - ES365AIMigrationTooling-Release stages: - - stage: PushToPrivateAdoStage - displayName: ADO - react-native + - stage: Release + displayName: Publish artifacts jobs: - - job: PushPackages - displayName: Push packages - condition: succeeded() + - job: PushNpm + displayName: npmjs.com - Publish npm packages + variables: + - group: RNW Secrets + timeoutInMinutes: 0 + templateContext: + inputs: + - input: pipelineArtifact + pipeline: 'Publish' + artifactName: 'NpmPackedTarballs' + targetPath: '$(Pipeline.Workspace)/published-packages' + - input: pipelineArtifact + pipeline: 'Publish' + artifactName: 'VersionEnvVars' + targetPath: '$(Pipeline.Workspace)/VersionEnvVars' + steps: + - checkout: none + - task: CmdLine@2 + displayName: Apply version variables + inputs: + script: node $(Pipeline.Workspace)/VersionEnvVars/versionEnvVars.js + - script: dir /s "$(Pipeline.Workspace)\published-packages" + displayName: Show npm packages + - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' + displayName: 'ESRP Release to npmjs.com' + condition: and(succeeded(), ne(variables['NpmDistTag'], '')) + inputs: + connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' + usemanagedidentity: false + keyvaultname: 'OGX-JSHost-KV' + authcertname: 'OGX-JSHost-Auth4' + signcertname: 'OGX-JSHost-Sign3' + clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' + domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' + contenttype: npm + folderlocation: '$(Pipeline.Workspace)\published-packages' + productstate: '$(NpmDistTag)' + owners: 'vmorozov@microsoft.com' + approvers: 'khosany@microsoft.com' + + - job: PushPrivateAdo + displayName: ADO - react-native timeoutInMinutes: 0 templateContext: inputs: @@ -52,12 +91,9 @@ extends: inputs: script: nuget.exe push *.nupkg -ApiKey AzureArtifacts -Source https://pkgs.dev.azure.com/ms/_packaging/react-native/nuget/v3/index.json -NonInteractive -Verbosity Detailed -SkipDuplicate -NoSymbols workingDirectory: $(Pipeline.Workspace)/ReactWindows-final-nuget - - stage: PushToPublicAdoStage - displayName: ADO - react-native-public - jobs: - - job: PushPackages - displayName: Push packages - condition: succeeded() + + - job: PushPublicAdo + displayName: ADO - react-native-public timeoutInMinutes: 0 templateContext: inputs: @@ -78,13 +114,11 @@ extends: inputs: script: nuget.exe push *.nupkg -ApiKey AzureArtifacts -Source https://pkgs.dev.azure.com/ms/react-native/_packaging/react-native-public/nuget/v3/index.json -NonInteractive -Verbosity Detailed -SkipDuplicate -NoSymbols workingDirectory: $(Pipeline.Workspace)/ReactWindows-final-nuget - - stage: PushToNuGetStage - displayName: nuget.org - Push nuget packages - variables: - - group: RNW Secrets - jobs: - - job: PushPackages - displayName: Push packages + + - job: PushNuGetOrg + displayName: nuget.org - Push nuget packages + variables: + - group: RNW Secrets timeoutInMinutes: 0 templateContext: inputs: diff --git a/.ado/scripts/npmGroupByTag.js b/.ado/scripts/npmGroupByTag.js deleted file mode 100644 index 98a696b21a8..00000000000 --- a/.ado/scripts/npmGroupByTag.js +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env node -// @ts-check - -// Groups packed npm tarballs into tag-specific folders so ESRP can publish with the -// correct productstate value per tag. - -const fs = require('fs'); -const path = require('path'); - -/** - * @typedef {Object} PackageJsonBeachball - * @property {string | undefined} [defaultNpmTag] - */ - -/** - * @typedef {Object} PackageJson - * @property {string | undefined} [name] - * @property {string | undefined} [version] - * @property {boolean | undefined} [private] - * @property {PackageJsonBeachball | undefined} [beachball] - */ - -/** - * @returns {{packRootArg: string, customRootArg: string, latestRootArg: string}} - */ -function ensureArgs() { - const [, , packRootArg, customRootArg, latestRootArg] = process.argv; - if (!packRootArg || !customRootArg || !latestRootArg) { - console.error('Usage: node npmGroupByTag.js '); - process.exit(1); - } - return {packRootArg, customRootArg, latestRootArg}; -} - -/** - * @param {string} filePath - * @returns {unknown} - */ -function readJson(filePath) { - return JSON.parse(fs.readFileSync(filePath, 'utf8')); -} - -/** - * @param {string} pkgName - * @param {string} version - * @returns {string} - */ -function sanitizedTarballName(pkgName, version) { - const prefix = pkgName.startsWith('@') - ? pkgName.slice(1).replace(/\//g, '-').replace(/@/g, '-') - : pkgName.replace(/@/g, '-'); - return `${prefix}-${version}.tgz`; -} - -/** - * @param {string} tarballName - * @returns {string} - */ -function normalizePackedTarballName(tarballName) { - // beachball prefixes packed tarballs with a monotonically increasing number to avoid collisions - // when multiple packages share the same filename. Strip that prefix (single or repeated) for comparison. - return tarballName.replace(/^(?:\d+[._-])+/u, ''); -} - -/** - * @param {string} root - * @returns {string[]} - */ -function findPackageJsons(root) { - /** @type {string[]} */ - const results = []; - /** @type {string[]} */ - const stack = [root]; - - while (stack.length) { - const current = stack.pop(); - if (!current) { - continue; - } - /** @type {fs.Stats | undefined} */ - let stats; - try { - stats = fs.statSync(current); - } catch (e) { - continue; - } - - if (!stats.isDirectory()) { - continue; - } - - const entries = fs.readdirSync(current, {withFileTypes: true}); - for (const entry of entries) { - if (entry.name === 'node_modules' || entry.name === '.git') { - continue; - } - const entryPath = path.join(current, entry.name); - if (entry.isDirectory()) { - stack.push(entryPath); - } else if (entry.isFile() && entry.name === 'package.json') { - results.push(entryPath); - } - } - } - - return results; -} - -/** - * @param {string} name - * @param {string} value - */ -function setPipelineVariable(name, value) { - console.log(`##vso[task.setvariable variable=${name}]${value}`); -} - -(function main() { - const {packRootArg, customRootArg, latestRootArg} = ensureArgs(); - - const repoRoot = path.resolve(__dirname, '..', '..'); - const vnextPackageJsonPath = path.join(repoRoot, 'vnext', 'package.json'); - - if (!fs.existsSync(vnextPackageJsonPath)) { - console.error(`[npmGroupByTag] vnext package.json not found at ${vnextPackageJsonPath}`); - process.exit(1); - } - - console.log(`[npmGroupByTag] Using repo root ${repoRoot}`); - const packRoot = path.resolve(packRootArg); - const customRoot = path.resolve(customRootArg); - const latestRoot = path.resolve(latestRootArg); - - fs.mkdirSync(customRoot, {recursive: true}); - fs.mkdirSync(latestRoot, {recursive: true}); - - /** @type {string | null} */ - let customTag = null; - try { - const vnextPackageJson = /** @type {PackageJson} */ (readJson(vnextPackageJsonPath)); - const tagFromVnext = vnextPackageJson?.beachball?.defaultNpmTag; - if (tagFromVnext && tagFromVnext !== 'latest') { - customTag = tagFromVnext; - } - console.log( - `[npmGroupByTag] vnext defaultNpmTag is ${tagFromVnext || 'latest'}${ - customTag ? ` (custom tag '${customTag}' will be used)` : ' (no custom tag)' - }`, - ); - } catch (e) { - console.error(`[npmGroupByTag] Failed to read ${vnextPackageJsonPath}: ${e}`); - process.exit(1); - } - - /** @type {string[]} */ - const tarballs = fs.existsSync(packRoot) - ? fs.readdirSync(packRoot).filter(file => file.endsWith('.tgz')) - : []; - - if (!tarballs.length) { - setPipelineVariable('NpmCustomTag', customTag || ''); - setPipelineVariable('NpmCustomFolder', customRoot); - setPipelineVariable('NpmCustomFolderHasContent', 'false'); - setPipelineVariable('NpmLatestFolder', latestRoot); - setPipelineVariable('NpmLatestFolderHasContent', 'false'); - return; - } - - /** @type {Map} */ - const packageMetadata = new Map(); - for (const packageJsonPath of findPackageJsons(repoRoot)) { - /** @type {PackageJson | undefined} */ - let pkg; - try { - pkg = /** @type {PackageJson} */ (readJson(packageJsonPath)); - } catch (e) { - console.warn(`[npmGroupByTag] Skipping unreadable package.json ${packageJsonPath}: ${e}`); - continue; - } - - if (!pkg?.name || !pkg?.version) { - continue; - } - - const metadata = { - packageJsonPath, - name: pkg.name, - version: pkg.version, - tag: pkg?.beachball?.defaultNpmTag || 'latest', - isPrivate: pkg.private === true, - }; - - packageMetadata.set(sanitizedTarballName(pkg.name, pkg.version), metadata); - } - - let customCount = 0; - let latestCount = 0; - - for (const tarball of tarballs) { - const sourcePath = path.join(packRoot, tarball); - const normalizedName = normalizePackedTarballName(tarball); - const metadata = packageMetadata.get(normalizedName); - const destinationRoot = customTag && metadata && !metadata.isPrivate && metadata.tag === customTag ? customRoot : latestRoot; - const destinationPath = path.join(destinationRoot, tarball); - fs.mkdirSync(path.dirname(destinationPath), {recursive: true}); - fs.renameSync(sourcePath, destinationPath); - - if (metadata) { - const destinationLabel = destinationRoot === customRoot ? 'custom' : 'latest'; - console.log( - `[npmGroupByTag] ${tarball}: ${metadata.name}@${metadata.version} (${metadata.packageJsonPath}) tag=${metadata.tag} ` + - `private=${metadata.isPrivate} -> ${destinationLabel}`, - ); - } else { - console.warn(`[npmGroupByTag] ${tarball}: no package.json metadata found. Defaulting to latest.`); - } - - if (destinationRoot === customRoot) { - customCount++; - } else { - latestCount++; - } - } - - setPipelineVariable('NpmCustomTag', customTag || ''); - setPipelineVariable('NpmCustomFolder', customRoot); - setPipelineVariable('NpmCustomFolderHasContent', customCount ? 'true' : 'false'); - setPipelineVariable('NpmLatestFolder', latestRoot); - setPipelineVariable('NpmLatestFolderHasContent', latestCount ? 'true' : 'false'); -})(); diff --git a/.ado/scripts/setVersionEnvVars.js b/.ado/scripts/setVersionEnvVars.js index 0d026245cc9..63358f259a9 100644 --- a/.ado/scripts/setVersionEnvVars.js +++ b/.ado/scripts/setVersionEnvVars.js @@ -37,6 +37,11 @@ const versionEnvVars = { publishCommitId: commitId, reactDevDependency: pkgJson.devDependencies['react'], reactNativeDevDependency: pkgJson.devDependencies['react-native'], + npmDistTag: pkgJson?.beachball?.defaultNpmTag?.trim(), +} + +if (!versionEnvVars.npmDistTag) { + throw new Error('defaultNpmTag is missing in vnext/package.json'); } // Set the build number so the build in the publish pipeline and the release pipeline are named with the convenient version @@ -54,8 +59,14 @@ console.log(`##vso[task.setvariable variable=npmVersion]${versionEnvVars.npmVers console.log(`##vso[task.setvariable variable=publishCommitId]${versionEnvVars.publishCommitId}`); console.log(`##vso[task.setvariable variable=reactDevDependency]${versionEnvVars.reactDevDependency}`); console.log(`##vso[task.setvariable variable=reactNativeDevDependency]${versionEnvVars.reactNativeDevDependency}`); +console.log(`##vso[task.setvariable variable=NpmDistTag]${versionEnvVars.npmDistTag}`); + +const runnerTemp = process.env.RUNNER_TEMP; +if (!runnerTemp) { + throw new Error('RUNNER_TEMP environment variable is not set'); +} -const dirPath = path.resolve(process.env.RUNNER_TEMP, 'versionEnvVars'); +const dirPath = path.resolve(runnerTemp, 'versionEnvVars'); fs.mkdirSync(dirPath, {recursive: true}); fs.writeFileSync(path.resolve(dirPath, 'versionEnvVars.js'), @@ -68,4 +79,5 @@ console.log("##vso[task.setvariable variable=npmVersion]${versionEnvVars.npmVers console.log("##vso[task.setvariable variable=publishCommitId]${versionEnvVars.publishCommitId}"); console.log("##vso[task.setvariable variable=reactDevDependency]${versionEnvVars.reactDevDependency}"); console.log("##vso[task.setvariable variable=reactNativeDevDependency]${versionEnvVars.reactNativeDevDependency}"); +console.log("##vso[task.setvariable variable=NpmDistTag]${versionEnvVars.npmDistTag}"); `); diff --git a/change/@office-iss-react-native-win32-e48b3e4b-2d07-4bdd-8848-194e44c6b234.json b/change/@office-iss-react-native-win32-e48b3e4b-2d07-4bdd-8848-194e44c6b234.json new file mode 100644 index 00000000000..7e9af8fabbb --- /dev/null +++ b/change/@office-iss-react-native-win32-e48b3e4b-2d07-4bdd-8848-194e44c6b234.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@office-iss/react-native-win32", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-96922465-b642-41c5-88c3-4d7d33fc57bb.json b/change/@react-native-windows-automation-96922465-b642-41c5-88c3-4d7d33fc57bb.json new file mode 100644 index 00000000000..01e9ae1064e --- /dev/null +++ b/change/@react-native-windows-automation-96922465-b642-41c5-88c3-4d7d33fc57bb.json @@ -0,0 +1,7 @@ +{ + "comment": "Fix NPM dist tags and make some NPM private", + "type": "none", + "packageName": "@react-native-windows/automation", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/@react-native-windows-automation-channel-bd204866-3a78-4356-968e-4ce4d75bbf86.json b/change/@react-native-windows-automation-channel-bd204866-3a78-4356-968e-4ce4d75bbf86.json new file mode 100644 index 00000000000..078dd6a7009 --- /dev/null +++ b/change/@react-native-windows-automation-channel-bd204866-3a78-4356-968e-4ce4d75bbf86.json @@ -0,0 +1,7 @@ +{ + "comment": "Fix NPM dist tags and make some NPM private", + "type": "none", + "packageName": "@react-native-windows/automation-channel", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/@react-native-windows-automation-commands-5ca9938f-c221-4560-8a14-ea86c28f6705.json b/change/@react-native-windows-automation-commands-5ca9938f-c221-4560-8a14-ea86c28f6705.json new file mode 100644 index 00000000000..2a447cec361 --- /dev/null +++ b/change/@react-native-windows-automation-commands-5ca9938f-c221-4560-8a14-ea86c28f6705.json @@ -0,0 +1,7 @@ +{ + "comment": "Fix NPM dist tags and make some NPM private", + "type": "none", + "packageName": "@react-native-windows/automation-commands", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/react-native-platform-override-99731bf3-0e0b-4b76-9cd4-8d733bd86da0.json b/change/react-native-platform-override-99731bf3-0e0b-4b76-9cd4-8d733bd86da0.json new file mode 100644 index 00000000000..be4a3994f3c --- /dev/null +++ b/change/react-native-platform-override-99731bf3-0e0b-4b76-9cd4-8d733bd86da0.json @@ -0,0 +1,7 @@ +{ + "comment": "Fix NPM dist tags and make some NPM private", + "type": "none", + "packageName": "react-native-platform-override", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/react-native-windows-49ca732a-5b37-4bc0-8081-2bdd04529b04.json b/change/react-native-windows-49ca732a-5b37-4bc0-8081-2bdd04529b04.json new file mode 100644 index 00000000000..3ef8867d4d8 --- /dev/null +++ b/change/react-native-windows-49ca732a-5b37-4bc0-8081-2bdd04529b04.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "react-native-windows", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-init-4178f0af-47aa-4354-8150-862a1a991566.json b/change/react-native-windows-init-4178f0af-47aa-4354-8150-862a1a991566.json new file mode 100644 index 00000000000..56ff0f78a83 --- /dev/null +++ b/change/react-native-windows-init-4178f0af-47aa-4354-8150-862a1a991566.json @@ -0,0 +1,7 @@ +{ + "comment": "Fix NPM dist tags and make some NPM private", + "type": "none", + "packageName": "react-native-windows-init", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "none" +} diff --git a/package.json b/package.json index 35deae932aa..091a6767205 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "fast-glob": "^3.2.11", "husky": "^4.2.5", "prettier-plugin-hermes-parser": "0.21.1", - "react-native-platform-override": "*", + "react-native-platform-override": "0.81.0-preview.6", "unbroken": "1.0.27", "lage": "^2.7.1", "lodash": "^4.17.15" @@ -70,4 +70,4 @@ "z-schema": "CVE-2021-3765 in validator. z-schema is used by rush which is a dependency of lage so should not be executed in this repo" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} +} \ No newline at end of file diff --git a/packages/@office-iss/react-native-win32-tester/package.json b/packages/@office-iss/react-native-win32-tester/package.json index 1538e336032..2b1c3741e80 100644 --- a/packages/@office-iss/react-native-win32-tester/package.json +++ b/packages/@office-iss/react-native-win32-tester/package.json @@ -31,10 +31,10 @@ "eslint": "^8.19.0", "just-scripts": "^1.3.3", "react-native": "0.81.0-rc.0", - "react-native-platform-override": "^1.9.59", + "react-native-platform-override": "0.81.0-preview.6", "typescript": "5.0.4" }, "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@office-iss/react-native-win32/package.json b/packages/@office-iss/react-native-win32/package.json index b37822c9bda..38619a1367b 100644 --- a/packages/@office-iss/react-native-win32/package.json +++ b/packages/@office-iss/react-native-win32/package.json @@ -89,7 +89,7 @@ "prettier": "2.8.8", "react": "19.1.0", "react-native": "0.81.0-rc.0", - "react-native-platform-override": "^1.9.59", + "react-native-platform-override": "0.81.0-preview.6", "typescript": "5.0.4" }, "peerDependencies": { @@ -112,4 +112,4 @@ "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation-channel/package.json b/packages/@react-native-windows/automation-channel/package.json index 84cd5de76b1..30165a60f42 100644 --- a/packages/@react-native-windows/automation-channel/package.json +++ b/packages/@react-native-windows/automation-channel/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation-channel", - "version": "0.12.343", + "version": "0.81.0-preview.6", "license": "MIT", "repository": { "type": "git", @@ -41,8 +41,20 @@ "windows", "!packages*.lock.json" ], + "beachball": { + "defaultNpmTag": "preview", + "disallowedChangeTypes": [ + "major", + "minor", + "patch", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 22" }, "private": true -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation-commands/package.json b/packages/@react-native-windows/automation-commands/package.json index 92473fa34c3..87ea2c7374a 100644 --- a/packages/@react-native-windows/automation-commands/package.json +++ b/packages/@react-native-windows/automation-commands/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation-commands", - "version": "0.1.446", + "version": "0.81.0-preview.6", "description": "Allows controlling your react-native-windows application", "main": "lib-commonjs/index.js", "license": "MIT", @@ -18,7 +18,7 @@ "watch": "rnw-scripts watch" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.343", + "@react-native-windows/automation-channel": "0.81.0-preview.6", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1" }, @@ -37,7 +37,19 @@ "lib-commonjs", "README.md" ], + "beachball": { + "defaultNpmTag": "preview", + "disallowedChangeTypes": [ + "major", + "minor", + "patch", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation/package.json b/packages/@react-native-windows/automation/package.json index 5bf4a25ff05..f648b1f2717 100644 --- a/packages/@react-native-windows/automation/package.json +++ b/packages/@react-native-windows/automation/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation", - "version": "0.3.425", + "version": "0.81.0-preview.6", "description": "UI Automation Suite for React Native Windows Applications", "main": "lib-commonjs/index.js", "repository": { @@ -18,7 +18,7 @@ "watch": "rnw-scripts watch" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.343", + "@react-native-windows/automation-channel": "0.81.0-preview.6", "@react-native-windows/fs": "0.81.0-preview.1", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", @@ -48,7 +48,19 @@ "lib-commonjs", "README.md" ], + "beachball": { + "defaultNpmTag": "preview", + "disallowedChangeTypes": [ + "major", + "minor", + "patch", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/tester/package.json b/packages/@react-native-windows/tester/package.json index 3dc639dfd57..4e73e63c34f 100644 --- a/packages/@react-native-windows/tester/package.json +++ b/packages/@react-native-windows/tester/package.json @@ -34,11 +34,11 @@ "eslint": "^8.19.0", "just-scripts": "^1.3.3", "react-native": "0.81.0-rc.0", - "react-native-platform-override": "^1.9.59", + "react-native-platform-override": "0.81.0-preview.6", "react-native-windows": "0.81.0-preview.6", "typescript": "5.0.4" }, "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@rnw-scripts/babel-node-config/package.json b/packages/@rnw-scripts/babel-node-config/package.json index d9641172ba1..42a73fda5ff 100644 --- a/packages/@rnw-scripts/babel-node-config/package.json +++ b/packages/@rnw-scripts/babel-node-config/package.json @@ -2,6 +2,7 @@ "name": "@rnw-scripts/babel-node-config", "version": "2.3.3", "license": "MIT", + "private": true, "main": "babel.config.js", "repository": { "type": "git", @@ -27,6 +28,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/create-github-releases/package.json b/packages/@rnw-scripts/create-github-releases/package.json index 95ad893819e..116531266b1 100644 --- a/packages/@rnw-scripts/create-github-releases/package.json +++ b/packages/@rnw-scripts/create-github-releases/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/create-github-releases", "version": "1.4.64", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -51,6 +52,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/doxysaurus/package.json b/packages/@rnw-scripts/doxysaurus/package.json index 4668ad78573..9bd7973bdd4 100644 --- a/packages/@rnw-scripts/doxysaurus/package.json +++ b/packages/@rnw-scripts/doxysaurus/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/doxysaurus", "version": "0.4.57", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -57,6 +58,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/eslint-config/package.json b/packages/@rnw-scripts/eslint-config/package.json index 1e58b093aa0..400c2c90813 100644 --- a/packages/@rnw-scripts/eslint-config/package.json +++ b/packages/@rnw-scripts/eslint-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/eslint-config", "version": "1.2.37", + "private": true, "license": "MIT", "main": "eslintrc.js", "repository": { @@ -27,6 +28,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/format-files/package.json b/packages/@rnw-scripts/format-files/package.json index 6feaf3466ce..c8eb94ffee6 100644 --- a/packages/@rnw-scripts/format-files/package.json +++ b/packages/@rnw-scripts/format-files/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/format-files", "version": "1.1.59", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -40,6 +41,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/generate-release-notes/package.json b/packages/@rnw-scripts/generate-release-notes/package.json index 721b8ab6e6d..585d3a19361 100644 --- a/packages/@rnw-scripts/generate-release-notes/package.json +++ b/packages/@rnw-scripts/generate-release-notes/package.json @@ -2,6 +2,7 @@ "name": "@rnw-scripts/generate-release-notes", "version": "1.0.3", "description": "Generates release notes for React Native Windows", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -18,6 +19,5 @@ "engines": { "node": ">= 22" }, - "type": "module", - "private": true + "type": "module" } diff --git a/packages/@rnw-scripts/integrate-rn/package.json b/packages/@rnw-scripts/integrate-rn/package.json index 3c08508554f..c74feab4ca1 100644 --- a/packages/@rnw-scripts/integrate-rn/package.json +++ b/packages/@rnw-scripts/integrate-rn/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/integrate-rn", "version": "1.4.65", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -28,7 +29,7 @@ "async": "^3.2.3", "lodash": "^4.17.15", "ora": "^3.4.0", - "react-native-platform-override": "^1.9.59", + "react-native-platform-override": "0.81.0-preview.6", "semver": "^7.6.3", "source-map-support": "^0.5.19", "yargs": "^16.2.0" @@ -60,6 +61,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true -} + } +} \ No newline at end of file diff --git a/packages/@rnw-scripts/jest-debug-config/package.json b/packages/@rnw-scripts/jest-debug-config/package.json index c95c5f70d55..d66f9f442bb 100644 --- a/packages/@rnw-scripts/jest-debug-config/package.json +++ b/packages/@rnw-scripts/jest-debug-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-debug-config", "version": "1.5.12", + "private": true, "license": "MIT", "main": "jest.debug.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-e2e-config/package.json b/packages/@rnw-scripts/jest-e2e-config/package.json index c54eccded40..120bc8043bd 100644 --- a/packages/@rnw-scripts/jest-e2e-config/package.json +++ b/packages/@rnw-scripts/jest-e2e-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-e2e-config", "version": "1.4.12", + "private": true, "license": "MIT", "main": "jest.e2e.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json b/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json index ab1a08b92f3..493b3a2a6e7 100644 --- a/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json +++ b/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-out-of-tree-snapshot-resolver", "version": "1.1.41", + "private": true, "license": "MIT", "main": "jest-snapshot-resolver.js", "repository": { @@ -15,6 +16,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json b/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json index 27c063c6c53..46940c27a2f 100644 --- a/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json +++ b/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-out-of-tree-resolver", "version": "1.1.40", + "private": true, "license": "MIT", "main": "jest-resolver.js", "repository": { @@ -18,6 +19,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-unittest-config/package.json b/packages/@rnw-scripts/jest-unittest-config/package.json index ca98e5d17cd..d1d176c733f 100644 --- a/packages/@rnw-scripts/jest-unittest-config/package.json +++ b/packages/@rnw-scripts/jest-unittest-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-unittest-config", "version": "1.5.12", + "private": true, "license": "MIT", "main": "jest.unittest.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/just-task/package.json b/packages/@rnw-scripts/just-task/package.json index 0a26b53f588..e1cd1a14e18 100644 --- a/packages/@rnw-scripts/just-task/package.json +++ b/packages/@rnw-scripts/just-task/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/just-task", "version": "2.3.56", + "private": true, "license": "MIT", "main": "just-task.js", "repository": { @@ -43,6 +44,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/promote-release/package.json b/packages/@rnw-scripts/promote-release/package.json index 1068c36efe6..fdc433a2d77 100644 --- a/packages/@rnw-scripts/promote-release/package.json +++ b/packages/@rnw-scripts/promote-release/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/promote-release", "version": "2.1.63", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -45,6 +46,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/take-screenshot/package.json b/packages/@rnw-scripts/take-screenshot/package.json index 16cd8b9ba12..dd4985d8dd5 100644 --- a/packages/@rnw-scripts/take-screenshot/package.json +++ b/packages/@rnw-scripts/take-screenshot/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/take-screenshot", "version": "1.1.63", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -49,6 +50,5 @@ ], "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/ts-config/package.json b/packages/@rnw-scripts/ts-config/package.json index 5afe6f9e185..1c8869418e6 100644 --- a/packages/@rnw-scripts/ts-config/package.json +++ b/packages/@rnw-scripts/ts-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/ts-config", "version": "2.0.6", + "private": true, "license": "MIT", "main": "tsconfig.json", "repository": { @@ -10,6 +11,5 @@ }, "engines": { "node": ">= 22" - }, - "private": true + } } diff --git a/packages/debug-test/package.json b/packages/debug-test/package.json index e4aaa3dbdd4..def71b3e63e 100644 --- a/packages/debug-test/package.json +++ b/packages/debug-test/package.json @@ -8,7 +8,7 @@ "lint:fix": "rnw-scripts lint:fix" }, "devDependencies": { - "@react-native-windows/automation": "^0.3.425", + "@react-native-windows/automation": "0.81.0-preview.6", "@react-native-windows/fs": "0.81.0-preview.1", "@rnw-scripts/eslint-config": "1.2.37", "@rnw-scripts/ts-config": "2.0.6", @@ -19,4 +19,4 @@ "ts-jest": "^29.0.3", "ws": "^6.2.2" } -} +} \ No newline at end of file diff --git a/packages/e2e-test-app-fabric/package.json b/packages/e2e-test-app-fabric/package.json index 965b42fd3d8..6175ec352c9 100644 --- a/packages/e2e-test-app-fabric/package.json +++ b/packages/e2e-test-app-fabric/package.json @@ -14,7 +14,7 @@ "bundle:debug": "npx @react-native-community/cli bundle --entry-file index.js --bundle-output ./windows/x64/Debug/RNTesterApp-Fabric/Bundle/index.windows.bundle --assets-dest ./windows/x64/Debug/RNTesterApp-Fabric/Bundle --platform windows" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.343", + "@react-native-windows/automation-channel": "0.81.0-preview.6", "@react-native-windows/tester": "0.0.1", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", @@ -30,8 +30,8 @@ "@babel/preset-typescript": "^7.8.3", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "17.0.0", - "@react-native-windows/automation": "^0.3.425", - "@react-native-windows/automation-commands": "^0.1.446", + "@react-native-windows/automation": "0.81.0-preview.6", + "@react-native-windows/automation-commands": "0.81.0-preview.6", "@react-native/metro-config": "0.81.0", "@rnw-scripts/babel-node-config": "2.3.3", "@rnw-scripts/babel-react-native-config": "0.0.0", @@ -55,4 +55,4 @@ "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/e2e-test-app/package.json b/packages/e2e-test-app/package.json index 6dadf2e49d3..80d3d96c7d0 100644 --- a/packages/e2e-test-app/package.json +++ b/packages/e2e-test-app/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@react-native-picker/picker": "^2.5.1", - "@react-native-windows/automation-channel": "^0.12.343", + "@react-native-windows/automation-channel": "0.81.0-preview.6", "@react-native-windows/tester": "0.0.1", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", @@ -31,8 +31,8 @@ "@babel/preset-typescript": "^7.8.3", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "17.0.0", - "@react-native-windows/automation": "^0.3.425", - "@react-native-windows/automation-commands": "^0.1.446", + "@react-native-windows/automation": "0.81.0-preview.6", + "@react-native-windows/automation-commands": "0.81.0-preview.6", "@react-native/metro-config": "0.81.0", "@rnw-scripts/babel-node-config": "2.3.3", "@rnw-scripts/babel-react-native-config": "0.0.0", diff --git a/packages/integration-test-app/package.json b/packages/integration-test-app/package.json index 984ac27de7d..fdc0ad7d300 100644 --- a/packages/integration-test-app/package.json +++ b/packages/integration-test-app/package.json @@ -10,7 +10,7 @@ "integration-test": "jest --config jest.integration.config.js --runInBand --verbose" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.343", + "@react-native-windows/automation-channel": "0.81.0-preview.6", "@react-native-windows/fs": "0.81.0-preview.1", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", diff --git a/packages/react-native-platform-override/package.json b/packages/react-native-platform-override/package.json index 32666a2cc45..343d3c17ac9 100644 --- a/packages/react-native-platform-override/package.json +++ b/packages/react-native-platform-override/package.json @@ -1,6 +1,6 @@ { "name": "react-native-platform-override", - "version": "1.9.59", + "version": "0.81.0-preview.6", "description": "react-native-platform-override offers CLI tools to manage Javascript overrides in out-of-tree React Native platforms", "license": "MIT", "main": "./lib-commonjs/Api.js", @@ -72,6 +72,18 @@ "peerDependencies": { "react-native": "*" }, + "beachball": { + "defaultNpmTag": "preview", + "disallowedChangeTypes": [ + "major", + "minor", + "patch", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 22" }, @@ -82,4 +94,4 @@ "!lib-commonjs/test/**" ], "private": true -} +} \ No newline at end of file diff --git a/packages/react-native-windows-init/package.json b/packages/react-native-windows-init/package.json index 40d7fb1049f..6f2960458bb 100644 --- a/packages/react-native-windows-init/package.json +++ b/packages/react-native-windows-init/package.json @@ -1,6 +1,6 @@ { "name": "react-native-windows-init", - "version": "1.4.82", + "version": "0.81.0-preview.6", "description": "CLI to add react-native-windows to an existing react-native project", "main": "index.js", "repository": { @@ -62,11 +62,15 @@ "README.md" ], "beachball": { + "defaultNpmTag": "preview", "disallowedChangeTypes": [ - "prerelease", + "major", + "minor", + "patch", "premajor", "preminor", "prepatch" ] - } -} + }, + "promoteRelease": true +} \ No newline at end of file diff --git a/vnext/package.json b/vnext/package.json index e46bff29416..49eaf791ef4 100644 --- a/vnext/package.json +++ b/vnext/package.json @@ -85,7 +85,7 @@ "prettier": "2.8.8", "react": "19.1.0", "react-native": "0.81.0-rc.0", - "react-native-platform-override": "^1.9.59", + "react-native-platform-override": "0.81.0-preview.6", "react-refresh": "^0.14.0", "typescript": "5.0.4" }, @@ -151,4 +151,4 @@ "engines": { "node": ">= 22" } -} +} \ No newline at end of file