Skip to content

Commit 4b96dc4

Browse files
cipolleschimeta-codesync[bot]
authored andcommitted
Consolidate Hermes version files and simplify JS release scripts (#56737)
Summary: Pull Request resolved: #56737 - Remove `sdks/.hermesv1version` from `package.json` files array — only `.hermesversion` remains - Simplify `hermes-utils.js`: remove `readHermesV1Tag()`, `HERMES_V1_TAG_FILE_PATH`; `setHermesTag()` takes single argument - Simplify `scripts/releases/utils/hermes-utils.js`: single version in `getLatestHermesNightlyVersion()` and `updateHermesRuntimeDependenciesVersions()` - Simplify `bump-hermes-version.js`: remove `--v1-tag` and `--hermes-v1-version` CLI options - Simplify `release-hermes-for-branch-cut.js`: remove legacy branch/workflow/PR logic, keep only single Hermes branch ## Changelog: [General][Changed] - Simplified build JS Hermes infrastructure for the Release ## Test plan - [x] JS tests: `yarn jest --no-watchman hermes-utils-test.js` — 5/5 tests pass Differential Revision: D104380961
1 parent 87efe89 commit 4b96dc4

10 files changed

Lines changed: 101 additions & 301 deletions

File tree

packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/DependencyUtils.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ internal object DependencyUtils {
147147
coordinates: Coordinates,
148148
): List<Triple<String, String, String>> {
149149
val dependencySubstitution = mutableListOf<Triple<String, String, String>>()
150-
val hermesVersionString =
151-
"${coordinates.hermesGroupString}:hermes-android:${coordinates.hermesVersionString}"
150+
val hermesVersionString = "${coordinates.hermesGroupString}:hermes-android:${coordinates.hermesVersionString}"
152151
dependencySubstitution.add(
153152
Triple(
154153
"com.facebook.react:react-native",

packages/react-native/ReactCommon/hermes/executor/HermesExecutorFactory.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ class DecoratedRuntime : public jsi::WithRuntimeDecorator<ReentrancyCheck> {
110110
(void)debuggerName;
111111
}
112112

113-
~DecoratedRuntime() {}
113+
~DecoratedRuntime() {
114+
}
114115

115116
private:
116117
std::shared_ptr<Runtime> runtime_;

packages/react-native/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@
128128
"scripts/xcode/ccache.conf",
129129
"scripts/xcode/with-environment.sh",
130130
"sdks/.hermesversion",
131-
"sdks/.hermesv1version",
132131
"sdks/hermes-engine",
133132
"sdks/hermesc",
134133
"settings.gradle.kts",
@@ -176,7 +175,7 @@
176175
"base64-js": "^1.5.1",
177176
"commander": "^12.0.0",
178177
"flow-enums-runtime": "^0.0.6",
179-
"hermes-compiler": "0.0.0",
178+
"hermes-compiler": "250829098.0.13",
180179
"invariant": "^2.2.4",
181180
"memoize-one": "^5.0.0",
182181
"metro-runtime": "^0.84.3",

packages/react-native/scripts/cocoapods/jsengine.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def setup_hermes!(react_native_path: "../node_modules/react-native")
1313
react_native_dir = Pod::Config.instance.installation_root.join(react_native_path)
1414
# This `:tag => hermestag` below is only to tell CocoaPods to update hermes-engine when React Native version changes.
1515
# We have custom logic to compute the source for hermes-engine. See sdks/hermes-engine/*
16-
hermestag_file_name = ".hermesv1version"
16+
hermestag_file_name = ".hermesversion"
1717
hermestag_file = File.join(react_native_dir, "sdks", hermestag_file_name)
1818
hermestag = File.exist?(hermestag_file) ? File.read(hermestag_file).strip : ''
1919
pod 'hermes-engine', :podspec => "#{react_native_path}/sdks/hermes-engine/hermes-engine.podspec", :tag => hermestag

packages/react-native/scripts/hermes/__tests__/hermes-utils-test.js

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,12 @@
1010

1111
import * as path from 'path';
1212

13-
const {
14-
readHermesTag,
15-
readHermesV1Tag,
16-
setHermesTag,
17-
} = require('../hermes-utils');
13+
const {readHermesTag, setHermesTag} = require('../hermes-utils');
1814
// $FlowFixMe[untyped-import] (OSS) memfs
1915
const {memfs} = require('memfs');
2016

2117
const hermesTag =
2218
'hermes-2022-04-28-RNv0.69.0-15d07c2edd29a4ea0b8f15ab0588a0c1adb1200f';
23-
const hermesV1Tag = '250829098.0.0';
2419
const ROOT_DIR = path.normalize(path.join(__dirname, '../../..'));
2520
const SDKS_DIR = path.join(ROOT_DIR, 'sdks');
2621

@@ -61,45 +56,19 @@ describe('hermes-utils', () => {
6156
});
6257
});
6358

64-
describe('readHermesV1Tag', () => {
65-
it('should throw if .hermesv1version does not exist', () => {
66-
expect(() => {
67-
readHermesV1Tag();
68-
}).toThrow('[Hermes] .hermesv1version does not exist.');
69-
});
70-
it('should fail if hermes v1 tag is empty', () => {
71-
fs.writeFileSync(path.join(SDKS_DIR, '.hermesv1version'), '');
72-
expect(() => {
73-
readHermesV1Tag();
74-
}).toThrow('[Hermes] .hermesv1version file is empty.');
75-
});
76-
it('should return tag from .hermesv1version if file exists', () => {
77-
fs.writeFileSync(path.join(SDKS_DIR, '.hermesv1version'), hermesV1Tag);
78-
expect(readHermesV1Tag()).toEqual(hermesV1Tag);
79-
});
80-
});
81-
8259
describe('setHermesTag', () => {
8360
it('should write tag to .hermesversion file', async () => {
84-
await setHermesTag(hermesTag, hermesV1Tag);
61+
await setHermesTag(hermesTag);
8562
expect(
8663
fs.readFileSync(path.join(SDKS_DIR, '.hermesversion'), {
8764
encoding: 'utf8',
8865
flag: 'r',
8966
}),
9067
).toEqual(hermesTag);
91-
92-
expect(
93-
fs.readFileSync(path.join(SDKS_DIR, '.hermesv1version'), {
94-
encoding: 'utf8',
95-
flag: 'r',
96-
}),
97-
).toEqual(hermesV1Tag);
9868
});
9969
it('should set Hermes tag and read it back', async () => {
100-
await setHermesTag(hermesTag, hermesV1Tag);
70+
await setHermesTag(hermesTag);
10171
expect(readHermesTag()).toEqual(hermesTag);
102-
expect(readHermesV1Tag()).toEqual(hermesV1Tag);
10372
});
10473
});
10574
});

