Skip to content

Commit 732f6da

Browse files
committed
chore: update to nx 21
1 parent 8ddc342 commit 732f6da

10 files changed

Lines changed: 275 additions & 416 deletions

File tree

.ado/scripts/prepublish-check.mjs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,11 @@ const RNMACOS_LATEST = "react-native-macos@latest";
1212
const RNMACOS_NEXT = "react-native-macos@next";
1313

1414
/**
15-
* @typedef {import("nx/src/command-line/release/version").ReleaseVersionGeneratorSchema} ReleaseVersionGeneratorSchema;
15+
* @typedef {import("nx/src/config/nx-json").NxReleaseVersionConfiguration} NxReleaseVersionConfiguration;
1616
* @typedef {{
1717
* defaultBase: string;
1818
* release: {
19-
* version: {
20-
* generatorOptions: ReleaseVersionGeneratorSchema;
21-
* };
19+
* version: NxReleaseVersionConfiguration;
2220
* };
2321
* }} NxConfig;
2422
* @typedef {{
@@ -273,36 +271,36 @@ function enablePublishing(config, currentBranch, { npmTag: tag, prerelease, isNe
273271
}
274272

275273
// Determines whether we need to add "nightly" or "rc" to the version string.
276-
const { generatorOptions } = release.version;
277-
if (generatorOptions.preid !== prerelease) {
274+
const { versionActionsOptions = {} } = release.version;
275+
if (versionActionsOptions.preid !== prerelease) {
278276
if (prerelease) {
279-
errors.push(`'release.version.generatorOptions.preid' must be set to '${prerelease}'`);
280-
generatorOptions.preid = prerelease;
277+
errors.push(`'release.version.versionActionsOptions.preid' must be set to '${prerelease}'`);
278+
versionActionsOptions.preid = prerelease;
281279
} else {
282-
errors.push(`'release.version.generatorOptions.preid' must be removed`);
283-
generatorOptions.preid = undefined;
280+
errors.push(`'release.version.versionActionsOptions.preid' must be removed`);
281+
versionActionsOptions.preid = undefined;
284282
}
285283
}
286284

287285
// What the published version should be tagged as e.g., "latest" or "nightly".
288-
const { currentVersionResolverMetadata } = generatorOptions;
289-
if (currentVersionResolverMetadata?.tag !== tag) {
290-
errors.push(`'release.version.generatorOptions.currentVersionResolverMetadata.tag' must be set to '${tag}'`);
291-
generatorOptions.currentVersionResolverMetadata ??= {};
292-
generatorOptions.currentVersionResolverMetadata.tag = tag;
286+
const currentVersionResolverMetadata = /** @type {{ tag?: string }} */ (versionActionsOptions.currentVersionResolverMetadata || {});
287+
if (currentVersionResolverMetadata.tag !== tag) {
288+
errors.push(`'release.version.versionActionsOptions.currentVersionResolverMetadata.tag' must be set to '${tag}'`);
289+
versionActionsOptions.currentVersionResolverMetadata ??= {};
290+
/** @type {any} */ (versionActionsOptions.currentVersionResolverMetadata).tag = tag;
293291
}
294292

