Skip to content

Commit eaa9d02

Browse files
Riccardo Cipolleschimeta-codesync[bot]
authored andcommitted
Remove V0 nightly download path from ios-prebuild
Summary: The legacy Hermes V0 nightly dist-tag ('nightly') has been removed. This commit cleans up the ios-prebuild Hermes download logic: - Remove the 'nightly' sentinel string and getNightlyVersionFromNPM() - Remove DOWNLOAD_PREBUILT_NIGHTLY_TARBALL source type and downloadPrebuiltNightlyTarball() - Remove getNightlyTarballUrl() (was fetching from Maven Snapshots for V0 nightlies) - Rename getLatestV1VersionFromNPM -> getLatestHermesVersionFromNPM - Update prepare-app-utils.js to use 'latest-v1' instead of 'nightly' for HERMES_VERSION Differential Revision: D104649632
1 parent c89467a commit eaa9d02

3 files changed

Lines changed: 29 additions & 80 deletions

File tree

packages/react-native/scripts/ios-prebuild/hermes.js

Lines changed: 19 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @format
99
*/
1010

11-
const {computeNightlyTarballURL, createLogger} = require('./utils');
11+
const {createLogger} = require('./utils');
1212
const {execSync} = require('child_process');
1313
const fs = require('fs');
1414
const path = require('path');
@@ -23,10 +23,15 @@ import type {BuildFlavor, Destination, Platform} from './types';
2323
*/
2424