packages/react-native/scripts/hermes/bump-hermes-version.js

Lines changed: 14 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -28,88 +28,41 @@ const inquirer = require('inquirer');
2828
const {exit} = require('shelljs');
2929
const yargs = require('yargs');
3030

31-
let argv = yargs
32-
.option('t', {
33-
alias: 'tag',
34-
describe:
35-
'Hermes release tag to use for this React Native release, ex. hermes-2022-02-21-RNv0.68.0. This tag will be used when building Hermes from source.',
36-
required: true,
37-
})
38-
.option('s', {
39-
alias: 'v1-tag',
40-
describe:
41-
'Hermes V1 release tag to use for this React Native release, ex. 250829098.0.0. This tag will be used when building Hermes V1 from source.',
42-
required: true,
43-
})
44-
.option('h', {
45-
alias: 'hermes-version',
46-
describe:
47-
'Hermes version to use for this React Native release, ex. 250829098.0.0. This version will be used when consuming Hermes from a prebuilt package.',
48-
required: false,
49-
})
50-
.option('v', {
51-
alias: 'hermes-v1-version',
52-
describe:
53-
'Hermes V1 version to use for this React Native release, ex. 250829098.0.0. This version will be used when consuming Hermes V1 from a prebuilt package.',
54-
required: false,
55-
}).argv;
31+
let argv = yargs.option('v', {
32+
alias: 'version',
33+
describe:
34+
'Hermes version to use for this React Native release, ex. 250829098.0.0. Used both as the .hermesversion tag (for building from source) and as the prebuilt package version. If omitted, the latest published version is fetched from NPM.',
35+
required: false,
36+
}).argv;
5637