295293
// If we're demoting a branch, we will need to create a new tag. This will
296294
// make Nx trip if we don't specify a fallback. In all other scenarios, the
297295
// tags should exist and therefore prefer it to fail.
298296
if (isNewTag) {
299-
if (generatorOptions.fallbackCurrentVersionResolver !== "disk") {
300-
errors.push("'release.version.generatorOptions.fallbackCurrentVersionResolver' must be set to 'disk'");
301-
generatorOptions.fallbackCurrentVersionResolver = "disk";
297+
if (versionActionsOptions.fallbackCurrentVersionResolver !== "disk") {
298+
errors.push("'release.version.versionActionsOptions.fallbackCurrentVersionResolver' must be set to 'disk'");
299+
versionActionsOptions.fallbackCurrentVersionResolver = "disk";
302300
}
303-
} else if (typeof generatorOptions.fallbackCurrentVersionResolver === "string") {
304-
errors.push("'release.version.generatorOptions.fallbackCurrentVersionResolver' must be removed");
305-
generatorOptions.fallbackCurrentVersionResolver = undefined;
301+
} else if (typeof versionActionsOptions.fallbackCurrentVersionResolver === "string") {
302+
errors.push("'release.version.versionActionsOptions.fallbackCurrentVersionResolver' must be removed");
303+
versionActionsOptions.fallbackCurrentVersionResolver = undefined;
306304
}
307305

308306
if (errors.length > 0) {

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,6 @@ vendor/
178178
# Nx
179179
.nx/cache
180180
.nx/workspace-data
181+
.cursor/rules/nx-rules.mdc
182+
.github/instructions/nx.instructions.md
181183
# macOS]

nx.json

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
"defaultBase": "0.76-stable",
44
"targetDefaults": {
55
"build": {
6-
"dependsOn": [
7-
"^build"
8-
]
6+
"dependsOn": ["^build"]
97
}
108
},
119
"release": {
@@ -16,21 +14,18 @@
1614
},
1715
"workspaceChangelog": false
1816
},
19-
"projects": [
20-
"packages/react-native",
21-
"packages/virtualized-lists"
22-
],
23-
"projectsRelationship": "independent",
17+
"projects": ["packages/react-native", "packages/virtualized-lists"],
2418
"versionPlans": true,
2519
"version": {
26-
"generator": "@react-native-mac/nx-release-version:release-version",
27-
"generatorOptions": {
20+
"versionActions": "@react-native-macos/nx-release-version",
21+
"versionActionsOptions": {
2822
"currentVersionResolver": "registry",
2923
"currentVersionResolverMetadata": {
3024
"tag": "v0.76-stable"
3125
},
3226
"fallbackCurrentVersionResolver": "disk"
33-
}
27+
},
28+
"useLegacyVersioning": false
3429
}
3530
}
3631
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"@babel/preset-flow": "^7.24.7",
5050
"@definitelytyped/dtslint": "^0.0.127",
5151
"@jest/create-cache-key-function": "^29.6.3",
52-
"@nx/js": "~20.0.0",
52+
"@nx/js": "21.2.4",
5353
"@pkgjs/parseargs": "^0.11.0",
5454
"@react-native/metro-babel-transformer": "0.76.9",
5555
"@react-native/metro-config": "0.76.9",
@@ -94,7 +94,7 @@
9494
"mkdirp": "^0.5.1",
9595
"node-fetch": "^2.2.0",
9696
"nullthrows": "^1.1.1",
97-
"nx": "~20.0.0",
97+
"nx": "21.2.4",
9898
"prettier": "2.8.8",
9999
"prettier-plugin-hermes-parser": "0.23.1",
100100
"react": "18.3.1",
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# os/nx-release-version
2+
3+
Nx (v21) Version Actions for React Native macOS releases.
4+
5+
## Overview
6+
7+
This package provides custom Version Actions for Nx 21's modern release system (`useLegacyVersioning: false`). It extends the built-in `JsVersionActions` to include React Native platform-specific artifact updates.
8+
9+
## What it does
10+
11+
When versioning the `react-native-macos` project, this package automatically:
12+
13+
1. **Updates standard package.json files** (via the base `JsVersionActions`)
14+
2. **Updates React Native platform artifacts**:
15+
- `ReactAndroid/gradle.properties`
16+
- `ReactNativeVersion.java`
17+
- `RCTVersion.m`
18+
- `ReactNativeVersion.h`
19+
- `ReactNativeVersion.js`
20+
3. **Creates a `.rnm-publish` marker file** to indicate successful versioning
21+

packages/nx-release-version/generators.json

Lines changed: 0 additions & 12 deletions
This file was deleted.

packages/nx-release-version/index.js

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
// @ts-check
22

3-
const { releaseVersionGenerator } = require('@nx/js/src/generators/release-version/release-version');
3+
const {REPO_ROOT} = require('../../scripts/consts');
4+
const JsVersionActions = require('@nx/js/src/release/version-actions').default;
45
const fs = require('node:fs');
56
const path = require('node:path');
6-
const { REPO_ROOT } = require('../../scripts/consts');
77

