Skip to content

Commit c84ec16

Browse files
cipolleschimeta-codesync[bot]
authored andcommitted
Consolidate Hermes version files and simplify JS release scripts (#56737)
Summary: Pull Request resolved: #56737 - Remove `sdks/.hermesversion` from `package.json` files array — only `.hermesv1version` remains - Simplify `hermes-utils.js`: remove `readHermesTag()`, `HERMES_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 `--tag` and `--hermes-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 Reviewed By: cortinico Differential Revision: D104380961
1 parent ce68600 commit c84ec16

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. hermes-250829098.0.0. Used both as the .hermesv1version 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)