5738
async function main() {
5839
// $FlowFixMe[prop-missing]
59-
const hermesTag = argv.tag;
60-
// $FlowFixMe[prop-missing]
61-
const hermesV1Tag = argv['v1-tag'];
62-
// $FlowFixMe[prop-missing]
63-
let hermesVersion = argv['hermes-version'];
64-
// $FlowFixMe[prop-missing]
65-
let hermesV1Version = argv['hermes-v1-version'];
40+
let hermesVersion = argv.version;
6641

6742
if (!hermesVersion) {
6843
console.log(
6944
'No Hermes version provided. Fetching the latest version from NPM...',
7045
);
7146
hermesVersion = await getPackageVersionStrByTag(
72-
'hermes-compiler',
73-
'latest-v0',
74-
);
75-
}
76-
77-
if (!hermesV1Version) {
78-
console.log(
79-
'No Hermes V1 version provided. Fetching the latest version from NPM...',
80-
);
81-
hermesV1Version = await getPackageVersionStrByTag(
8247
'hermes-compiler',
8348
'latest-v1',
8449
);
8550
}
8651

87-
const {confirmHermesVersions} = await inquirer.prompt({
52+
const {confirmHermesVersion} = await inquirer.prompt({
8853
type: 'confirm',
89-
name: 'confirmHermesVersions',
90-
message: `Do you want to use the Hermes version "${hermesVersion}" and Hermes V1 version "${hermesV1Version}" (for prebuilt)?`,
54+
name: 'confirmHermesVersion',
55+
message: `Do you want to use the Hermes version "${hermesVersion}"?`,
9156
});
9257

93-
if (!confirmHermesVersions) {
58+
if (!confirmHermesVersion) {
9459
console.log('Aborting.');
9560
return;
9661
}
9762

98-
const {confirmHermesTags} = await inquirer.prompt({
99-
type: 'confirm',
100-
name: 'confirmHermesTags',
101-
message: `Do you want to use the Hermes release tagged "${hermesTag}" and Hermes V1 release tagged "${hermesV1Tag}" (for building from source)?`,
102-
});
103-
104-
if (!confirmHermesTags) {
105-
console.log('Aborting.');
106-
return;
107-
}
108-
109-
await setHermesTag(hermesTag, hermesV1Tag);
110-
111-
await updateHermesCompilerVersionInDependencies(hermesV1Version);
112-
await updateHermesRuntimeDependenciesVersions(hermesVersion, hermesV1Version);
63+
await setHermesTag(hermesVersion);
64+
await updateHermesCompilerVersionInDependencies(hermesVersion);
65+
await updateHermesRuntimeDependenciesVersions(hermesVersion);
11366
}
11467

11568
void main().then(() => {

packages/react-native/scripts/hermes/hermes-utils.js

Lines changed: 24 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ type BuildType = 'dry-run' | 'release' | 'nightly';
2121

2222
const SDKS_DIR = path.normalize(path.join(__dirname, '..', '..', 'sdks'));
2323
const HERMES_TAG_FILE_PATH = path.join(SDKS_DIR, '.hermesversion');
24-
const HERMES_V1_TAG_FILE_PATH = path.join(SDKS_DIR, '.hermesv1version');
2524

2625
function readHermesTag() /*: string */ {
2726
if (fs.existsSync(HERMES_TAG_FILE_PATH)) {
@@ -42,70 +41,40 @@ function readHermesTag() /*: string */ {
4241
throw new Error('[Hermes] .hermesversion does not exist.');
4342
}
4443

45-
function readHermesV1Tag() /*: string */ {
46-
if (fs.existsSync(HERMES_V1_TAG_FILE_PATH)) {
47-
const data = fs
48-
.readFileSync(HERMES_V1_TAG_FILE_PATH, {
49-
encoding: 'utf8',
50-
flag: 'r',
51-
})
52-
.trim();
53-
54-
if (data.length > 0) {
55-
return data;
56-
} else {
57-
throw new Error('[Hermes] .hermesv1version file is empty.');
58-
}
44+
async function setHermesTag(hermesTag /*: string */) {
45+
if (!fs.existsSync(SDKS_DIR)) {
46+
fs.mkdirSync(SDKS_DIR, {recursive: true});
5947
}
6048

61-
throw new Error('[Hermes] .hermesv1version does not exist.');
62-
}
63-
64-
async function updateHermesTag(
65-
tagFile /*: string */,
66-
hermesTag /*: string */,
67-
prompt /*: string */,
68-
) {
69-
if (!fs.existsSync(tagFile)) {
70-
fs.writeFileSync(tagFile, hermesTag.trim());
71-
} else {
72-
const previousHermesTag = fs.readFileSync(tagFile, {
73-
encoding: 'utf8',
74-
flag: 'r',
75-
});
49+
if (!fs.existsSync(HERMES_TAG_FILE_PATH)) {
50+
fs.writeFileSync(HERMES_TAG_FILE_PATH, hermesTag.trim());
51+
return;
52+
}
7653

77-
if (previousHermesTag.trim() !== hermesTag.trim()) {
78-
const {confirmHermesTag} = await inquirer.prompt({
79-
type: 'confirm',
80-
name: 'confirmHermesTag',
81-
message: `Do you want to use updtate release tag for ${prompt} from "${previousHermesTag}" to "${hermesTag}"?`,
82-
});
54+
const previousHermesTag = fs.readFileSync(HERMES_TAG_FILE_PATH, {
55+
encoding: 'utf8',
56+
flag: 'r',
57+
});
8358

84-
if (confirmHermesTag) {
85-
fs.writeFileSync(tagFile, hermesTag.trim());
86-
} else {
87-
console.log(`[${prompt}] .hermesversion file is unchanged.`);
88-
}
89-
} else {
90-
console.log(`[${prompt}] .hermesversion file is unchanged.`);
91-
}
59+
if (previousHermesTag.trim() === hermesTag.trim()) {
60+
console.log('[Hermes] .hermesversion file is unchanged.');
61+
return;
9262
}
93-
}
9463

95-
async function setHermesTag(
96-
hermesTag /*: string */,
97-
hermesV1Tag /*: string */,
98-
) {
99-
if (!fs.existsSync(SDKS_DIR)) {
100-
fs.mkdirSync(SDKS_DIR, {recursive: true});
101-
}
64+
const {confirmHermesTag} = await inquirer.prompt({
65+
type: 'confirm',
66+
name: 'confirmHermesTag',
67+
message: `Do you want to update release tag for Hermes from "${previousHermesTag}" to "${hermesTag}"?`,
68+
});
10269

103-
await updateHermesTag(HERMES_TAG_FILE_PATH, hermesTag, 'Hermes');
104-
await updateHermesTag(HERMES_V1_TAG_FILE_PATH, hermesV1Tag, 'Hermes V1');
70+
if (confirmHermesTag) {
71+
fs.writeFileSync(HERMES_TAG_FILE_PATH, hermesTag.trim());
72+
} else {
73+
console.log('[Hermes] .hermesversion file is unchanged.');
74+
}
10575
}
10676

10777
module.exports = {
10878
readHermesTag,
109-
readHermesV1Tag,
11079
setHermesTag,
11180
};

0 commit comments

Comments
 (0)