88
async function runSetVersion() {
9-
const rnmPkgJson = require.resolve('react-native-macos/package.json');
10-
const { REPO_ROOT } = require('../../scripts/consts');
11-
const { updateReactNativeArtifacts } = require('../../scripts/releases/set-rn-artifacts-version');
9+
const rnmPkgJsonPath = path.join(REPO_ROOT, 'packages', 'react-native', 'package.json');
10+
const {updateReactNativeArtifacts} = require('../../scripts/releases/set-rn-artifacts-version');
1211

13-
const manifest = fs.readFileSync(rnmPkgJson, { encoding: 'utf-8' });
14-
const { version } = JSON.parse(manifest);
12+
const manifest = fs.readFileSync(rnmPkgJsonPath, {encoding: 'utf-8'});
13+
const {version} = JSON.parse(manifest);
1514

1615
await updateReactNativeArtifacts(version);
1716

@@ -64,21 +63,42 @@ async function runSetVersion() {
6463
];
6564
}
6665

67-
/** @type {typeof releaseVersionGenerator} */
68-
module.exports = async function(tree, options) {
69-
const { data, callback } = await releaseVersionGenerator(tree, options);
70-
return {
71-
data,
72-
callback: async (tree, options) => {
73-
const result = await callback(tree, options);
66+
/**
67+
* Custom afterAllProjectsVersioned hook for React Native macOS
68+
* Updates React Native artifacts after all projects have been versioned
69+
* @param {string} _cwd - Current working directory (unused)
70+
* @param {object} _opts - Options object containing versioning information (unused)
71+
* @returns {Promise<{changedFiles: string[], deletedFiles: string[]}>}
72+
*/
73+
const afterAllProjectsVersioned = async (_cwd, _opts) => {
74+
const changedFiles = [];
75+
76+
try {
77+
// Create the .rnm-publish file to indicate versioning has occurred
78+
fs.writeFileSync(path.join(REPO_ROOT, '.rnm-publish'), '');
79+
80+
// Update React Native artifacts
81+
const versionedFiles = await runSetVersion();
82+
83+
// Return the versioned files so Nx can track them
84+
changedFiles.push(...versionedFiles);
7485

75-
const versionedFiles = await runSetVersion();
76-
if (versionedFiles) {
77-
const changedFiles = Array.isArray(result) ? result : result.changedFiles;
78-
changedFiles.push(...versionedFiles);
79-
}
86+
console.log('✅ Updated React Native artifacts');
87+
console.log('🏷️ Created .rnm-publish marker file');
8088

81-
return result;
82-
},
89+
} catch (error) {
90+
console.error('Failed to update React Native artifacts:', error);
91+
const errorMessage = error instanceof Error ? error.message : String(error);
92+
console.error(`❌ Failed to update React Native artifacts: ${errorMessage}`);
93+
throw error;
94+
}
95+
96+
return {
97+
changedFiles,
98+
deletedFiles: [],
8399
};
84100
};
101+
102+
module.exports = JsVersionActions;
103+
module.exports.default = JsVersionActions;
104+
module.exports.afterAllProjectsVersioned = afterAllProjectsVersioned;
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
{
2-
"private": true,
3-
"name": "@react-native-mac/nx-release-version",
2+
"name": "@react-native-macos/nx-release-version",
43
"version": "0.0.1-dev",
5-
"description": "Nx Release plugin that adds post-versioning logic",
4+
"description": "Nx Release Version Actions for React Native macOS",
65
"homepage": "https://github.com/microsoft/react-native-macos/tree/HEAD/packages/nx-release-version#readme",
76
"license": "MIT",
87
"files": [
9-
"generators.json",
10-
"index.js",
11-
"schema.json"
8+
"index.js"
129
],
1310
"main": "index.js",
1411
"repository": {
@@ -17,14 +14,13 @@
1714
"directory": "packages/nx-release-version"
1815
},
1916
"dependencies": {
20-
"@nx/js": "~20.0.0"
17+
"@nx/js": "21.2.4"
2118
},
2219
"devDependencies": {
2320
"@rnx-kit/tsconfig": "^2.0.0",
2421
"typescript": "^5.6.3"
2522
},
2623
"engines": {
2724
"node": ">=18"
28-
},
29-
"generators": "./generators.json"
25+
}
3026
}

packages/nx-release-version/schema.json

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)