2525
/**
26-
* Downloads hermes artifacts from the specified version and build type. If you want to specify a specific
27-
* version of hermes, use the HERMES_VERSION environment variable. The path to the artifacts will be inside
28-
* the .build/artifacts/hermes folder, but this can be overridden by setting the HERMES_ENGINE_TARBALL_PATH
29-
* environment variable. If this varuable is set, the script will use the local tarball instead of downloading it.
26+
* Downloads hermes artifacts from the specified version and build type.
27+
*
28+
* Version resolution (in order):
29+
* 1. `HERMES_ENGINE_TARBALL_PATH` env var → use that local file directly
30+
* 2. `HERMES_VERSION` env var:
31+
* - `"latest-v1"` (default) → resolve latest version from npm's `latest-v1` dist-tag
32+
* - any semver string → use that exact version from Maven Central
33+
* The resolved version is downloaded from Maven Central (stable) or from a
34+
* Maven snapshot repo as fallback.
3035
*/
3136
async function prepareHermesArtifactsAsync(
3237
reactNativeVersion /*:string*/,
@@ -57,12 +62,9 @@ async function prepareHermesArtifactsAsync(
5762
let resolvedVersion = process.env.HERMES_VERSION ?? 'latest-v1';
5863

5964
if (resolvedVersion === 'latest-v1') {
65+
// TODO: rename 'latest-v1' to 'latest' once V1 is the only Hermes on npm
6066
hermesLog('Using latest-v1 tarball');
61-
const hermesVersion = await getLatestV1VersionFromNPM();
62-
resolvedVersion = hermesVersion;
63-
} else if (resolvedVersion === 'nightly') {
64-
hermesLog('Using latest nightly tarball');
65-
const hermesVersion = await getNightlyVersionFromNPM();
67+
const hermesVersion = await getLatestHermesVersionFromNPM();
6668
resolvedVersion = hermesVersion;
6769
}
6870

@@ -106,7 +108,8 @@ async function prepareHermesArtifactsAsync(
106108
return artifactsPath;
107109
}
108110

109-
async function getLatestV1VersionFromNPM() /*: Promise<string> */ {
111+
async function getLatestHermesVersionFromNPM() /*: Promise<string> */ {
112+
// TODO: rename 'latest-v1' to 'latest' once V1 is the only Hermes on npm
110113
const npmResponse /*: Response */ = await fetch(
111114
'https://registry.npmjs.org/hermes-compiler/latest-v1',
112115
);
@@ -118,43 +121,23 @@ async function getLatestV1VersionFromNPM() /*: Promise<string> */ {
118121
}
119122

120123
const json = await npmResponse.json();
121-
const latestV1 = json.version;
122-
hermesLog(`Using version ${latestV1}`);
123-
return latestV1;
124-
}
125-
126-
async function getNightlyVersionFromNPM() /*: Promise<string> */ {
127-
const npmResponse /*: Response */ = await fetch(
128-
'https://registry.npmjs.org/hermes-compiler/nightly',
129-
);
130-
131-
if (!npmResponse.ok) {
132-
throw new Error(
133-
`Couldn't get a response from NPM: ${npmResponse.status} ${npmResponse.statusText}`,
134-
);
135-
}
136-
137-
const json = await npmResponse.json();
138-
const latestNightly = json.version;
139-
hermesLog(`Using version ${latestNightly}`);
140-
return latestNightly;
124+
const latestVersion = json.version;
125+
hermesLog(`Using version ${latestVersion}`);
126+
return latestVersion;
141127
}
142128

143129
/*::
144130
type HermesEngineSourceType =
145131
| 'local_prebuilt_tarball'
146132
| 'download_prebuild_tarball'
147-
| 'download_prebuilt_nightly_tarball'
148133
*/
149134

150135
const HermesEngineSourceTypes /*:{
151136
+DOWNLOAD_PREBUILD_TARBALL: "download_prebuild_tarball",
152-
+DOWNLOAD_PREBUILT_NIGHTLY_TARBALL: "download_prebuilt_nightly_tarball",
153137
+LOCAL_PREBUILT_TARBALL: "local_prebuilt_tarball"
154138
} */ = {
155139
LOCAL_PREBUILT_TARBALL: 'local_prebuilt_tarball',
156140
DOWNLOAD_PREBUILD_TARBALL: 'download_prebuild_tarball',
157-
DOWNLOAD_PREBUILT_NIGHTLY_TARBALL: 'download_prebuilt_nightly_tarball',
158141
};
159142

160143
/**
@@ -216,21 +199,6 @@ function getTarballUrl(
216199
return `${mavenRepoUrl}/${namespace}/hermes-ios/${version}/hermes-ios-${version}-hermes-ios-${buildType.toLowerCase()}.tar.gz`;
217200
}
218201

219-
async function getNightlyTarballUrl(
220-
version /*: string */,
221-
buildType /*: BuildFlavor */,
222-
) /*: Promise<string> */ {
223-
const artifactCoordinate = 'hermes-ios';
224-
const artifactName = `hermes-ios-${buildType.toLowerCase()}.tar.gz`;
225-
return await computeNightlyTarballURL(
226-
version,
227-
buildType,
228-
'hermes',
229-
artifactCoordinate,
230-
artifactName,
231-
);
232-
}
233-
234202
/**
235203
* Checks if a Hermes artifact exists at the given URL using fetch instead of curl
236204
*/
@@ -266,17 +234,10 @@ async function hermesSourceType(
266234
return HermesEngineSourceTypes.DOWNLOAD_PREBUILD_TARBALL;
267235
}
268236

269-
// For nightly tarball, we need to resolve redirects first
270-
const nightlyUrl = await getNightlyTarballUrl(version, buildType);
271-
if (await hermesArtifactExists(nightlyUrl)) {
272-
hermesLog('Using download prebuild nightly tarball');
273-
return HermesEngineSourceTypes.DOWNLOAD_PREBUILT_NIGHTLY_TARBALL;
274-
}
275-
276237
hermesLog(
277-
'Using download prebuild nightly tarball - this is a fallback and might not work.',
238+
`No prebuilt tarball found for version ${version}. Falling back to DOWNLOAD_PREBUILD_TARBALL, which may fail.`,
278239
);
279-
return HermesEngineSourceTypes.DOWNLOAD_PREBUILT_NIGHTLY_TARBALL;
240+
return HermesEngineSourceTypes.DOWNLOAD_PREBUILD_TARBALL;
280241
}
281242

282243
async function resolveSourceFromSourceType(
@@ -290,8 +251,6 @@ async function resolveSourceFromSourceType(
290251
return localPrebuiltTarball();
291252
case HermesEngineSourceTypes.DOWNLOAD_PREBUILD_TARBALL:
292253
return downloadPrebuildTarball(version, buildType, artifactsPath);
293-
case HermesEngineSourceTypes.DOWNLOAD_PREBUILT_NIGHTLY_TARBALL:
294-
return downloadPrebuiltNightlyTarball(version, buildType, artifactsPath);
295254
default:
296255
abort(
297256
`[Hermes] Unsupported or invalid source type provided: ${sourceType}`,
@@ -324,16 +283,6 @@ async function downloadPrebuildTarball(
324283
return downloadStableHermes(version, buildType, artifactsPath);
325284
}
326285

327-
async function downloadPrebuiltNightlyTarball(
328-
version /*: string */,
329-
buildType /*: BuildFlavor */,
330-
artifactsPath /*: string*/,
331-
) /*: Promise<string> */ {
332-
const url = await getNightlyTarballUrl(version, buildType);
333-
hermesLog(`Using nightly tarball from URL: ${url}`);
334-
return downloadHermesTarball(url, version, buildType, artifactsPath);
335-
}
336-
337286
async function downloadStableHermes(
338287
version /*: string */,
339288
buildType /*: BuildFlavor */,

packages/react-native/scripts/swiftpm/__tests__/prepare-app-utils-test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ describe('runIosPrebuild', () => {
10931093
process.env = originalProcessEnv;
10941094
});
10951095

1096-
it('should run iOS prebuild successfully with nightly versions', async () => {
1096+
it('should run iOS prebuild successfully with prebuilt versions', async () => {
10971097
// Setup
10981098
const reactNativePath = '/path/to/react-native';
10991099

@@ -1108,13 +1108,13 @@ describe('runIosPrebuild', () => {
11081108
env: {
11091109
...originalProcessEnv,
11101110
RN_DEP_VERSION: 'nightly',
1111-
HERMES_VERSION: 'nightly',
1111+
HERMES_VERSION: 'latest-v1',
11121112
},
11131113
stdio: 'inherit',
11141114
});
11151115
expect(mockExecSync).toHaveBeenCalledTimes(1);
11161116
expect(mockConsoleLog).toHaveBeenCalledWith(
1117-
'Running iOS prebuild with nightly versions...',
1117+
'Running iOS prebuild with prebuilt versions...',
11181118
);
11191119
expect(mockConsoleLog).toHaveBeenCalledWith('✓ iOS prebuild completed');
11201120
expect(mockConsoleLog).toHaveBeenCalledTimes(2);
@@ -1135,7 +1135,7 @@ describe('runIosPrebuild', () => {
11351135
env: {
11361136
...originalProcessEnv,
11371137
RN_DEP_VERSION: 'nightly',
1138-
HERMES_VERSION: 'nightly',
1138+
HERMES_VERSION: 'latest-v1',
11391139
},
11401140
stdio: 'inherit',
11411141
});
@@ -1156,7 +1156,7 @@ describe('runIosPrebuild', () => {
11561156
env: {
11571157
...originalProcessEnv,
11581158
RN_DEP_VERSION: 'nightly',
1159-
HERMES_VERSION: 'nightly',
1159+
HERMES_VERSION: 'latest-v1',
11601160
},
11611161
stdio: 'inherit',
11621162
});
@@ -1181,12 +1181,12 @@ describe('runIosPrebuild', () => {
11811181
env: {
11821182
...originalProcessEnv,
11831183
RN_DEP_VERSION: 'nightly',
1184-
HERMES_VERSION: 'nightly',
1184+
HERMES_VERSION: 'latest-v1',
11851185
},
11861186
stdio: 'inherit',
11871187
});
11881188
expect(mockConsoleLog).toHaveBeenCalledWith(
1189-
'Running iOS prebuild with nightly versions...',
1189+
'Running iOS prebuild with prebuilt versions...',
11901190
);
11911191
expect(mockConsoleLog).not.toHaveBeenCalledWith('✓ iOS prebuild completed');
11921192
});
@@ -1221,7 +1221,7 @@ describe('runIosPrebuild', () => {
12211221
env: {
12221222
...originalProcessEnv,
12231223
RN_DEP_VERSION: 'nightly',
1224-
HERMES_VERSION: 'nightly',
1224+
HERMES_VERSION: 'latest-v1',
12251225
},
12261226
stdio: 'inherit',
12271227
});

packages/react-native/scripts/swiftpm/prepare-app-utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ async function runPodDeintegrate(
7373
async function runIosPrebuild(
7474
reactNativePath /*: string */,
7575
) /*: Promise<void> */ {
76-
console.log('Running iOS prebuild with nightly versions...');
76+
console.log('Running iOS prebuild with prebuilt versions...');
7777

7878
const env = {
7979
...process.env,
8080
RN_DEP_VERSION: 'nightly',
81-
HERMES_VERSION: 'nightly',
81+
HERMES_VERSION: 'latest-v1',
8282
};
8383

8484
try {

0 commit comments

Comments
 (0)