Skip to content

Commit 113e857

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 200a390 commit 113e857

6 files changed

Lines changed: 102 additions & 294 deletions

File tree

packages/react-native/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@
127127
"scripts/xcode/ccache-clang++.sh",
128128
"scripts/xcode/ccache.conf",
129129
"scripts/xcode/with-environment.sh",
130-
"sdks/.hermesversion",
131130
"sdks/.hermesv1version",
132131
"sdks/hermes-engine",
133132
"sdks/hermesc",

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

Lines changed: 10 additions & 41 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

@@ -44,62 +39,36 @@ describe('hermes-utils', () => {
4439

4540
describe('Versioning Hermes', () => {
4641
describe('readHermesTag', () => {
47-
it('should throw if .hermesversion does not exist', () => {
48-
expect(() => {
49-
readHermesTag();
50-
}).toThrow('[Hermes] .hermesversion does not exist.');
51-
});
52-
it('should fail if hermes tag is empty', () => {
53-
fs.writeFileSync(path.join(SDKS_DIR, '.hermesversion'), '');
54-
expect(() => {
55-
readHermesTag();
56-
}).toThrow('[Hermes] .hermesversion file is empty.');
57-
});
58-
it('should return tag from .hermesversion if file exists', () => {
59-
fs.writeFileSync(path.join(SDKS_DIR, '.hermesversion'), hermesTag);
60-
expect(readHermesTag()).toEqual(hermesTag);
61-
});
62-
});
63-
64-
describe('readHermesV1Tag', () => {
6542
it('should throw if .hermesv1version does not exist', () => {
6643
expect(() => {
67-
readHermesV1Tag();
44+
readHermesTag();
6845
}).toThrow('[Hermes] .hermesv1version does not exist.');
6946
});
70-
it('should fail if hermes v1 tag is empty', () => {
47+
it('should fail if hermes tag is empty', () => {
7148
fs.writeFileSync(path.join(SDKS_DIR, '.hermesv1version'), '');
7249
expect(() => {
73-
readHermesV1Tag();
50+
readHermesTag();
7451
}).toThrow('[Hermes] .hermesv1version file is empty.');
7552
});
7653
it('should return tag from .hermesv1version if file exists', () => {
77-
fs.writeFileSync(path.join(SDKS_DIR, '.hermesv1version'), hermesV1Tag);
78-
expect(readHermesV1Tag()).toEqual(hermesV1Tag);
54+
fs.writeFileSync(path.join(SDKS_DIR, '.hermesv1version'), hermesTag);
55+
expect(readHermesTag()).toEqual(hermesTag);
7956
});
8057
});
8158

8259
describe('setHermesTag', () => {
83-
it('should write tag to .hermesversion file', async () => {
84-
await setHermesTag(hermesTag, hermesV1Tag);
85-
expect(
86-
fs.readFileSync(path.join(SDKS_DIR, '.hermesversion'), {
87-
encoding: 'utf8',
88-
flag: 'r',
89-
}),
90-
).toEqual(hermesTag);
91-
60+
it('should write tag to .hermesv1version file', async () => {
61+
await setHermesTag(hermesTag);
9262
expect(
9363
fs.readFileSync(path.join(SDKS_DIR, '.hermesv1version'), {
9464
encoding: 'utf8',
9565
flag: 'r',
9666
}),
97-
).toEqual(hermesV1Tag);
67+
).toEqual(hermesTag);
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(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: 27 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ type BuildType = 'dry-run' | 'release' | 'nightly';
2020
*/
2121

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

2625
function readHermesTag() /*: string */ {
2726
if (fs.existsSync(HERMES_TAG_FILE_PATH)) {
@@ -32,25 +31,6 @@ function readHermesTag() /*: string */ {
3231
})
3332
.trim();
3433

35-
if (data.length > 0) {
36-
return data;
37-
} else {
38-
throw new Error('[Hermes] .hermesversion file is empty.');
39-
}
40-
}
41-
42-
throw new Error('[Hermes] .hermesversion does not exist.');
43-
}
44-
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-
5434
if (data.length > 0) {
5535
return data;
5636
} else {
@@ -61,51 +41,40 @@ function readHermesV1Tag() /*: string */ {
6141
throw new Error('[Hermes] .hermesv1version does not exist.');
6242
}
6343

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-
});
76-
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-
});
44+
async function setHermesTag(hermesTag /*: string */) {
45+
if (!fs.existsSync(SDKS_DIR)) {
46+
fs.mkdirSync(SDKS_DIR, {recursive: true});
47+
}
8348

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-
}
49+
if (!fs.existsSync(HERMES_TAG_FILE_PATH)) {
50+
fs.writeFileSync(HERMES_TAG_FILE_PATH, hermesTag.trim());
51+
return;
9252
}
93-
}
9453

95-
async function setHermesTag(
96-
hermesTag /*: string */,
97-
hermesV1Tag /*: string */,
98-
) {
99-
if (!fs.existsSync(SDKS_DIR)) {
100-
fs.mkdirSync(SDKS_DIR, {recursive: true});
54+
const previousHermesTag = fs.readFileSync(HERMES_TAG_FILE_PATH, {
55+
encoding: 'utf8',
56+
flag: 'r',
57+
});
58+
59+
if (previousHermesTag.trim() === hermesTag.trim()) {
60+
console.log('[Hermes] .hermesv1version file is unchanged.');
61+
return;
10162
}
10263

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

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

0 commit comments

Comments
 (0)