From b040a882b38e9725e001a3bbc3e9f72f6d112f5e Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 12:56:44 +0500 Subject: [PATCH 01/12] Android: Hermes release builds on Windows hosts (Task 13.7, BLK-07) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit React Native runs react.hermesCommand through `cmd /c` on Windows (BundleHermesCTask getHermescCommand -> windowsAwareCommandLine), and a user-set command is kept as is (detectOSAwareHermesCommand). cmd cannot run hermesc-preserve-js.sh: it exited 0, wrote no bytecode, and the task failed later with NoSuchFileException on index.android.bundle.hbc. - The wrapper's work moves to scripts/hermesc-preserve-js.js (Node). Two launchers start it: hermesc-preserve-js.sh (macOS, Linux; existing builds keep working) and hermesc-preserve-js.cmd (Windows, CRLF via .gitattributes). hermesc is found as before, with win64-bin/hermesc.exe on Windows. - The wrapper exits non-zero whenever no bytecode came out: hermesc exited 0 with no or an empty -out (a stale file is removed first), was killed, could not start, or no -out was given. - hermesCommand picks the launcher when Gradle configures: System.getProperty("os.name").startsWith("Windows") ? .cmd : .sh, so one build.gradle serves a repo shared across macOS, Linux and Windows. README, bare example and the Expo plugin write it. - Expo plugin: the exact line an earlier prebuild wrote (the .sh on every OS) is moved to the per-OS one; a user's own hermesCommand that names hermesc-preserve-js stays. Corpus cases for both. - bugsee-sourcemaps.gradle: on Windows a Hermes bundle task whose hermesCommand names a .sh fails before hermesc, with the line to use. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .gitattributes | 4 + examples/bare/android/app/build.gradle | 6 +- package.json | 2 +- packages/react-native/README.md | 31 +- packages/react-native/package.json | 2 + .../react-native/plugin/build/gradle.d.ts | 15 +- packages/react-native/plugin/build/gradle.js | 48 +- .../react-native/plugin/build/gradle.js.map | 2 +- .../src/__tests__/gradle-corpus.test.ts | 99 ++++ .../plugin/src/__tests__/plugin.test.ts | 8 +- .../plugin/src/__tests__/transforms.test.ts | 2 +- .../plugin/src/__tests__/with-bugsee.test.ts | 2 +- packages/react-native/plugin/src/gradle.ts | 46 +- .../__tests__/hermes-sourcemaps.test.js | 4 +- .../__tests__/hermesc-preserve-js.test.js | 438 ++++++++++++++++++ .../__tests__/sourcemaps-gradle.test.js | 27 +- .../scripts/bugsee-sourcemaps.gradle | 34 +- .../scripts/hermesc-preserve-js.cmd | 6 + .../scripts/hermesc-preserve-js.js | 185 ++++++++ .../scripts/hermesc-preserve-js.sh | 125 +---- scripts/check-expo-prebuild.sh | 2 +- stryker.plugin.json | 1 + 22 files changed, 916 insertions(+), 173 deletions(-) create mode 100644 .gitattributes create mode 100644 packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js create mode 100644 packages/react-native/scripts/hermesc-preserve-js.cmd create mode 100755 packages/react-native/scripts/hermesc-preserve-js.js diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..fec85ca0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +# cmd.exe misreads batch files with bare LF line ends (labels, long lines). +*.cmd text eol=crlf +# Shell scripts run on macOS and Linux only; a CRLF would break the shebang. +*.sh text eol=lf diff --git a/examples/bare/android/app/build.gradle b/examples/bare/android/app/build.gradle index 3dcb0d9d..330a239a 100644 --- a/examples/bare/android/app/build.gradle +++ b/examples/bare/android/app/build.gradle @@ -49,7 +49,9 @@ react { /* Hermes Commands */ // Preserve the JS bundle, then inject the composed map after hermesc. - hermesCommand = file("../../node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.sh").absolutePath + // Windows runs hermesCommand through cmd, which cannot run the .sh. + hermesCommand = file("../../node_modules/@bugsee/react-native/scripts/hermesc-preserve-js" + + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")).absolutePath // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] @@ -135,7 +137,7 @@ android { // createBundleJsAndAssets the hook injects the debug id into the // composed map and the bytecode (Hermes) or Metro's bundle and map (no Hermes), // then uploads the map when bugsee.properties holds a real token. It fails -// the bundle task if Hermes ran without hermesc-preserve-js.sh (hermesCommand +// the bundle task if Hermes ran without the preserve wrapper (hermesCommand // above). -PbugseeUploadSourcemaps=false turns the upload off. apply from: file("../../node_modules/@bugsee/react-native/scripts/bugsee-sourcemaps.gradle") diff --git a/package.json b/package.json index 06a45d68..0bb29b20 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "assert:ios-embed": "node scripts/cli-assert-framework-embedded.ts", "mutate:src": "stryker run stryker.src.json", "mutate:scripts": "stryker run stryker.scripts.json", - "mutate:plugin": "stryker run stryker.plugin.json; status=$?; chmod 755 packages/react-native/scripts/compose-then-inject.js; exit $status" + "mutate:plugin": "stryker run stryker.plugin.json; status=$?; chmod 755 packages/react-native/scripts/compose-then-inject.js packages/react-native/scripts/hermesc-preserve-js.js; exit $status" }, "devDependencies": { "@eslint/js": "^10.0.1", diff --git a/packages/react-native/README.md b/packages/react-native/README.md index bf9fb763..1233b11b 100644 --- a/packages/react-native/README.md +++ b/packages/react-native/README.md @@ -122,17 +122,28 @@ def bugseeDir = new File(["node", "--print", "require.resolve('@bugsee/react-nat react { // Copies the JS aside before hermesc compiles it, so the debug id can - // reach the bytecode. - hermesCommand = new File(new File(bugseeDir, "scripts"), "hermesc-preserve-js.sh").absolutePath + // reach the bytecode. React Native runs this command through cmd on + // Windows, so Windows gets the .cmd launcher and macOS and Linux the .sh. + hermesCommand = new File(new File(bugseeDir, "scripts"), + System.getProperty("os.name").startsWith("Windows") ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh").absolutePath } // At the end of the file. Applying it twice is harmless. apply from: new File(new File(bugseeDir, "scripts"), "bugsee-sourcemaps.gradle") ``` -If Hermes compiles a bundle without going through `hermesc-preserve-js.sh`, -the bundle task fails rather than ship a release without a debug id. With -Hermes off, the plain JS bundle and Metro's map get the id instead. +The OS is checked when Gradle configures the build, so one `build.gradle` +works on macOS, Linux and Windows. Both launchers run +`scripts/hermesc-preserve-js.js` with `node`, which must be on the `PATH` (as +React Native's own bundling already needs). The wrapper exits non-zero when +hermesc writes no bytecode. + +If Hermes compiles a bundle without going through the wrapper, the bundle +task fails rather than ship a release without a debug id. On Windows a +`hermesCommand` that names a `.sh` (what earlier versions of this README +said) fails the bundle task before hermesc runs, with the line to use +instead: `cmd` cannot run a shell script. With Hermes off, the plain JS +bundle and Metro's map get the id instead. - **The upload needs a real token.** Set `app_token` in `android/bugsee.properties`, or `BUGSEE_APP_TOKEN`. Without a token, or with @@ -145,9 +156,13 @@ Hermes off, the plain JS bundle and Metro's map get the id instead. the path; the Gradle hook takes the path relative to the build directory. The three agree unless the bundle directory itself nests another `generated/assets`, which React Native never does. -- **Limitations.** The preserve wrapper is a shell script, so Hermes release - builds on a Windows host are not supported yet. The hook has not yet been - verified with Gradle's configuration cache. +- **Expo.** `expo prebuild` writes the same per-OS choice. A `hermesCommand` + that an earlier prebuild wrote (the `.sh` on every OS) is recognised by its + exact text and moved to the per-OS one; a `hermesCommand` of your own that + already names `hermesc-preserve-js` is left as it is. +- **Limitations.** Windows builds are verified from a project path without + spaces. The hook has not yet been verified with Gradle's configuration + cache. ## Licence diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 254a6dff..b7464279 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -14,7 +14,9 @@ "scripts/hermes-sourcemaps.js", "scripts/compose-then-inject.js", "scripts/bugsee-xcode.sh", + "scripts/hermesc-preserve-js.js", "scripts/hermesc-preserve-js.sh", + "scripts/hermesc-preserve-js.cmd", "scripts/bugsee-sourcemaps.gradle", "react-native.config.js", "*.podspec" diff --git a/packages/react-native/plugin/build/gradle.d.ts b/packages/react-native/plugin/build/gradle.d.ts index c781750f..7eb4cb94 100644 --- a/packages/react-native/plugin/build/gradle.d.ts +++ b/packages/react-native/plugin/build/gradle.d.ts @@ -33,7 +33,20 @@ export declare function ensureGradlePluginDeclared(projectBuildGradle: string, v * or no real token is configured. */ export declare function ensureAppAppliesPlugin(appBuildGradle: string, ndkVersion: string | null, log?: (message: string) => void): string; -export declare const HERMES_COMMAND_UNREWRITABLE = "@bugsee/react-native cannot edit android/app/build.gradle: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh. Put it alone on one line, or delete it, and prebuild again"; +/** + * The launcher for the host the build runs on: React Native runs + * hermesCommand through `cmd /c` on Windows, which cannot run a shell + * script. Chosen when Gradle configures, so one build.gradle serves a repo + * shared across macOS, Linux and Windows. + */ +export declare const HERMES_COMMAND_EXPR = "new File([\"node\", \"--print\", \"require.resolve('@bugsee/react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/scripts/hermesc-preserve-js\" + (System.getProperty(\"os.name\").startsWith(\"Windows\") ? \".cmd\" : \".sh\")"; +/** + * The value earlier versions wrote: the shell launcher on every host, which + * a Windows build cannot run. Recognised only as this exact text, and moved + * to HERMES_COMMAND_EXPR. + */ +export declare const LEGACY_HERMES_COMMAND_EXPR = "new File([\"node\", \"--print\", \"require.resolve('@bugsee/react-native/package.json')\"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + \"/scripts/hermesc-preserve-js.sh\""; +export declare const HERMES_COMMAND_UNREWRITABLE = "@bugsee/react-native cannot edit android/app/build.gradle: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh (.cmd on Windows). Put it alone on one line, or delete it, and prebuild again"; /** * `uploadSymbols: false` on Android: disables every `uploadBugsee*` task * (mapping, NDK symbols, build info) inside a marked block. On again diff --git a/packages/react-native/plugin/build/gradle.js b/packages/react-native/plugin/build/gradle.js index a03efa6e..3c2251f9 100644 --- a/packages/react-native/plugin/build/gradle.js +++ b/packages/react-native/plugin/build/gradle.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.HERMES_COMMAND_UNREWRITABLE = exports.CANNOT_EDIT = void 0; +exports.HERMES_COMMAND_UNREWRITABLE = exports.LEGACY_HERMES_COMMAND_EXPR = exports.HERMES_COMMAND_EXPR = exports.CANNOT_EDIT = void 0; exports.ensureMavenCentral = ensureMavenCentral; exports.ensureGradlePluginDeclared = ensureGradlePluginDeclared; exports.ensureAppAppliesPlugin = ensureAppAppliesPlugin; @@ -879,21 +879,34 @@ function removeInsertedSymbolTable(source) { } return kept.join('\n'); } -const HERMES_COMMAND_EXPR = 'new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js.sh"'; +const BUGSEE_PACKAGE_DIR_EXPR = 'new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath()'; +/** + * The launcher for the host the build runs on: React Native runs + * hermesCommand through `cmd /c` on Windows, which cannot run a shell + * script. Chosen when Gradle configures, so one build.gradle serves a repo + * shared across macOS, Linux and Windows. + */ +exports.HERMES_COMMAND_EXPR = `${BUGSEE_PACKAGE_DIR_EXPR} + "/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")`; +/** + * The value earlier versions wrote: the shell launcher on every host, which + * a Windows build cannot run. Recognised only as this exact text, and moved + * to HERMES_COMMAND_EXPR. + */ +exports.LEGACY_HERMES_COMMAND_EXPR = `${BUGSEE_PACKAGE_DIR_EXPR} + "/scripts/hermesc-preserve-js.sh"`; const SOURCEMAPS_SCRIPT = 'scripts/bugsee-sourcemaps.gradle'; /** First line of the hook this plugin writes. */ const SOURCEMAPS_HOOK_MARKER = '// bugsee-sourcemaps: debug ids and source-map upload for release bundles (@bugsee/react-native).'; /** * The hook is the package's own Gradle script, so the bare example and Expo * apps run the same code: inject after compose, upload, fail the bundle - * task when Hermes skipped hermesc-preserve-js.sh. + * task when Hermes skipped the preserve wrapper. */ const SOURCEMAPS_APPLY = `apply from: new File(new File(["node", "--print", "require.resolve('@bugsee/react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile(), "${SOURCEMAPS_SCRIPT}")`; /** First line of the inline hook earlier versions wrote. */ const LEGACY_HOOK_MARKER = '// After compose-source-maps.js. Release variants only; debug does not bundle.'; /** The line both earlier inline hooks have after their comments; user code does not. */ const LEGACY_HOOK_FINGERPRINT = 'def bugseeHermesSourcemaps = '; -exports.HERMES_COMMAND_UNREWRITABLE = `${exports.CANNOT_EDIT} ${APP_GRADLE}: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh. Put it alone on one line, or delete it, and prebuild again`; +exports.HERMES_COMMAND_UNREWRITABLE = `${exports.CANNOT_EDIT} ${APP_GRADLE}: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh (.cmd on Windows). Put it alone on one line, or delete it, and prebuild again`; /** Brackets all close, something is there, and it does not end in an operator. */ function completeExpression(code) { let depth = 0; @@ -912,11 +925,14 @@ const CONTINUATION = /^(\?\.|\.|\?|:|\+|-|\*|\/|&&|\|\|)/; const HERMES_COMMAND = /^([ \t]*)hermesCommand(\s*=(?!=)|\.set\()/; const REACT_BLOCK = /^\s*react\s*\{\s*$/; /** - * Points react.hermesCommand at hermesc-preserve-js.sh. Only the setting at - * the top level of the react block counts: one in a comment, a string, - * another block or a nested block is left alone. A one-line - * `hermesCommand = …` or `hermesCommand.set(…)` is rewritten, a trailing - * comment kept. Anything this cannot read with certainty (a value that + * Points react.hermesCommand at the preserve launcher for the host. Only the + * setting at the top level of the react block counts: one in a comment, a + * string, another block or a nested block is left alone. A value that already + * names hermesc-preserve-js is kept (this plugin's, or the user's own), except + * the exact value earlier versions wrote, which is moved to the per-host one. + * Any other one-line `hermesCommand = …` or `hermesCommand.set(…)` is + * rewritten, a trailing comment kept. Anything this cannot read with + * certainty (a value that * continues on the next line, an open bracket or multi-line string, nothing * after `=`, another statement after `;`) is refused. A react block without * the setting gets one. With no react block the file is left alone, and the @@ -940,7 +956,14 @@ function rewriteHermesCommand(source) { continue; } found = true; - if (line.raw.includes('hermesc-preserve-js.sh')) { + // The value as written, up to a trailing comment. + const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; + const written = line.raw.slice(match[0].length, valueEnd).trim(); + if (match[2] !== '.set(' && written === exports.LEGACY_HERMES_COMMAND_EXPR) { + lines[i] = `${match[1]}hermesCommand = ${exports.HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; + continue; + } + if (line.raw.includes('hermesc-preserve-js')) { continue; } // Comments are spaces in the mask, so the whole masked line is the value. @@ -951,8 +974,7 @@ function rewriteHermesCommand(source) { throw new Error(exports.HERMES_COMMAND_UNREWRITABLE); } // The value is replaced; what follows it (whitespace, a comment, the CR) is kept. - const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; - lines[i] = `${match[1]}hermesCommand = ${HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; + lines[i] = `${match[1]}hermesCommand = ${exports.HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; } if (!found) { const reactLine = s.lines[react]; @@ -961,7 +983,7 @@ function rewriteHermesCommand(source) { } const opener = reactLine.raw; const indent = opener.slice(0, opener.length - opener.trimStart().length); - lines.splice(react + 1, 0, `${indent} hermesCommand = ${HERMES_COMMAND_EXPR}${crOf(eol)}`); + lines.splice(react + 1, 0, `${indent} hermesCommand = ${exports.HERMES_COMMAND_EXPR}${crOf(eol)}`); } return lines.join('\n'); } diff --git a/packages/react-native/plugin/build/gradle.js.map b/packages/react-native/plugin/build/gradle.js.map index 05466073..f91bdbe6 100644 --- a/packages/react-native/plugin/build/gradle.js.map +++ b/packages/react-native/plugin/build/gradle.js.map @@ -1 +1 @@ -{"version":3,"file":"gradle.js","sourceRoot":"","sources":["../src/gradle.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gradle.js","sourceRoot":"","sources":["../src/gradle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/react-native/plugin/src/__tests__/gradle-corpus.test.ts b/packages/react-native/plugin/src/__tests__/gradle-corpus.test.ts index d97d91d8..5372717b 100644 --- a/packages/react-native/plugin/src/__tests__/gradle-corpus.test.ts +++ b/packages/react-native/plugin/src/__tests__/gradle-corpus.test.ts @@ -47,6 +47,19 @@ beforeAll(() => { EXPR = line.replace(/^\s*hermesCommand = /, ''); }); +/** The value the plugin wrote before Task 13.7: the shell launcher on every OS. */ +const LEGACY_EXPR = + 'new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js.sh"'; + +/** The earlier line is gone and the per-OS one stands `count` times. */ +const expectMigrated = + (count: number) => + (output: string): void => { + expect(output).not.toContain(LEGACY_EXPR); + expect(countLines(output, `hermesCommand = ${EXPR}`)).toBe(count); + expect(EXPR).toContain('(System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")'); + }; + const EXCLUDE_BLOCK = [ 'configurations.configureEach {', " exclude group: 'com.bugsee', module: 'bugsee-android-ndk'", @@ -769,6 +782,92 @@ const appCases: Case[] = [ segments: [u(REACT_APPLY), u(reactOpen), u(' hermesCommand = foo(bar\n )'), u(reactClose)], refuse: true, }, + + // --- Task 13.7: the .sh-on-every-OS line an earlier prebuild wrote --- + { + name: 'the hermesCommand an earlier prebuild wrote moves to the per-OS launcher', + segments: [u(REACT_APPLY), u(reactOpen), h(` hermesCommand = ${LEGACY_EXPR}`), u(reactClose), u(userDeps)], + check: expectMigrated(1), + }, + { + name: 'the earlier prebuild line keeps a trailing comment the user added', + segments: [u(REACT_APPLY), u(reactOpen), h(` hermesCommand = ${LEGACY_EXPR} // mine`, ' // mine'), u(reactClose)], + check: (output) => { + expect(output).not.toContain(LEGACY_EXPR); + expect(output).toContain(` hermesCommand = ${EXPR} // mine\n`); + }, + }, + { + name: 'the earlier prebuild line, CRLF', + segments: [u(REACT_APPLY), u(reactOpen), h(` hermesCommand = ${LEGACY_EXPR}`), u(reactClose), u(userDeps)], + crlf: true, + check: (output) => { + expectMigrated(1)(output); + expect(output).toContain(` hermesCommand = ${EXPR}\r\n`); + }, + }, + { + name: 'the earlier prebuild line at tab indentation, among other react settings', + segments: [ + u(REACT_APPLY), + u(reactOpen), + u('\tbundleCommand = "export:embed"'), + h(`\thermesCommand = ${LEGACY_EXPR}`), + u('\t// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"'), + u(reactClose), + ], + check: (output) => { + expectMigrated(1)(output); + expect(output).toContain(`\thermesCommand = ${EXPR}\n`); + }, + }, + { + name: 'a user hermesCommand that names the .sh itself is the user\'s, and stays', + segments: [ + u('def bugseeDir = new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile()'), + u(REACT_APPLY), + u(reactOpen), + u(' hermesCommand = new File(new File(bugseeDir, "scripts"), "hermesc-preserve-js.sh").absolutePath'), + u(reactClose), + ], + check: (output) => expect(output).not.toContain(EXPR), + }, + { + name: 'a user hermesCommand that names the .cmd stays', + segments: [u(REACT_APPLY), u(reactOpen), u(' hermesCommand = "C:/tools/hermesc-preserve-js.cmd"'), u(reactClose)], + check: (output) => expect(output).not.toContain(EXPR), + }, + { + name: 'the earlier expression with more after it is not the plugin\'s line, and stays', + segments: [u(REACT_APPLY), u(reactOpen), u(` hermesCommand = ${LEGACY_EXPR} + ""`), u(reactClose)], + check: (output) => expect(output).not.toContain(EXPR), + }, + { + name: 'the earlier expression in a setter call is not the plugin\'s line, and stays', + segments: [u(REACT_APPLY), u(reactOpen), u(` hermesCommand.set(${LEGACY_EXPR})`), u(reactClose)], + check: (output) => expect(output).not.toContain(EXPR), + }, + { + name: 'the earlier expression with a statement after ; is not the plugin\'s line, and stays', + segments: [u(REACT_APPLY), u(reactOpen), u(` hermesCommand = ${LEGACY_EXPR}; bundleCommand = "x"`), u(reactClose)], + check: (output) => expect(output).not.toContain(EXPR), + }, + { + name: 'the earlier prebuild line inside a block comment stays as written', + segments: [u(REACT_APPLY), u(reactOpen), u(` /*\n hermesCommand = ${LEGACY_EXPR}\n */`), u(reactClose)], + check: (output) => { + expect(output).toContain(` hermesCommand = ${LEGACY_EXPR}\n`); + expect(countLines(output, `hermesCommand = ${EXPR}`)).toBe(1); + }, + }, + { + name: 'the earlier prebuild line in another block stays as written', + segments: [u(REACT_APPLY), u(`myTool {\n hermesCommand = ${LEGACY_EXPR}\n}`), u(reactOpen), u(reactClose)], + check: (output) => { + expect(output).toContain(` hermesCommand = ${LEGACY_EXPR}\n`); + expect(countLines(output, `hermesCommand = ${EXPR}`)).toBe(1); + }, + }, ]; // --- Re-review 4: anything else on an anchor line, and user code shaped like Bugsee's lines --- diff --git a/packages/react-native/plugin/src/__tests__/plugin.test.ts b/packages/react-native/plugin/src/__tests__/plugin.test.ts index 9b29515e..2ffe3286 100644 --- a/packages/react-native/plugin/src/__tests__/plugin.test.ts +++ b/packages/react-native/plugin/src/__tests__/plugin.test.ts @@ -553,7 +553,7 @@ describe('Android Gradle edits', () => { const hermes = next.split('\n').filter((line) => /^\s*hermesCommand\s*=/.test(line)); expect(hermes).toEqual([ - ' hermesCommand = new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js.sh"', + ' hermesCommand = new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")', ]); expect(hermes[0]).not.toContain('../../node_modules'); expect(hermes[0]).not.toContain('hermes-compiler'); @@ -577,7 +577,7 @@ describe('Android Gradle edits', () => { expect(buildTypeBody(off, 'release')).toContain('minifyEnabled enableMinifyInReleaseBuilds'); expect(buildTypeBody(off, 'debug')).not.toContain('ndk'); expect(buildTypeBody(off, 'release')).not.toContain('ndk'); - expect(off).toContain('hermesc-preserve-js.sh'); + expect(off).toContain('"/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")'); expect(off.match(/bugsee-sourcemaps\.gradle/g)).toHaveLength(1); expect(ensureAppAppliesPlugin(off, null)).toBe(off); }); @@ -593,7 +593,7 @@ describe('Android Gradle edits', () => { writeFileSync(join(app, 'node_modules/react-native/package.json'), '{"name":"react-native"}\n'); writeFileSync(join(nested, 'package.json'), '{"name":"hermes-compiler"}\n'); const hermesc = join(nested, 'hermesc', osbin, bin); - writeFileSync(hermesc, '#!/bin/sh\nexit 0\n'); + writeFileSync(hermesc, '#!/bin/sh\nout=""; prev=""\nfor a in "$@"; do [ "$prev" = "-out" ] && out="$a"; prev="$a"; done\nprintf HBC > "$out"\n'); chmodSync(hermesc, 0o755); const shipped = join(app, 'node_modules/react-native/sdks/hermesc', osbin, bin); mkdirSync(join(app, 'node_modules/react-native/sdks/hermesc', osbin), { recursive: true }); @@ -639,7 +639,7 @@ describe('Android Gradle edits', () => { mkdirSync(join(rn, 'sdks/hermesc', osbin), { recursive: true }); writeFileSync(join(rn, 'package.json'), '{"name":"react-native"}\n'); const hermesc = join(rn, 'sdks/hermesc', osbin, bin); - writeFileSync(hermesc, '#!/bin/sh\nexit 0\n'); + writeFileSync(hermesc, '#!/bin/sh\nout=""; prev=""\nfor a in "$@"; do [ "$prev" = "-out" ] && out="$a"; prev="$a"; done\nprintf HBC > "$out"\n'); chmodSync(hermesc, 0o755); expect(existsSync(join(app, 'node_modules/hermes-compiler'))).toBe(false); diff --git a/packages/react-native/plugin/src/__tests__/transforms.test.ts b/packages/react-native/plugin/src/__tests__/transforms.test.ts index 31e0adaa..22ffd218 100644 --- a/packages/react-native/plugin/src/__tests__/transforms.test.ts +++ b/packages/react-native/plugin/src/__tests__/transforms.test.ts @@ -47,7 +47,7 @@ const SYMBOL_BLOCK = (indent: string): string => .join('\n'); const HERMES_COMMAND = - 'hermesCommand = new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js.sh"'; + 'hermesCommand = new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")'; describe('ensureMavenCentral, exactly', () => { const header = lines( diff --git a/packages/react-native/plugin/src/__tests__/with-bugsee.test.ts b/packages/react-native/plugin/src/__tests__/with-bugsee.test.ts index bfa9bba0..c4e9495b 100644 --- a/packages/react-native/plugin/src/__tests__/with-bugsee.test.ts +++ b/packages/react-native/plugin/src/__tests__/with-bugsee.test.ts @@ -114,7 +114,7 @@ describe('withBugsee through the Expo mod compiler', () => { expect(app).toContain('apply plugin: "com.bugsee.android.gradle"'); expect(app).toContain(`implementation "com.bugsee:bugsee-android-ndk:${baked.sdk}"`); expect(app).toContain('"scripts/bugsee-sourcemaps.gradle")'); - expect(app).toContain('hermesc-preserve-js.sh'); + expect(app).toContain('"/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")'); expect(app).not.toContain('bugsee-upload-symbols-off:'); expect(read('gradleProperties')).not.toContain('bugseeUploadSourcemaps'); expect(read('manifest')).not.toContain('com.bugsee.app-token'); diff --git a/packages/react-native/plugin/src/gradle.ts b/packages/react-native/plugin/src/gradle.ts index 54d5ea53..e4118cf6 100644 --- a/packages/react-native/plugin/src/gradle.ts +++ b/packages/react-native/plugin/src/gradle.ts @@ -1031,8 +1031,23 @@ function removeInsertedSymbolTable(source: string): string { return kept.join('\n'); } -const HERMES_COMMAND_EXPR = - 'new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/hermesc-preserve-js.sh"'; +const BUGSEE_PACKAGE_DIR_EXPR = + 'new File(["node", "--print", "require.resolve(\'@bugsee/react-native/package.json\')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath()'; + +/** + * The launcher for the host the build runs on: React Native runs + * hermesCommand through `cmd /c` on Windows, which cannot run a shell + * script. Chosen when Gradle configures, so one build.gradle serves a repo + * shared across macOS, Linux and Windows. + */ +export const HERMES_COMMAND_EXPR = `${BUGSEE_PACKAGE_DIR_EXPR} + "/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")`; + +/** + * The value earlier versions wrote: the shell launcher on every host, which + * a Windows build cannot run. Recognised only as this exact text, and moved + * to HERMES_COMMAND_EXPR. + */ +export const LEGACY_HERMES_COMMAND_EXPR = `${BUGSEE_PACKAGE_DIR_EXPR} + "/scripts/hermesc-preserve-js.sh"`; const SOURCEMAPS_SCRIPT = 'scripts/bugsee-sourcemaps.gradle'; @@ -1043,7 +1058,7 @@ const SOURCEMAPS_HOOK_MARKER = /** * The hook is the package's own Gradle script, so the bare example and Expo * apps run the same code: inject after compose, upload, fail the bundle - * task when Hermes skipped hermesc-preserve-js.sh. + * task when Hermes skipped the preserve wrapper. */ const SOURCEMAPS_APPLY = `apply from: new File(new File(["node", "--print", "require.resolve('@bugsee/react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile(), "${SOURCEMAPS_SCRIPT}")`; @@ -1053,7 +1068,7 @@ const LEGACY_HOOK_MARKER = '// After compose-source-maps.js. Release variants on /** The line both earlier inline hooks have after their comments; user code does not. */ const LEGACY_HOOK_FINGERPRINT = 'def bugseeHermesSourcemaps = '; -export const HERMES_COMMAND_UNREWRITABLE = `${CANNOT_EDIT} ${APP_GRADLE}: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh. Put it alone on one line, or delete it, and prebuild again`; +export const HERMES_COMMAND_UNREWRITABLE = `${CANNOT_EDIT} ${APP_GRADLE}: react.hermesCommand spans several lines or shares its line with another statement, so it cannot be pointed at scripts/hermesc-preserve-js.sh (.cmd on Windows). Put it alone on one line, or delete it, and prebuild again`; /** Brackets all close, something is there, and it does not end in an operator. */ function completeExpression(code: string): boolean { @@ -1075,11 +1090,14 @@ const HERMES_COMMAND = /^([ \t]*)hermesCommand(\s*=(?!=)|\.set\()/; const REACT_BLOCK = /^\s*react\s*\{\s*$/; /** - * Points react.hermesCommand at hermesc-preserve-js.sh. Only the setting at - * the top level of the react block counts: one in a comment, a string, - * another block or a nested block is left alone. A one-line - * `hermesCommand = …` or `hermesCommand.set(…)` is rewritten, a trailing - * comment kept. Anything this cannot read with certainty (a value that + * Points react.hermesCommand at the preserve launcher for the host. Only the + * setting at the top level of the react block counts: one in a comment, a + * string, another block or a nested block is left alone. A value that already + * names hermesc-preserve-js is kept (this plugin's, or the user's own), except + * the exact value earlier versions wrote, which is moved to the per-host one. + * Any other one-line `hermesCommand = …` or `hermesCommand.set(…)` is + * rewritten, a trailing comment kept. Anything this cannot read with + * certainty (a value that * continues on the next line, an open bracket or multi-line string, nothing * after `=`, another statement after `;`) is refused. A react block without * the setting gets one. With no react block the file is left alone, and the @@ -1103,7 +1121,14 @@ function rewriteHermesCommand(source: string): string { continue; } found = true; - if (line.raw.includes('hermesc-preserve-js.sh')) { + // The value as written, up to a trailing comment. + const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; + const written = line.raw.slice(match[0].length, valueEnd).trim(); + if (match[2] !== '.set(' && written === LEGACY_HERMES_COMMAND_EXPR) { + lines[i] = `${match[1] as string}hermesCommand = ${HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; + continue; + } + if (line.raw.includes('hermesc-preserve-js')) { continue; } // Comments are spaces in the mask, so the whole masked line is the value. @@ -1114,7 +1139,6 @@ function rewriteHermesCommand(source: string): string { throw new Error(HERMES_COMMAND_UNREWRITABLE); } // The value is replaced; what follows it (whitespace, a comment, the CR) is kept. - const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; lines[i] = `${match[1] as string}hermesCommand = ${HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; } if (!found) { diff --git a/packages/react-native/scripts/__tests__/hermes-sourcemaps.test.js b/packages/react-native/scripts/__tests__/hermes-sourcemaps.test.js index 86fbe898..bc81c2a6 100644 --- a/packages/react-native/scripts/__tests__/hermes-sourcemaps.test.js +++ b/packages/react-native/scripts/__tests__/hermes-sourcemaps.test.js @@ -182,7 +182,7 @@ fs.writeFileSync(out, JSON.stringify({ version: 3, file: 'recomposed.js', mappin fs.writeFileSync(packaged, 'console.log("bugsee-fixture")\n'); const hermesc = path.join(dir, 'hermesc'); - fs.writeFileSync(hermesc, '#!/bin/sh\nexit 0\n'); + fs.writeFileSync(hermesc, '#!/bin/sh\nout=""; prev=""\nfor a in "$@"; do [ "$prev" = "-out" ] && out="$a"; prev="$a"; done\nprintf HBC > "$out"\n'); fs.chmodSync(hermesc, 0o755); const preserve = path.join(__dirname, '..', 'hermesc-preserve-js.sh'); const saved = cp.spawnSync( @@ -804,7 +804,7 @@ describe('preserve directory paths', () => { const packaged = path.join(assets, 'index.android.bundle'); fs.writeFileSync(packaged, 'console.log("bugsee-fixture")\n'); const hermesc = path.join(root, 'hermesc'); - fs.writeFileSync(hermesc, '#!/bin/sh\nexit 0\n'); + fs.writeFileSync(hermesc, '#!/bin/sh\nout=""; prev=""\nfor a in "$@"; do [ "$prev" = "-out" ] && out="$a"; prev="$a"; done\nprintf HBC > "$out"\n'); fs.chmodSync(hermesc, 0o755); const saved = cp.spawnSync( path.join(__dirname, '..', 'hermesc-preserve-js.sh'), diff --git a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js new file mode 100644 index 00000000..abf2438d --- /dev/null +++ b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js @@ -0,0 +1,438 @@ +'use strict'; + +// The react.hermesCommand wrapper (Task 13.7): the work is in +// hermesc-preserve-js.js, run in-process here so mutation testing sees it; +// the .sh and .cmd launchers are run (or, off Windows, read) at the end. + +const cp = require('node:child_process'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); + +const { + bundleOf, + findHermesc, + hermescBin, + outputOf, + preserveDirOf, + run, +} = require('../hermesc-preserve-js'); +const { useScratchCwd } = require('./fixtures/scratch-cwd'); + +useScratchCwd(); + +const SCRIPTS = path.join(__dirname, '..'); +const WIN = process.platform === 'win32'; + +/** A stand-in hermesc (POSIX shell) that writes `content` to its -out (nothing when null). */ +function fakeHermesc(dir, content = 'HBC', status = 0) { + const file = path.join(dir, 'hermesc'); + fs.writeFileSync( + file, + `#!/bin/sh +out=""; prev="" +for a in "$@"; do [ "$prev" = "-out" ] && out="$a"; prev="$a"; done +${content === null ? '' : `printf '%s' '${content}' > "$out"`} +exit ${status} +`, + ); + fs.chmodSync(file, 0o755); + return file; +} + +describe('argument parsing', () => { + it('takes the value after the last -out', () => { + expect(outputOf(['-w', '-out', 'a.hbc', 'x.js', '-out', 'b.hbc'])).toBe('b.hbc'); + expect(outputOf(['-w', '-out', 'a.hbc', 'x.js'])).toBe('a.hbc'); + expect(outputOf(['x.js', '-out'])).toBeUndefined(); + expect(outputOf(['-emit-binary', 'x.js'])).toBeUndefined(); + expect(outputOf([])).toBeUndefined(); + }); + + it('takes the first existing file that is neither a flag nor the output', () => { + const files = new Set(['out.hbc', 'a.js', 'b.js', '-weird']); + const isFile = (arg) => files.has(arg); + expect(bundleOf(['-w', '-weird', '-out', 'out.hbc', 'missing.js', 'a.js', 'b.js'], 'out.hbc', isFile)).toBe('a.js'); + expect(bundleOf(['out.hbc', 'b.js'], 'out.hbc', isFile)).toBe('b.js'); + expect(bundleOf(['out.hbc'], undefined, isFile)).toBe('out.hbc'); + expect(bundleOf(['-w', 'missing.js'], undefined, isFile)).toBeUndefined(); + }); + + it('names hermesc the way React Native does on each host', () => { + expect(hermescBin('win32')).toEqual({ osbin: 'win64-bin', bin: 'hermesc.exe' }); + expect(hermescBin('linux')).toEqual({ osbin: 'linux64-bin', bin: 'hermesc' }); + expect(hermescBin('darwin')).toEqual({ osbin: 'osx-bin', bin: 'hermesc' }); + expect(hermescBin('freebsd')).toEqual({ osbin: 'osx-bin', bin: 'hermesc' }); + }); +}); + +describe('findHermesc', () => { + const cwd = path.join(path.sep, 'app'); + const rnDir = path.join(cwd, 'node_modules', 'react-native'); + const compilerDir = path.join(rnDir, 'node_modules', 'hermes-compiler'); + const compiled = path.join(compilerDir, 'hermesc', 'osx-bin', 'hermesc'); + const shipped = path.join(rnDir, 'sdks', 'hermesc', 'osx-bin', 'hermesc'); + const sibling = path.join(cwd, 'node_modules', 'hermes-compiler', 'hermesc', 'osx-bin', 'hermesc'); + const built = path.join(cwd, 'node_modules', 'react-native', 'sdks', 'hermes', 'build', 'bin', 'hermesc'); + + /** resolve() that knows react-native from cwd and hermes-compiler from react-native only. */ + const resolver = ({ rn = true, compiler = true } = {}) => { + const calls = []; + const resolve = (request, from) => { + calls.push([request, from]); + if (request === 'react-native/package.json' && rn && from === cwd) return path.join(rnDir, 'package.json'); + if (request === 'hermes-compiler/package.json' && compiler && from === rnDir) { + return path.join(compilerDir, 'package.json'); + } + return null; + }; + return { resolve, calls }; + }; + const find = (present, opts = {}, env = {}, platform = 'darwin') => + findHermesc({ + env, + cwd, + platform, + isExecutable: (file) => present.includes(file), + resolve: resolver(opts).resolve, + }); + + it('prefers an executable BUGSEE_REAL_HERMESC', () => { + expect(find(['/x/hermesc', compiled], {}, { BUGSEE_REAL_HERMESC: '/x/hermesc' })).toBe('/x/hermesc'); + }); + + it('ignores a BUGSEE_REAL_HERMESC that is not executable', () => { + expect(find([compiled], {}, { BUGSEE_REAL_HERMESC: '/x/hermesc' })).toBe(compiled); + }); + + it('resolves hermes-compiler from the react-native package, then the shipped sdks/hermesc', () => { + const { resolve, calls } = resolver(); + expect( + findHermesc({ env: {}, cwd, platform: 'darwin', isExecutable: (f) => [compiled, shipped].includes(f), resolve }), + ).toBe(compiled); + expect(calls).toEqual([ + ['react-native/package.json', cwd], + ['hermes-compiler/package.json', rnDir], + ]); + expect(find([shipped, sibling])).toBe(shipped); + expect(find([shipped], { compiler: false })).toBe(shipped); + }); + + it('falls back to the app node_modules, hermes-compiler before a source build', () => { + expect(find([sibling, built], { rn: false })).toBe(sibling); + expect(find([built], { rn: false })).toBe(built); + expect(find([sibling], { compiler: false })).toBe(sibling); + expect(find([], { rn: false })).toBeNull(); + // Without react-native, the paths under it are never looked at. + expect(find([compiled, shipped], { rn: false })).toBeNull(); + }); + + it('uses the Windows directory and file name on Windows', () => { + const win = path.join(compilerDir, 'hermesc', 'win64-bin', 'hermesc.exe'); + expect(find([win, compiled], {}, {}, 'win32')).toBe(win); + }); + + it('resolves for real from the working directory', () => { + const app = fs.mkdtempSync(path.join(os.tmpdir(), 'bugsee-find-hermesc-')); + try { + const { osbin, bin } = hermescBin(process.platform); + const rn = path.join(app, 'node_modules', 'react-native'); + const compiler = path.join(rn, 'node_modules', 'hermes-compiler'); + fs.mkdirSync(path.join(compiler, 'hermesc', osbin), { recursive: true }); + fs.writeFileSync(path.join(rn, 'package.json'), '{"name":"react-native"}\n'); + fs.writeFileSync(path.join(compiler, 'package.json'), '{"name":"hermes-compiler"}\n'); + const real = path.join(compiler, 'hermesc', osbin, bin); + fs.writeFileSync(real, ''); + fs.chmodSync(real, 0o755); + const found = findHermesc({ env: {}, cwd: app, platform: process.platform, isExecutable: fs.existsSync }); + expect(fs.realpathSync(found)).toBe(fs.realpathSync(real)); + } finally { + fs.rmSync(app, { recursive: true, force: true }); + } + }); +}); + +describe('preserveDirOf', () => { + const build = path.join(path.sep, 'app', 'android', 'app', 'build'); + const js = path.join(build, 'generated', 'assets', 'react', 'release', 'index.android.bundle'); + const jsDir = path.dirname(js); + + it('maps generated/assets to intermediates/bugsee-sourcemaps', () => { + expect(preserveDirOf(js, {}, '/')).toEqual({ + dir: path.join(build, 'intermediates', 'bugsee-sourcemaps', 'react', 'release'), + }); + }); + + it('refuses a bundle outside generated/assets', () => { + const elsewhere = path.join(path.sep, 'app', 'out', 'index.android.bundle'); + expect(preserveDirOf(elsewhere, {}, '/')).toEqual({ + error: `refusing to write preserve files beside the bundle (${path.dirname(elsewhere)})`, + }); + }); + + it('takes BUGSEE_PRESERVE_DIR, relative to the working directory', () => { + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: 'keep' }, build)).toEqual({ dir: path.join(build, 'keep') }); + // Beside the asset directory, not in it: a shared name prefix is fine. + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: `${jsDir}-keep` }, '/')).toEqual({ dir: `${jsDir}-keep` }); + }); + + it('refuses a BUGSEE_PRESERVE_DIR in the packaged asset directory', () => { + const error = { error: 'refusing to write preserve files into the packaged asset directory' }; + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: jsDir }, '/')).toEqual(error); + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: path.join(jsDir, 'sub') }, '/')).toEqual(error); + }); +}); + +describe('run', () => { + let dir; + let assets; + let js; + let intermediates; + let lines; + const stderr = (line) => lines.push(line); + const argv = () => ['-w', '-emit-binary', '-out', `${js}.hbc`, js, '-O', '-output-source-map']; + + beforeEach(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'bugsee-preserve-run-')); + assets = path.join(dir, 'build', 'generated', 'assets', 'react', 'release'); + intermediates = path.join(dir, 'build', 'intermediates', 'bugsee-sourcemaps', 'react', 'release'); + fs.mkdirSync(assets, { recursive: true }); + js = path.join(assets, 'index.android.bundle'); + fs.writeFileSync(js, 'console.log("bundle")\n'); + lines = []; + }); + + afterEach(() => { + fs.rmSync(dir, { recursive: true, force: true }); + }); + + /** A spawn stand-in that records its call and writes `content` to -out. */ + const spawnWriting = (content, result = { status: 0 }) => { + const calls = []; + const spawn = (file, args, cwd) => { + calls.push({ file, args, cwd, staleGone: !fs.existsSync(`${js}.hbc`) }); + if (content !== null) fs.writeFileSync(args[args.indexOf('-out') + 1], content); + return result; + }; + return { spawn, calls }; + }; + + it('preserves the JS, notes hermesc, runs it with the same arguments and exits 0', () => { + fs.writeFileSync(`${js}.hbc`, 'stale'); + const { spawn, calls } = spawnWriting('HBC'); + const code = run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h/hermesc' }, cwd: dir, isExecutable: () => true, spawn, stderr }); + expect(code).toBe(0); + expect(lines).toEqual([]); + expect(calls).toEqual([{ file: '/h/hermesc', args: argv(), cwd: dir, staleGone: true }]); + expect(fs.readFileSync(path.join(intermediates, 'index.android.bundle.bugsee-js-source'), 'utf8')).toBe( + 'console.log("bundle")\n', + ); + expect(fs.readFileSync(path.join(intermediates, 'index.android.bundle.bugsee-hermesc'), 'utf8')).toBe('/h/hermesc\n'); + expect(fs.readdirSync(assets).sort()).toEqual(['index.android.bundle', 'index.android.bundle.hbc']); + }); + + it('reads relative arguments against the working directory, as React Native passes them on Windows', () => { + const rel = path.relative(dir, js); + const calls = []; + const relArgv = ['-w', '-out', `${rel}.hbc`, rel]; + const write = (file, args, cwd) => { + calls.push({ file, args, cwd }); + fs.writeFileSync(path.join(cwd, `${rel}.hbc`), 'HBC'); + return { status: 0 }; + }; + expect(run(relArgv, { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn: write, stderr })).toBe(0); + expect(calls).toEqual([{ file: '/h', args: relArgv, cwd: dir }]); + expect(fs.existsSync(path.join(intermediates, 'index.android.bundle.bugsee-js-source'))).toBe(true); + }); + + it('fails when hermesc exits 0 but writes no bytecode', () => { + const { spawn } = spawnWriting(null); + const code = run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h/hermesc' }, cwd: dir, isExecutable: () => true, spawn, stderr }); + expect(code).toBe(1); + expect(lines).toEqual([`bugsee: hermesc exited 0 but wrote no bytecode to ${js}.hbc (/h/hermesc)\n`]); + }); + + it('fails when the bytecode is empty, or a stale file was all there was', () => { + const { spawn } = spawnWriting(''); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn, stderr })).toBe(1); + fs.writeFileSync(`${js}.hbc`, 'stale from an earlier run'); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn: spawnWriting(null).spawn, stderr })).toBe(1); + expect(lines).toEqual([ + `bugsee: hermesc exited 0 but wrote no bytecode to ${js}.hbc (/h)\n`, + `bugsee: hermesc exited 0 but wrote no bytecode to ${js}.hbc (/h)\n`, + ]); + }); + + it('passes on hermesc\'s own exit code', () => { + const { spawn } = spawnWriting('HBC', { status: 3 }); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn, stderr })).toBe(3); + expect(lines).toEqual([]); + }); + + it('fails when hermesc is killed or cannot start', () => { + const killed = spawnWriting(null, { status: null, signal: 'SIGKILL' }).spawn; + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn: killed, stderr })).toBe(1); + const missing = () => ({ error: new Error('spawn /h ENOENT'), status: null }); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn: missing, stderr })).toBe(1); + expect(lines).toEqual(['bugsee: hermesc was killed by SIGKILL (/h)\n', 'bugsee: hermesc failed to start (/h): spawn /h ENOENT\n']); + }); + + it('fails without running anything when no hermesc is found, after preserving the JS', () => { + const { spawn, calls } = spawnWriting('HBC'); + const code = run(argv(), { env: {}, cwd: dir, isExecutable: () => false, resolve: () => null, spawn, stderr }); + expect(code).toBe(1); + expect(calls).toEqual([]); + expect(lines).toEqual(['bugsee: hermesc binary not found\n']); + expect(fs.existsSync(path.join(intermediates, 'index.android.bundle.bugsee-js-source'))).toBe(true); + expect(fs.existsSync(path.join(intermediates, 'index.android.bundle.bugsee-hermesc'))).toBe(false); + }); + + it('fails when there is no bundle or no -out, and writes nothing', () => { + const { spawn, calls } = spawnWriting('HBC'); + const deps = { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn, stderr }; + expect(run(['-w', '-out', `${js}.hbc`, path.join(dir, 'missing.js')], deps)).toBe(1); + expect(run(['-w', js], deps)).toBe(1); + expect(calls).toEqual([]); + expect(lines).toEqual([ + 'bugsee: hermesc wrapper could not find the JS bundle\n', + 'bugsee: hermesc wrapper was given no -out, so it cannot check that bytecode was written\n', + ]); + expect(fs.existsSync(path.join(dir, 'build', 'intermediates'))).toBe(false); + }); + + it('refuses a bundle outside generated/assets and writes nothing', () => { + const other = path.join(dir, 'out', 'index.android.bundle'); + fs.mkdirSync(path.dirname(other)); + fs.writeFileSync(other, 'js'); + const { spawn, calls } = spawnWriting('HBC'); + expect( + run(['-out', `${other}.hbc`, other], { env: { BUGSEE_REAL_HERMESC: '/h' }, cwd: dir, isExecutable: () => true, spawn, stderr }), + ).toBe(1); + expect(calls).toEqual([]); + expect(lines).toEqual([`bugsee: refusing to write preserve files beside the bundle (${path.dirname(other)})\n`]); + expect(fs.readdirSync(path.dirname(other))).toEqual(['index.android.bundle']); + }); + + it('runs a real hermesc with the default helpers', () => { + if (WIN) return; // the stand-in is a shell script; the launcher test covers Windows. + const hermesc = fakeHermesc(dir); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: hermesc }, cwd: dir, stderr })).toBe(0); + expect(fs.readFileSync(`${js}.hbc`, 'utf8')).toBe('HBC'); + expect(fs.readFileSync(path.join(intermediates, 'index.android.bundle.bugsee-hermesc'), 'utf8')).toBe(`${hermesc}\n`); + }); + + it('fails with the default helpers when a real hermesc writes nothing, or cannot start', () => { + if (WIN) return; + const silent = fakeHermesc(dir, null); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: silent }, cwd: dir, stderr })).toBe(1); + expect(lines).toEqual([`bugsee: hermesc exited 0 but wrote no bytecode to ${js}.hbc (${silent})\n`]); + // Not executable: not taken, and nothing else is there. + const plain = path.join(dir, 'plain'); + fs.writeFileSync(plain, ''); + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: plain }, cwd: dir, stderr })).toBe(1); + // A directory is not a hermesc either. + expect(run(argv(), { env: { BUGSEE_REAL_HERMESC: dir }, cwd: dir, stderr })).toBe(1); + expect(lines.slice(1)).toEqual(['bugsee: hermesc binary not found\n', 'bugsee: hermesc binary not found\n']); + }); +}); + +describe('launchers', () => { + let dir; + let js; + + beforeEach(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'bugsee-preserve-launch-')); + const assets = path.join(dir, 'build', 'generated', 'assets', 'react', 'release'); + fs.mkdirSync(assets, { recursive: true }); + js = path.join(assets, 'index.android.bundle'); + fs.writeFileSync(js, 'console.log("bundle")\n'); + }); + + afterEach(() => { + fs.rmSync(dir, { recursive: true, force: true }); + }); + + /** + * As React Native runs it: on Windows `cmd /c ` + * (windowsAwareCommandLine), elsewhere the command itself. + */ + const launch = (hermesc) => { + const args = ['-w', '-emit-binary', '-out', `${js}.hbc`, js]; + const options = { cwd: dir, encoding: 'utf8', env: { ...process.env, BUGSEE_REAL_HERMESC: hermesc } }; + return WIN + ? cp.spawnSync('cmd', ['/c', path.join(SCRIPTS, 'hermesc-preserve-js.cmd'), ...args], options) + : cp.spawnSync(path.join(SCRIPTS, 'hermesc-preserve-js.sh'), args, options); + }; + + /** The repository's own hermesc: a script stand-in cannot be spawned on Windows without a shell. */ + const realHermesc = () => + findHermesc({ env: {}, cwd: path.join(SCRIPTS, '..'), platform: process.platform, isExecutable: fs.existsSync }); + + it('compiles through the launcher for this host', () => { + const result = launch(WIN ? realHermesc() : fakeHermesc(dir)); + expect([result.status, result.stderr]).toEqual([0, '']); + expect(fs.statSync(`${js}.hbc`).size).toBeGreaterThan(0); + expect( + fs.existsSync(path.join(dir, 'build', 'intermediates', 'bugsee-sourcemaps', 'react', 'release', 'index.android.bundle.bugsee-js-source')), + ).toBe(true); + }); + + it('passes a failing hermesc exit code through the launcher', () => { + if (WIN) { + fs.writeFileSync(js, 'function (\n'); + const result = launch(realHermesc()); + expect(result.status).not.toBe(0); + expect(fs.existsSync(`${js}.hbc`)).toBe(false); + return; + } + expect(launch(fakeHermesc(dir, 'HBC', 5)).status).toBe(5); + }); + + it('exits non-zero through the launcher when hermesc writes nothing', () => { + if (WIN) return; // needs a stand-in hermesc; run() covers it on every host. + const result = launch(fakeHermesc(dir, null)); + expect(result.status).toBe(1); + expect(result.stderr).toContain('bugsee: hermesc exited 0 but wrote no bytecode'); + }); + + it('exits non-zero through the launcher when node cannot find the script\'s hermesc', () => { + const result = launch(path.join(dir, 'no-such-hermesc')); + // Falls back to the search from the scratch directory, which has no node_modules. + expect(result.status).toBe(1); + expect(result.stderr).toContain('bugsee: hermesc binary not found'); + }); + + it('ships a .cmd that runs the same script with every argument and keeps its exit code', () => { + const text = fs.readFileSync(path.join(SCRIPTS, 'hermesc-preserve-js.cmd'), 'utf8'); + const lines = text.split('\r\n'); + // CRLF throughout (see .gitattributes), ending in one. + expect(text.replace(/\r\n/g, '')).not.toContain('\n'); + expect(lines[lines.length - 1]).toBe(''); + expect(lines[0]).toBe('@echo off'); + expect(lines.filter((line) => !/^rem /.test(line) && line !== '')).toEqual([ + '@echo off', + 'node "%~dp0hermesc-preserve-js.js" %*', + 'exit /b %ERRORLEVEL%', + ]); + }); + + it('ships an executable .sh that runs the same script', () => { + const sh = path.join(SCRIPTS, 'hermesc-preserve-js.sh'); + expect(fs.readFileSync(sh, 'utf8')).toContain('exec node "$dir/hermesc-preserve-js.js" "$@"'); + if (!WIN) { + expect(fs.statSync(sh).mode & 0o111).toBe(0o111); + } + }); + + it('lists both launchers and the script in the published files', () => { + const pkg = JSON.parse(fs.readFileSync(path.join(SCRIPTS, '..', 'package.json'), 'utf8')); + expect(pkg.files).toEqual( + expect.arrayContaining([ + 'scripts/hermesc-preserve-js.js', + 'scripts/hermesc-preserve-js.sh', + 'scripts/hermesc-preserve-js.cmd', + 'scripts/hermes-sourcemaps.js', + ]), + ); + }); +}); diff --git a/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js b/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js index f533818d..f7d27fde 100644 --- a/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js +++ b/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js @@ -36,6 +36,7 @@ abstract class FakeBundle extends DefaultTask { @Internal abstract ListProperty getNodeExecutableAndArgs() @Internal abstract Property getHermesEnabled() @Internal abstract ListProperty getHermesFlags() + @Internal abstract Property getHermesCommand() @TaskAction void run() {} } @@ -67,13 +68,15 @@ components.variants << new FakeVariant(name: 'customRelease', outputs: [output(' // Starts with an "i": under the tr_TR locale this build runs in, String.toUpperCase() // would give "İnternalRelease", while RN's task name title-cases it to "InternalRelease". components.variants << new FakeVariant(name: 'internalRelease', outputs: [output('7.0', 70)]) +// Hermes on through a hermesCommand that names the shell launcher: fine off Windows. +components.variants << new FakeVariant(name: 'shellRelease', outputs: [output('8.0', 8)]) extensions.add('androidComponents', components) apply from: 'scripts/bugsee-sourcemaps.gradle' // A second apply (a bare app that copied the example and followed the README) is a no-op. apply from: 'scripts/bugsee-sourcemaps.gradle' -def bundle = { String variant, boolean hermes, String bundleDir = null -> +def bundle = { String variant, boolean hermes, String bundleDir = null, String hermesCommand = null -> // As React Native names the task: replaceFirstChar { it.titlecase() }. def cap = String.valueOf(Character.toTitleCase(variant.charAt(0))) + variant.substring(1) tasks.register("createBundle\${cap}JsAndAssets", FakeBundle) { t -> @@ -85,6 +88,7 @@ def bundle = { String variant, boolean hermes, String bundleDir = null -> t.nodeExecutableAndArgs.set([findProperty('nodePath').toString()]) t.hermesEnabled.set(hermes) t.hermesFlags.set(['-O', '-output-source-map']) + if (hermesCommand != null) t.hermesCommand.set(hermesCommand) } } bundle('freeRelease', true) @@ -96,6 +100,7 @@ bundle('StagingRelease', false) // Outside generated/assets: no preserve directory to map to, and none needed with Hermes off. bundle('customRelease', false, 'custom/js') bundle('internalRelease', false) +bundle('shellRelease', true, null, '/opt/bugsee/scripts/hermesc-preserve-js.SH') `; // Records argv, then does what finish would to the files it was given. @@ -143,6 +148,10 @@ function argOf(argv, name) { fs.mkdirSync(preserve('freeRelease'), { recursive: true }); fs.writeFileSync(path.join(preserve('freeRelease'), 'index.android.bundle.bugsee-js-source'), 'js'); fs.writeFileSync(path.join(preserve('freeRelease'), 'index.android.bundle.bugsee-hermesc'), '/opt/hermesc\n'); + fs.mkdirSync(assets('shellRelease'), { recursive: true }); + fs.writeFileSync(path.join(assets('shellRelease'), 'index.android.bundle'), 'bundle'); + fs.mkdirSync(preserve('shellRelease'), { recursive: true }); + fs.writeFileSync(path.join(preserve('shellRelease'), 'index.android.bundle.bugsee-js-source'), 'js'); // Hermes off with a stale preserve file from an earlier Hermes build. fs.mkdirSync(preserve('paidRelease'), { recursive: true }); fs.writeFileSync(path.join(preserve('paidRelease'), 'index.android.bundle.bugsee-js-source'), 'stale'); @@ -165,6 +174,7 @@ function argOf(argv, name) { 'createBundleStagingReleaseJsAndAssets', 'createBundleCustomReleaseJsAndAssets', 'createBundleInternalReleaseJsAndAssets', + 'createBundleShellReleaseJsAndAssets', ], { encoding: 'utf8', timeout: 10 * 60 * 1000 }, ); @@ -234,14 +244,18 @@ function argOf(argv, name) { expect(result.status).not.toBe(0); const output = `${result.stdout}${result.stderr}`; expect(output).toContain( - 'Bugsee: createBundleBrokenReleaseJsAndAssets compiled the bundle with Hermes, but hermesc did not run through hermesc-preserve-js.sh', + 'Bugsee: createBundleBrokenReleaseJsAndAssets compiled the bundle with Hermes, but hermesc did not run through the preserve wrapper', + ); + // The fix it names is the per-OS launcher. + expect(output).toContain( + 'System.getProperty("os.name").startsWith("Windows") ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh"', ); expect(output).toContain('hermesCommand'); expect(output).toContain('"Android source maps"'); expect(calls.some((argv) => argOf(argv, '--bundle').includes('/react/brokenRelease/'))).toBe(false); - // Only that task failed; --continue ran the other six, each once although + // Only that task failed; --continue ran the other seven, each once although // the script was applied twice. - expect(calls).toHaveLength(7); + expect(calls).toHaveLength(8); expect(output.match(/compiled the bundle with Hermes/g)).toHaveLength(1); }); @@ -250,6 +264,11 @@ function argOf(argv, name) { expect(`${result.stdout}${result.stderr}`).not.toContain('createBundleFreeReleaseJsAndAssets FAILED'); }); + it('off Windows, a hermesCommand naming a .sh is not refused', () => { + expect(argOf(callFor('shellRelease'), '--app-version')).toBe('8.0'); + expect(`${result.stdout}${result.stderr}`).not.toContain('a shell script, but on Windows'); + }); + it('finishes a Hermes-off bundle outside generated/assets', () => { const custom = callFor('custom/js'); expect(argOf(custom, '--bundle')).toBe(path.join(dir, 'build/custom/js/index.android.bundle')); diff --git a/packages/react-native/scripts/bugsee-sourcemaps.gradle b/packages/react-native/scripts/bugsee-sourcemaps.gradle index 6e0e71e4..86abb5ce 100644 --- a/packages/react-native/scripts/bugsee-sourcemaps.gradle +++ b/packages/react-native/scripts/bugsee-sourcemaps.gradle @@ -7,8 +7,9 @@ // apply from: new File(new File(bugseeDir, "scripts"), "bugsee-sourcemaps.gradle") // // After each createBundleJsAndAssets: -// - Hermes on: hermesc must have run through hermesc-preserve-js.sh -// (react { hermesCommand = ... }). The debug id is injected into the +// - Hermes on: hermesc must have run through the preserve wrapper +// (react { hermesCommand = ... }: hermesc-preserve-js.sh on macOS and +// Linux, hermesc-preserve-js.cmd on Windows). The debug id is injected into the // composed map and the bytecode, then that map is uploaded. Without the // preserved JS the task fails: the bundle would ship without a debug id. // - Hermes off: the packaged bundle is Metro's JS and the map is Metro's; @@ -47,7 +48,7 @@ androidComponents.onVariants(androidComponents.selector().all()) { variant -> bugseeVariantVersions[key] = [output.versionName, output.versionCode] } -// hermesc-preserve-js.sh writes beside generated/assets/ in +// The preserve wrapper writes beside generated/assets/ in // intermediates/bugsee-sourcemaps/. Null when the bundle is elsewhere. def bugseePreserveDir = { File assetDir -> def relative = bugseeBuildDir.toPath().relativize(assetDir.toPath()) @@ -58,17 +59,40 @@ def bugseePreserveDir = { File assetDir -> .resolve(relative.subpath(2, relative.nameCount)).toFile() } +// The hermesCommand the README and expo prebuild write: the launcher for the +// host, so one build.gradle serves macOS, Linux and Windows. +def bugseeHermesCommandFix = + "react { hermesCommand = new File(new File(bugseeDir, \"scripts\"), " + + "System.getProperty(\"os.name\").startsWith(\"Windows\") ? \"hermesc-preserve-js.cmd\" : \"hermesc-preserve-js.sh\").absolutePath }" + def bugseeMissingPreserve = { String taskName -> "Bugsee: ${taskName} compiled the bundle with Hermes, but hermesc did not run through " + - "hermesc-preserve-js.sh, so the app would ship without a debug id and its source map could " + - "not be uploaded. Set react { hermesCommand = \"<@bugsee/react-native>/scripts/hermesc-preserve-js.sh\" } " + + "the preserve wrapper, so the app would ship without a debug id and its source map could " + + "not be uploaded. Set ${bugseeHermesCommandFix} " + "in this module's build.gradle (expo prebuild writes it). See " + "node_modules/@bugsee/react-native/README.md, \"Android source maps\"." } +// React Native runs hermesCommand through `cmd /c` on Windows, and cmd cannot +// run a shell script: it exits 0, no bytecode is written, and the task only +// fails later on a missing .hbc. Say why before that happens. +def bugseeShellOnWindows = { String taskName, String command -> + "Bugsee: ${taskName} would run hermesc through ${command}, a shell script, but on Windows " + + "React Native runs hermesCommand with cmd, which cannot run it, so no bytecode would be " + + "written. Set ${bugseeHermesCommandFix} in this module's build.gradle (expo prebuild " + + "writes it). See node_modules/@bugsee/react-native/README.md, \"Android source maps\"." +} + tasks.matching { task -> task.name.startsWith("createBundle") && task.name.endsWith("JsAndAssets") }.configureEach { bundleTask -> + bundleTask.doFirst { + def command = bundleTask.hermesCommand.getOrElse("") + if (bundleTask.hermesEnabled.get() && System.getProperty("os.name").startsWith("Windows") && + command.toLowerCase(Locale.ROOT).endsWith(".sh")) { + throw new GradleException(bugseeShellOnWindows(bundleTask.name, command)) + } + } bundleTask.doLast { def asset = bundleTask.bundleAssetName.get() def assetDir = bundleTask.jsBundleDir.get().asFile diff --git a/packages/react-native/scripts/hermesc-preserve-js.cmd b/packages/react-native/scripts/hermesc-preserve-js.cmd new file mode 100644 index 00000000..9c5e7e2c --- /dev/null +++ b/packages/react-native/scripts/hermesc-preserve-js.cmd @@ -0,0 +1,6 @@ +@echo off +rem react.hermesCommand on Windows, where React Native runs it through +rem "cmd /c". macOS and Linux use hermesc-preserve-js.sh. The work, and its +rem non-zero exit when no bytecode came out, is in hermesc-preserve-js.js. +node "%~dp0hermesc-preserve-js.js" %* +exit /b %ERRORLEVEL% diff --git a/packages/react-native/scripts/hermesc-preserve-js.js b/packages/react-native/scripts/hermesc-preserve-js.js new file mode 100755 index 00000000..1560e751 --- /dev/null +++ b/packages/react-native/scripts/hermesc-preserve-js.js @@ -0,0 +1,185 @@ +#!/usr/bin/env node +'use strict'; + +/** + * The work behind `react.hermesCommand`. React Native runs the launcher with + * hermesc's own arguments: hermesc-preserve-js.sh on macOS and Linux, + * hermesc-preserve-js.cmd on Windows (React Native runs every command there + * through `cmd /c`, which cannot run a shell script). Both start this file. + * + * Copy the JS bundle aside before hermesc replaces it with bytecode, note + * which hermesc compiled it, then run that hermesc. Injection happens later, + * on the composed map (bugsee-sourcemaps.gradle, hermes-sourcemaps.js). + * + * Exits non-zero, with a `bugsee:` line, whenever no bytecode came out: + * React Native moves `.hbc` over the bundle next, and a wrapper that + * exits 0 without it only fails later, far from the cause. + */ + +const fs = require('node:fs'); +const path = require('node:path'); +const { preserveDirFor } = require('./hermes-sourcemaps'); + +/** The value after the last `-out`, as hermesc reads it. */ +function outputOf(argv) { + let out; + for (let i = 1; i < argv.length; i += 1) { + if (argv[i - 1] === '-out') { + out = argv[i]; + } + } + return out; +} + +/** The first argument that is not a flag, not the output, and is a file. */ +function bundleOf(argv, out, isFile) { + return argv.find((arg) => !arg.startsWith('-') && arg !== out && isFile(arg)); +} + +/** React Native's own names: getHermesOSBin, getHermesCBin. */ +function hermescBin(platform) { + if (platform === 'win32') { + return { osbin: 'win64-bin', bin: 'hermesc.exe' }; + } + return { osbin: platform === 'linux' ? 'linux64-bin' : 'osx-bin', bin: 'hermesc' }; +} + +function defaultResolve(request, from) { + try { + return require.resolve(request, { paths: [from] }); + } catch { + return null; + } +} + +/** + * The hermesc React Native would have run. BUGSEE_REAL_HERMESC first. Expo + * SDK 57 resolves hermes-compiler from the react-native package, so a pnpm or + * Yarn workspace install under node_modules/react-native/node_modules is + * found. React Native 0.81 (Expo SDK 54) has no hermes-compiler package and + * ships sdks/hermesc beside react-native/package.json. Then the app's own + * node_modules. Null when none is there. + */ +function findHermesc({ env, cwd, platform, isExecutable, resolve = defaultResolve }) { + if (env.BUGSEE_REAL_HERMESC && isExecutable(env.BUGSEE_REAL_HERMESC)) { + return env.BUGSEE_REAL_HERMESC; + } + const { osbin, bin } = hermescBin(platform); + const candidates = []; + const rnPkg = resolve('react-native/package.json', cwd); + if (rnPkg) { + const rnDir = path.dirname(rnPkg); + const compilerPkg = resolve('hermes-compiler/package.json', rnDir); + if (compilerPkg) { + candidates.push(path.join(path.dirname(compilerPkg), 'hermesc', osbin, bin)); + } + candidates.push(path.join(rnDir, 'sdks', 'hermesc', osbin, bin)); + } + candidates.push( + path.join(cwd, 'node_modules', 'hermes-compiler', 'hermesc', osbin, bin), + path.join(cwd, 'node_modules', 'react-native', 'sdks', 'hermes', 'build', 'bin', bin), + ); + return candidates.find((candidate) => isExecutable(candidate)) ?? null; +} + +/** + * Where the preserved JS goes. The bundle directory is packaged as assets, + * so files beside the bundle would ship in the APK; intermediates are not. + */ +function preserveDirOf(js, env, cwd) { + const jsDir = path.dirname(js); + let dir; + if (env.BUGSEE_PRESERVE_DIR) { + dir = path.resolve(cwd, env.BUGSEE_PRESERVE_DIR); + } else { + dir = preserveDirFor(js); + if (dir === jsDir) { + return { error: `refusing to write preserve files beside the bundle (${jsDir})` }; + } + } + if (dir === jsDir || dir.startsWith(jsDir + path.sep)) { + return { error: 'refusing to write preserve files into the packaged asset directory' }; + } + return { dir }; +} + +function defaultIsExecutable(file) { + try { + fs.accessSync(file, fs.constants.X_OK); + return fs.statSync(file).isFile(); + } catch { + return false; + } +} + +function defaultIsFile(file) { + try { + return fs.statSync(file).isFile(); + } catch { + return false; + } +} + +function defaultSpawn(file, args, cwd) { + return require('node:child_process').spawnSync(file, args, { cwd, stdio: 'inherit' }); +} + +/** Returns the exit code. */ +function run(argv, deps = {}) { + const env = deps.env ?? process.env; + const cwd = deps.cwd ?? process.cwd(); + const platform = deps.platform ?? process.platform; + const isExecutable = deps.isExecutable ?? defaultIsExecutable; + const spawn = deps.spawn ?? defaultSpawn; + const stderr = deps.stderr ?? ((line) => process.stderr.write(line)); + const fail = (message) => { + stderr(`bugsee: ${message}\n`); + return 1; + }; + + const out = outputOf(argv); + const bundle = bundleOf(argv, out, (arg) => defaultIsFile(path.resolve(cwd, arg))); + if (bundle === undefined) { + return fail('hermesc wrapper could not find the JS bundle'); + } + if (out === undefined) { + return fail('hermesc wrapper was given no -out, so it cannot check that bytecode was written'); + } + const js = path.resolve(cwd, bundle); + const preserve = preserveDirOf(js, env, cwd); + if (preserve.error) { + return fail(preserve.error); + } + fs.mkdirSync(preserve.dir, { recursive: true }); + const base = path.basename(js); + fs.copyFileSync(js, path.join(preserve.dir, `${base}.bugsee-js-source`)); + + const hermesc = findHermesc({ env, cwd, platform, isExecutable, resolve: deps.resolve }); + if (hermesc === null) { + return fail('hermesc binary not found'); + } + fs.writeFileSync(path.join(preserve.dir, `${base}.bugsee-hermesc`), `${hermesc}\n`); + + // A file left from an earlier run must not pass the check below. + const bytecode = path.resolve(cwd, out); + fs.rmSync(bytecode, { force: true }); + const result = spawn(hermesc, argv, cwd); + if (result.error) { + return fail(`hermesc failed to start (${hermesc}): ${result.error.message}`); + } + if (result.status !== 0) { + return result.status === null + ? fail(`hermesc was killed by ${result.signal} (${hermesc})`) + : result.status; + } + if (!defaultIsFile(bytecode) || fs.statSync(bytecode).size === 0) { + return fail(`hermesc exited 0 but wrote no bytecode to ${bytecode} (${hermesc})`); + } + return 0; +} + +module.exports = { bundleOf, findHermesc, hermescBin, outputOf, preserveDirOf, run }; + +if (require.main === module) { + process.exitCode = run(process.argv.slice(2)); +} diff --git a/packages/react-native/scripts/hermesc-preserve-js.sh b/packages/react-native/scripts/hermesc-preserve-js.sh index 2444541b..390aa810 100755 --- a/packages/react-native/scripts/hermesc-preserve-js.sh +++ b/packages/react-native/scripts/hermesc-preserve-js.sh @@ -1,118 +1,7 @@ -#!/bin/bash -# Android invokes this as `react.hermesCommand`. Copy the JS bundle aside -# before hermesc replaces it with bytecode, then run the real compiler. -# Injection happens later, on the composed map. - -set -euo pipefail - -out="" -prev="" -for arg in "$@"; do - if [[ "$prev" == "-out" ]]; then - out="$arg" - fi - prev="$arg" -done - -js="" -for arg in "$@"; do - if [[ "$arg" == -* ]]; then - continue - fi - if [[ -n "$out" && "$arg" == "$out" ]]; then - continue - fi - if [[ -f "$arg" ]]; then - js="$arg" - break - fi -done - -if [[ -z "$js" ]]; then - echo "bugsee: hermesc wrapper could not find the JS bundle" >&2 - exit 1 -fi - -# jsBundleDir is packaged as assets. Preserve files beside the bundle would -# ship in the APK. Intermediates are not. The last generated/assets in the -# path is the one under the build directory, which is where the Gradle hook -# (relative to the build directory) and hermes-sourcemaps.js look. -js_dir="$(dirname "$js")" -marker="/generated/assets/" -if [[ -n "${BUGSEE_PRESERVE_DIR:-}" ]]; then - preserve_dir="$BUGSEE_PRESERVE_DIR" -elif [[ "$js_dir" == *"$marker"* ]]; then - preserve_dir="${js_dir%"$marker"*}/intermediates/bugsee-sourcemaps/${js_dir##*"$marker"}" -else - echo "bugsee: refusing to write preserve files beside the bundle ($js_dir)" >&2 - exit 1 -fi -case "$preserve_dir" in - "$js_dir"|"$js_dir"/*) - echo "bugsee: refusing to write preserve files into the packaged asset directory" >&2 - exit 1 - ;; -esac -mkdir -p "$preserve_dir" -base="$(basename "$js")" -cp "$js" "${preserve_dir}/${base}.bugsee-js-source" - -find_hermesc() { - if [[ -n "${BUGSEE_REAL_HERMESC:-}" && -x "$BUGSEE_REAL_HERMESC" ]]; then - echo "$BUGSEE_REAL_HERMESC" - return - fi - local osbin="osx-bin" - local bin="hermesc" - case "$(uname -s)" in - Linux) osbin="linux64-bin" ;; - Darwin) osbin="osx-bin" ;; - MINGW*|MSYS*|CYGWIN*) osbin="win64-bin"; bin="hermesc.exe" ;; - esac - # Expo SDK 57 resolves hermes-compiler from the react-native package, so a - # pnpm or Yarn workspace install under node_modules/react-native/node_modules - # is found. React Native 0.81 (Expo SDK 54) has no hermes-compiler package - # and ships sdks/hermesc beside react-native/package.json. That path is next. - local pkg="" - if command -v node >/dev/null 2>&1; then - pkg="$(node --print "require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })" 2>/dev/null)" || pkg="" - fi - if [[ -n "$pkg" ]]; then - local resolved - resolved="$(dirname "$pkg")/hermesc/${osbin}/${bin}" - if [[ -x "$resolved" ]]; then - echo "$resolved" - return - fi - fi - local rn_pkg="" - if command -v node >/dev/null 2>&1; then - rn_pkg="$(node --print "require.resolve('react-native/package.json')" 2>/dev/null)" || rn_pkg="" - fi - if [[ -n "$rn_pkg" ]]; then - local shipped - shipped="$(dirname "$rn_pkg")/sdks/hermesc/${osbin}/${bin}" - if [[ -x "$shipped" ]]; then - echo "$shipped" - return - fi - fi - local candidate - for candidate in \ - "$PWD/node_modules/hermes-compiler/hermesc/${osbin}/${bin}" \ - "$PWD/node_modules/react-native/sdks/hermes/build/bin/${bin}" - do - if [[ -x "$candidate" ]]; then - echo "$candidate" - return - fi - done - return 1 -} - -real="$(find_hermesc)" || { - echo "bugsee: hermesc binary not found" >&2 - exit 1 -} -printf '%s\n' "$real" > "${preserve_dir}/${base}.bugsee-hermesc" -exec "$real" "$@" +#!/bin/sh +# react.hermesCommand on macOS and Linux. Windows runs the command through +# `cmd /c`, which cannot run this file: there it is hermesc-preserve-js.cmd. +# The work, and its non-zero exit when no bytecode came out, is in +# hermesc-preserve-js.js. +dir="$(cd "$(dirname "$0")" && pwd)" || exit 1 +exec node "$dir/hermesc-preserve-js.js" "$@" diff --git a/scripts/check-expo-prebuild.sh b/scripts/check-expo-prebuild.sh index 3496e996..3114a814 100755 --- a/scripts/check-expo-prebuild.sh +++ b/scripts/check-expo-prebuild.sh @@ -31,7 +31,7 @@ expect android/settings.gradle 'mavenCentral()' expect android/build.gradle "id 'com.bugsee.android.gradle' version '$plugin_version' apply false" expect android/app/build.gradle 'apply plugin: "com.bugsee.android.gradle"' expect android/app/build.gradle "implementation \"com.bugsee:bugsee-android-ndk:$sdk_version\"" -expect android/app/build.gradle 'scripts/hermesc-preserve-js.sh' +expect android/app/build.gradle '"/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")' expect android/app/build.gradle 'scripts/bugsee-sourcemaps.gradle")' expect android/app/build.gradle "debugSymbolLevel 'SYMBOL_TABLE'" expect android/bugsee.properties 'No app token configured.' diff --git a/stryker.plugin.json b/stryker.plugin.json index 0cb3ad09..477aed88 100644 --- a/stryker.plugin.json +++ b/stryker.plugin.json @@ -26,6 +26,7 @@ "packages/react-native/plugin/src/**/*.ts", "packages/react-native/scripts/hermes-sourcemaps.js", "packages/react-native/scripts/compose-then-inject.js", + "packages/react-native/scripts/hermesc-preserve-js.js", "!**/__tests__/**" ], "thresholds": { From a9ef177e42cc5918c6dcf63ecf5497834372e55d Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 12:56:44 +0500 Subject: [PATCH 02/12] campaign: Windows Hermes release job covers Expo and the .sh guard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows-latest workflow now also runs the wrapper tests on Windows (the .cmd through cmd /c with the repository's hermesc.exe), checks that a .sh hermesCommand fails the bundle task with the fix before hermesc, and builds the Expo example after an `expo prebuild` on the runner: composed map debug id, the same id in the APK bytecode, and the upload to the stub. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/campaign-windows-hermes.yml | 141 +++++++++++++++++- 1 file changed, 135 insertions(+), 6 deletions(-) diff --git a/.github/workflows/campaign-windows-hermes.yml b/.github/workflows/campaign-windows-hermes.yml index f5c73654..7c66c374 100644 --- a/.github/workflows/campaign-windows-hermes.yml +++ b/.github/workflows/campaign-windows-hermes.yml @@ -1,19 +1,24 @@ name: campaign windows hermes (temporary) # Beta campaign N-25 / MX-WIN / HOOK-13 (Task 13.7). TEMPORARY: delete after -# the first beta's campaign. Proves (or disproves) a Hermes release build of -# the bare example on a Windows host: hermesc through hermesc-preserve-js.sh, -# the composed map, the debug id in map and bytecode, and the source-map -# upload, which goes to a stub server on the runner. Never a real token, never -# a Bugsee endpoint. The APK is kept as an artifact for the device lane -# (composed-debug-id on the WOD_LX1). +# the first beta's campaign. Proves a Hermes release build on a Windows host, +# for the bare example and for the Expo example after `expo prebuild`: +# hermesc through hermesc-preserve-js.cmd (React Native runs hermesCommand +# with `cmd /c`, which cannot run the .sh), the composed map, the debug id in +# map and bytecode, and the source-map upload, which goes to a stub server on +# the runner. Never a real token, never a Bugsee endpoint. The APKs are kept +# as artifacts for the device lane (composed-debug-id on the WOD_LX1). on: workflow_dispatch: pull_request: paths: - .github/workflows/campaign-windows-hermes.yml + - .gitattributes - packages/react-native/scripts/** + - packages/react-native/plugin/** + - examples/bare/android/** + - examples/expo/** concurrency: group: campaign-windows-${{ github.ref }} @@ -47,6 +52,11 @@ jobs: - run: corepack enable - run: yarn install --immutable + # The wrapper's own tests, on Windows: the .cmd launcher run the way + # React Native runs it (cmd /c), with the repository's hermesc.exe. + - name: Wrapper tests (Windows) + run: yarn jest packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js + # The repo's own stand-in for the symbol API (the upload tests use it): # POST /apps//symbols answers with a PUT URL on itself, and the # PUT's zip is unpacked and its map's debug_id logged. @@ -123,3 +133,122 @@ jobs: ${{ runner.temp }}/gradle.log ${{ runner.temp }}/stub.log if-no-files-found: warn + + # The guard for builds wired by an earlier README: a hermesCommand that + # names the .sh fails the bundle task before hermesc, with the fix, + # instead of a NoSuchFileException on the .hbc. hermesCommand is a task + # input, so the bundle task reruns. + - name: A .sh hermesCommand on Windows fails with the fix + shell: pwsh + run: | + Add-Content examples/bare/android/app/build.gradle "`nreact { hermesCommand = file(`"../../node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.sh`").absolutePath }" + Push-Location examples/bare/android + ./gradlew.bat :app:createBundleReleaseJsAndAssets -PreactNativeArchitectures=arm64-v8a -PbugseeE2eDebuggable=true *> "$env:RUNNER_TEMP/guard.log" + $code = $LASTEXITCODE + Pop-Location + Get-Content "$env:RUNNER_TEMP/guard.log" | Select-String -Pattern "Bugsee|FAILED|NoSuchFile" | Select-Object -First 20 + if ($code -eq 0) { Write-Error "FAIL: the bundle task passed with a .sh hermesCommand"; exit 1 } + if (-not (Select-String -Path "$env:RUNNER_TEMP/guard.log" -SimpleMatch "a shell script, but on Windows" -Quiet)) { Write-Error "FAIL: no Bugsee guard message"; exit 1 } + if (Select-String -Path "$env:RUNNER_TEMP/guard.log" -SimpleMatch "NoSuchFileException" -Quiet) { Write-Error "FAIL: hermesc ran before the guard"; exit 1 } + Write-Output "guard: failed with the fix, before hermesc" + + # The same on the Expo example: the config plugin writes hermesCommand, the + # per-OS launcher, during `expo prebuild` on this Windows runner. + expo-android-release: + name: expo android release (windows-latest) + runs-on: windows-latest + timeout-minutes: 75 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22.18' + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + - run: corepack enable + - run: yarn install --immutable + + # The synthetic token makes the hook upload the map (to the stub); + # uploadSymbols false keeps the Gradle plugin's own uploads off, which is + # not what this job proves. + - name: Expo prebuild (Android) with a synthetic token + working-directory: examples/expo + run: | + cat > app.config.js <<'JS' + module.exports = ({ config }) => ({ + ...config, + plugins: [['@bugsee/react-native', { appToken: process.env.BUGSEE_TOKEN_ANDROID, uploadSymbols: false }]], + }); + JS + CI=1 yarn expo prebuild --clean --no-install --platform android + grep -n 'hermesCommand' android/app/build.gradle + grep -qF '"/scripts/hermesc-preserve-js" + (System.getProperty("os.name").startsWith("Windows") ? ".cmd" : ".sh")' android/app/build.gradle + + - name: Release build (Hermes) against the stub symbol API + shell: pwsh + run: | + New-Item -ItemType File -Force "$env:RUNNER_TEMP/stub.log" | Out-Null + $stub = Start-Process node -PassThru -NoNewWindow -ArgumentList @( + 'packages/react-native/scripts/__tests__/fixtures/symbol-stub-server.js', + '--port', '8777', '--log', "$env:RUNNER_TEMP/stub.log") + Start-Sleep -Seconds 2 + Push-Location examples/expo/android + ./gradlew.bat :app:assembleRelease -PreactNativeArchitectures=arm64-v8a --stacktrace *> "$env:RUNNER_TEMP/gradle.log" + $code = $LASTEXITCODE + Pop-Location + Stop-Process -Id $stub.Id -ErrorAction SilentlyContinue + Get-Content "$env:RUNNER_TEMP/gradle.log" + exit $code + + - name: Composed map carries a debug id; the bytecode carries the same one + working-directory: examples/expo/android/app/build + run: | + map="$(find generated/sourcemaps -name 'index.android.bundle.map' | head -1)" + echo "composed map: $map" + node -e ' + const m = JSON.parse(require("fs").readFileSync(process.argv[1], "utf8")); + const id = m.debugId || m.debug_id; + if (!id) { console.error("FAIL: no debugId in the composed map"); process.exit(1); } + console.log("debugId " + id); + require("fs").writeFileSync(process.env.RUNNER_TEMP + "/debug-id", id); + ' "$map" + apk=outputs/apk/release/app-release.apk + unzip -o -q "$apk" assets/index.android.bundle -d "$RUNNER_TEMP/apk" + id="$(cat "$RUNNER_TEMP/debug-id")" + if grep -a -q "$id" "$RUNNER_TEMP/apk/assets/index.android.bundle"; then + echo "bytecode carries $id" + else + echo "FAIL: the packaged bytecode does not carry $id"; exit 1 + fi + + - name: The composed map reached the stub, with that debug id + if: always() + run: | + echo "--- stub requests"; cat "$RUNNER_TEMP/stub.log" + echo "--- hook lines"; grep -i "bugsee" "$RUNNER_TEMP/gradle.log" | head -40 || true + node -e ' + const fs = require("fs"); + const want = fs.existsSync(process.argv[2]) ? fs.readFileSync(process.argv[2], "utf8").trim() : ""; + if (!want) { console.error("FAIL: no composed-map debug id to look for"); process.exit(1); } + const puts = fs.readFileSync(process.argv[1], "utf8").split("\n").filter(Boolean) + .map((l) => JSON.parse(l)).filter((e) => e.method === "PUT"); + const hit = puts.some((e) => (e.entries || []).some((x) => x.debugId === want)); + if (!hit) { console.error("FAIL: no PUT carried a map with debug_id " + want); process.exit(1); } + console.log("stub received the map with debug_id " + want); + ' "$RUNNER_TEMP/stub.log" "$RUNNER_TEMP/debug-id" + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: campaign-windows-hermes-expo + path: | + examples/expo/android/app/build/outputs/apk/release/app-release.apk + examples/expo/android/app/build/generated/sourcemaps/** + ${{ runner.temp }}/gradle.log + ${{ runner.temp }}/stub.log + if-no-files-found: warn From 0b830fb64cfc0147496e3398c91997173fa148b2 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 13:02:06 +0500 Subject: [PATCH 03/12] Preserve wrapper: tests for every helper; drop a redundant setter check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scoped mutation run (stryker.plugin.json, --mutate on hermesc-preserve-js.js and the hermesCommand rewrite in gradle.ts): 93.86 -> 98.25, the wrapper at 100. The setter-call check before the legacy match could not change the outcome (a setter's value carries its closing bracket), so it goes. The command-line entry runs only in a child process and is excluded from mutation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- packages/react-native/plugin/build/gradle.js | 3 +- .../react-native/plugin/build/gradle.js.map | 2 +- packages/react-native/plugin/src/gradle.ts | 3 +- .../__tests__/hermesc-preserve-js.test.js | 81 +++++++++++++++++++ .../scripts/hermesc-preserve-js.js | 37 ++++++--- 5 files changed, 112 insertions(+), 14 deletions(-) diff --git a/packages/react-native/plugin/build/gradle.js b/packages/react-native/plugin/build/gradle.js index 3c2251f9..b56d9be6 100644 --- a/packages/react-native/plugin/build/gradle.js +++ b/packages/react-native/plugin/build/gradle.js @@ -959,7 +959,8 @@ function rewriteHermesCommand(source) { // The value as written, up to a trailing comment. const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; const written = line.raw.slice(match[0].length, valueEnd).trim(); - if (match[2] !== '.set(' && written === exports.LEGACY_HERMES_COMMAND_EXPR) { + // A setter call never equals it: its value carries the closing bracket. + if (written === exports.LEGACY_HERMES_COMMAND_EXPR) { lines[i] = `${match[1]}hermesCommand = ${exports.HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; continue; } diff --git a/packages/react-native/plugin/build/gradle.js.map b/packages/react-native/plugin/build/gradle.js.map index f91bdbe6..90d9f902 100644 --- a/packages/react-native/plugin/build/gradle.js.map +++ b/packages/react-native/plugin/build/gradle.js.map @@ -1 +1 @@ -{"version":3,"file":"gradle.js","sourceRoot":"","sources":["../src/gradle.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gradle.js","sourceRoot":"","sources":["../src/gradle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/react-native/plugin/src/gradle.ts b/packages/react-native/plugin/src/gradle.ts index e4118cf6..9c1e6ae1 100644 --- a/packages/react-native/plugin/src/gradle.ts +++ b/packages/react-native/plugin/src/gradle.ts @@ -1124,7 +1124,8 @@ function rewriteHermesCommand(source: string): string { // The value as written, up to a trailing comment. const valueEnd = line.raw.slice(0, line.commentAt ?? line.raw.length).trimEnd().length; const written = line.raw.slice(match[0].length, valueEnd).trim(); - if (match[2] !== '.set(' && written === LEGACY_HERMES_COMMAND_EXPR) { + // A setter call never equals it: its value carries the closing bracket. + if (written === LEGACY_HERMES_COMMAND_EXPR) { lines[i] = `${match[1] as string}hermesCommand = ${HERMES_COMMAND_EXPR}${line.raw.slice(valueEnd)}`; continue; } diff --git a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js index abf2438d..5f82cdd8 100644 --- a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js +++ b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js @@ -13,9 +13,13 @@ const { bundleOf, findHermesc, hermescBin, + isExecutableFile, + isFile, outputOf, preserveDirOf, + resolveFrom, run, + spawnInherit, } = require('../hermesc-preserve-js'); const { useScratchCwd } = require('./fixtures/scratch-cwd'); @@ -45,6 +49,8 @@ describe('argument parsing', () => { expect(outputOf(['-w', '-out', 'a.hbc', 'x.js', '-out', 'b.hbc'])).toBe('b.hbc'); expect(outputOf(['-w', '-out', 'a.hbc', 'x.js'])).toBe('a.hbc'); expect(outputOf(['x.js', '-out'])).toBeUndefined(); + // A trailing -out with nothing after it leaves the earlier value. + expect(outputOf(['-out', 'a.hbc', '-out'])).toBe('a.hbc'); expect(outputOf(['-emit-binary', 'x.js'])).toBeUndefined(); expect(outputOf([])).toBeUndefined(); }); @@ -127,6 +133,12 @@ describe('findHermesc', () => { expect(find([compiled, shipped], { rn: false })).toBeNull(); }); + it('takes the first candidate that exists, in order, and nothing else', () => { + expect(find(['/anything'], { rn: false }, {}, 'darwin')).toBeNull(); + const all = findHermesc({ env: {}, cwd, platform: 'darwin', isExecutable: () => true, resolve: () => null }); + expect(all).toBe(sibling); + }); + it('uses the Windows directory and file name on Windows', () => { const win = path.join(compilerDir, 'hermesc', 'win64-bin', 'hermesc.exe'); expect(find([win, compiled], {}, {}, 'win32')).toBe(win); @@ -152,6 +164,48 @@ describe('findHermesc', () => { }); }); +describe('file helpers', () => { + let dir; + beforeEach(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'bugsee-preserve-helpers-')); + }); + afterEach(() => { + fs.rmSync(dir, { recursive: true, force: true }); + }); + + it('resolveFrom resolves from the given directory, or gives null', () => { + fs.mkdirSync(path.join(dir, 'node_modules', 'pkg'), { recursive: true }); + fs.writeFileSync(path.join(dir, 'node_modules', 'pkg', 'package.json'), '{"name":"pkg"}'); + expect(fs.realpathSync(resolveFrom('pkg/package.json', dir))).toBe( + fs.realpathSync(path.join(dir, 'node_modules', 'pkg', 'package.json')), + ); + expect(resolveFrom('no-such-package-for-bugsee-tests/package.json', dir)).toBeNull(); + }); + + it('isFile and isExecutableFile say false, not undefined, for what is not there', () => { + const file = path.join(dir, 'f'); + fs.writeFileSync(file, 'x'); + expect(isFile(file)).toBe(true); + expect(isFile(dir)).toBe(false); + expect(isFile(path.join(dir, 'missing'))).toBe(false); + expect(isExecutableFile(path.join(dir, 'missing'))).toBe(false); + expect(isExecutableFile(dir)).toBe(false); + if (!WIN) { + expect(isExecutableFile(file)).toBe(false); + fs.chmodSync(file, 0o755); + expect(isExecutableFile(file)).toBe(true); + } + }); + + it('spawnInherit runs in the given directory and hands hermesc the build log', () => { + const result = spawnInherit(process.execPath, ['-e', 'process.exit(process.cwd() === process.argv[1] ? 7 : 8)', fs.realpathSync(dir)], fs.realpathSync(dir)); + expect(result.status).toBe(7); + // Inherited streams are not captured. + expect(result.stdout).toBeNull(); + expect(result.stderr).toBeNull(); + }); +}); + describe('preserveDirOf', () => { const build = path.join(path.sep, 'app', 'android', 'app', 'build'); const js = path.join(build, 'generated', 'assets', 'react', 'release', 'index.android.bundle'); @@ -245,6 +299,25 @@ describe('run', () => { expect(fs.existsSync(path.join(intermediates, 'index.android.bundle.bugsee-js-source'))).toBe(true); }); + it('takes the host platform unless one is given', () => { + const win = path.join(dir, 'node_modules', 'hermes-compiler', 'hermesc', 'win64-bin', 'hermesc.exe'); + const { spawn, calls } = spawnWriting('HBC'); + const deps = { env: {}, cwd: dir, isExecutable: (f) => f === win, resolve: () => null, spawn, stderr }; + expect(run(argv(), { ...deps, platform: 'win32' })).toBe(0); + expect(calls.map((call) => call.file)).toEqual([win]); + expect(run(argv(), deps)).toBe(WIN ? 0 : 1); + }); + + it('writes its failures to stderr by default', () => { + const write = jest.spyOn(process.stderr, 'write').mockImplementation(() => true); + try { + expect(run(['-w'], { env: {}, cwd: dir })).toBe(1); + expect(write).toHaveBeenCalledWith('bugsee: hermesc wrapper could not find the JS bundle\n'); + } finally { + write.mockRestore(); + } + }); + it('fails when hermesc exits 0 but writes no bytecode', () => { const { spawn } = spawnWriting(null); const code = run(argv(), { env: { BUGSEE_REAL_HERMESC: '/h/hermesc' }, cwd: dir, isExecutable: () => true, spawn, stderr }); @@ -321,6 +394,14 @@ describe('run', () => { expect(fs.readFileSync(path.join(intermediates, 'index.android.bundle.bugsee-hermesc'), 'utf8')).toBe(`${hermesc}\n`); }); + it('runs a real hermesc in the working directory, with relative arguments', () => { + if (WIN) return; + const hermesc = fakeHermesc(dir); + const rel = path.relative(dir, js); + expect(run(['-w', '-out', `${rel}.hbc`, rel], { env: { BUGSEE_REAL_HERMESC: hermesc }, cwd: dir, stderr })).toBe(0); + expect(fs.readFileSync(`${js}.hbc`, 'utf8')).toBe('HBC'); + }); + it('fails with the default helpers when a real hermesc writes nothing, or cannot start', () => { if (WIN) return; const silent = fakeHermesc(dir, null); diff --git a/packages/react-native/scripts/hermesc-preserve-js.js b/packages/react-native/scripts/hermesc-preserve-js.js index 1560e751..5b088694 100755 --- a/packages/react-native/scripts/hermesc-preserve-js.js +++ b/packages/react-native/scripts/hermesc-preserve-js.js @@ -44,7 +44,8 @@ function hermescBin(platform) { return { osbin: platform === 'linux' ? 'linux64-bin' : 'osx-bin', bin: 'hermesc' }; } -function defaultResolve(request, from) { +/** require.resolve from a directory, or null. */ +function resolveFrom(request, from) { try { return require.resolve(request, { paths: [from] }); } catch { @@ -60,7 +61,7 @@ function defaultResolve(request, from) { * ships sdks/hermesc beside react-native/package.json. Then the app's own * node_modules. Null when none is there. */ -function findHermesc({ env, cwd, platform, isExecutable, resolve = defaultResolve }) { +function findHermesc({ env, cwd, platform, isExecutable, resolve = resolveFrom }) { if (env.BUGSEE_REAL_HERMESC && isExecutable(env.BUGSEE_REAL_HERMESC)) { return env.BUGSEE_REAL_HERMESC; } @@ -103,7 +104,7 @@ function preserveDirOf(js, env, cwd) { return { dir }; } -function defaultIsExecutable(file) { +function isExecutableFile(file) { try { fs.accessSync(file, fs.constants.X_OK); return fs.statSync(file).isFile(); @@ -112,7 +113,7 @@ function defaultIsExecutable(file) { } } -function defaultIsFile(file) { +function isFile(file) { try { return fs.statSync(file).isFile(); } catch { @@ -120,7 +121,8 @@ function defaultIsFile(file) { } } -function defaultSpawn(file, args, cwd) { +/** hermesc's output goes to the build log, as when React Native runs it. */ +function spawnInherit(file, args, cwd) { return require('node:child_process').spawnSync(file, args, { cwd, stdio: 'inherit' }); } @@ -129,8 +131,8 @@ function run(argv, deps = {}) { const env = deps.env ?? process.env; const cwd = deps.cwd ?? process.cwd(); const platform = deps.platform ?? process.platform; - const isExecutable = deps.isExecutable ?? defaultIsExecutable; - const spawn = deps.spawn ?? defaultSpawn; + const isExecutable = deps.isExecutable ?? isExecutableFile; + const spawn = deps.spawn ?? spawnInherit; const stderr = deps.stderr ?? ((line) => process.stderr.write(line)); const fail = (message) => { stderr(`bugsee: ${message}\n`); @@ -138,7 +140,7 @@ function run(argv, deps = {}) { }; const out = outputOf(argv); - const bundle = bundleOf(argv, out, (arg) => defaultIsFile(path.resolve(cwd, arg))); + const bundle = bundleOf(argv, out, (arg) => isFile(path.resolve(cwd, arg))); if (bundle === undefined) { return fail('hermesc wrapper could not find the JS bundle'); } @@ -172,14 +174,27 @@ function run(argv, deps = {}) { ? fail(`hermesc was killed by ${result.signal} (${hermesc})`) : result.status; } - if (!defaultIsFile(bytecode) || fs.statSync(bytecode).size === 0) { + if (!isFile(bytecode) || fs.statSync(bytecode).size === 0) { return fail(`hermesc exited 0 but wrote no bytecode to ${bytecode} (${hermesc})`); } return 0; } -module.exports = { bundleOf, findHermesc, hermescBin, outputOf, preserveDirOf, run }; - +module.exports = { + bundleOf, + findHermesc, + hermescBin, + isExecutableFile, + isFile, + outputOf, + preserveDirOf, + resolveFrom, + run, + spawnInherit, +}; + +// Stryker disable all: the command-line entry runs only in a child process (the launcher tests). if (require.main === module) { process.exitCode = run(process.argv.slice(2)); } +// Stryker restore all From 54df3b4ce2614fe03391eab043d8eab03b5e57b8 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 13:03:17 +0500 Subject: [PATCH 04/12] Preserve wrapper tests: absolute paths and real paths that hold on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows-latest run showed three test-only failures: a rootless path gains a drive letter when resolved, and the runner's temp directory comes back in 8.3 short form from realpathSync. The launcher tests (the .cmd through cmd /c with hermesc.exe) passed there. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../__tests__/hermesc-preserve-js.test.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js index 5f82cdd8..43fa9c1c 100644 --- a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js +++ b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js @@ -157,7 +157,8 @@ describe('findHermesc', () => { fs.writeFileSync(real, ''); fs.chmodSync(real, 0o755); const found = findHermesc({ env: {}, cwd: app, platform: process.platform, isExecutable: fs.existsSync }); - expect(fs.realpathSync(found)).toBe(fs.realpathSync(real)); + // .native: Windows temp paths can come back in 8.3 short form. + expect(fs.realpathSync.native(found)).toBe(fs.realpathSync.native(real)); } finally { fs.rmSync(app, { recursive: true, force: true }); } @@ -207,19 +208,21 @@ describe('file helpers', () => { }); describe('preserveDirOf', () => { - const build = path.join(path.sep, 'app', 'android', 'app', 'build'); + // Absolute on every host (a drive letter on Windows), as run() passes it. + const root = path.resolve(path.sep, 'app'); + const build = path.join(root, 'android', 'app', 'build'); const js = path.join(build, 'generated', 'assets', 'react', 'release', 'index.android.bundle'); const jsDir = path.dirname(js); it('maps generated/assets to intermediates/bugsee-sourcemaps', () => { - expect(preserveDirOf(js, {}, '/')).toEqual({ + expect(preserveDirOf(js, {}, root)).toEqual({ dir: path.join(build, 'intermediates', 'bugsee-sourcemaps', 'react', 'release'), }); }); it('refuses a bundle outside generated/assets', () => { - const elsewhere = path.join(path.sep, 'app', 'out', 'index.android.bundle'); - expect(preserveDirOf(elsewhere, {}, '/')).toEqual({ + const elsewhere = path.join(root, 'out', 'index.android.bundle'); + expect(preserveDirOf(elsewhere, {}, root)).toEqual({ error: `refusing to write preserve files beside the bundle (${path.dirname(elsewhere)})`, }); }); @@ -227,13 +230,13 @@ describe('preserveDirOf', () => { it('takes BUGSEE_PRESERVE_DIR, relative to the working directory', () => { expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: 'keep' }, build)).toEqual({ dir: path.join(build, 'keep') }); // Beside the asset directory, not in it: a shared name prefix is fine. - expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: `${jsDir}-keep` }, '/')).toEqual({ dir: `${jsDir}-keep` }); + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: `${jsDir}-keep` }, root)).toEqual({ dir: `${jsDir}-keep` }); }); it('refuses a BUGSEE_PRESERVE_DIR in the packaged asset directory', () => { const error = { error: 'refusing to write preserve files into the packaged asset directory' }; - expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: jsDir }, '/')).toEqual(error); - expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: path.join(jsDir, 'sub') }, '/')).toEqual(error); + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: jsDir }, root)).toEqual(error); + expect(preserveDirOf(js, { BUGSEE_PRESERVE_DIR: path.join(jsDir, 'sub') }, root)).toEqual(error); }); }); From d8d2eda7448cb10a4b07fb477bb2dfc64d8b3ad7 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 13:06:24 +0500 Subject: [PATCH 05/12] README: hermesCommand on one line; the campaign extractor checks it whole MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cursor review (PR 65): scripts/campaign/lib/readme-android.js copies the README's hermesCommand with a one-line match, so the two-line per-OS value was cut after `new File(new File(bugseeDir, "scripts"),` and every generated bare app would fail to configure. The README keeps the value on one line, the shape the Expo plugin writes, and the extractor now refuses a value whose brackets do not close on its line or that does not name both launchers. Test: the real README goes through the extractor whole, and a split value is refused. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- packages/react-native/README.md | 4 +- .../__tests__/campaign-readme-android.test.ts | 69 +++++++++++++++++++ scripts/campaign/lib/readme-android.js | 7 ++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 scripts/__tests__/campaign-readme-android.test.ts diff --git a/packages/react-native/README.md b/packages/react-native/README.md index 1233b11b..ad41b747 100644 --- a/packages/react-native/README.md +++ b/packages/react-native/README.md @@ -124,8 +124,8 @@ react { // Copies the JS aside before hermesc compiles it, so the debug id can // reach the bytecode. React Native runs this command through cmd on // Windows, so Windows gets the .cmd launcher and macOS and Linux the .sh. - hermesCommand = new File(new File(bugseeDir, "scripts"), - System.getProperty("os.name").startsWith("Windows") ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh").absolutePath + // Keep it on one line: tools that apply this snippet read it as one. + hermesCommand = new File(new File(bugseeDir, "scripts"), System.getProperty("os.name").startsWith("Windows") ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh").absolutePath } // At the end of the file. Applying it twice is harmless. diff --git a/scripts/__tests__/campaign-readme-android.test.ts b/scripts/__tests__/campaign-readme-android.test.ts new file mode 100644 index 00000000..a18577a4 --- /dev/null +++ b/scripts/__tests__/campaign-readme-android.test.ts @@ -0,0 +1,69 @@ +// scripts/campaign/lib/readme-android.js applies the README's "Android source +// maps" snippet literally to a generated app (gen-rn-app.sh, N-20). The +// hermesCommand it copies must be the README's whole per-OS line. + +import * as cp from 'node:child_process'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; + +const REPO = path.join(__dirname, '..', '..'); +const SCRIPT = path.join(REPO, 'scripts', 'campaign', 'lib', 'readme-android.js'); + +function appWithReadme(readme: string): { app: string; gradle: string } { + const app = fs.mkdtempSync(path.join(os.tmpdir(), 'bugsee-readme-android-')); + const pkg = path.join(app, 'node_modules', '@bugsee', 'react-native'); + fs.mkdirSync(pkg, { recursive: true }); + fs.writeFileSync(path.join(pkg, 'package.json'), '{"name":"@bugsee/react-native"}\n'); + fs.writeFileSync(path.join(pkg, 'README.md'), readme); + const gradle = path.join(app, 'android', 'app', 'build.gradle'); + fs.mkdirSync(path.dirname(gradle), { recursive: true }); + fs.writeFileSync(gradle, 'apply plugin: "com.facebook.react"\n\nreact {\n autolinkLibrariesWithApp()\n}\n'); + return { app, gradle }; +} + +describe('readme-android.js', () => { + it('copies the README hermesCommand whole, with both launchers', () => { + const readme = fs.readFileSync(path.join(REPO, 'packages', 'react-native', 'README.md'), 'utf8'); + const { app, gradle } = appWithReadme(readme); + try { + const result = cp.spawnSync(process.execPath, [SCRIPT, gradle], { encoding: 'utf8' }); + expect([result.status, result.stderr]).toEqual([0, '']); + const line = fs + .readFileSync(gradle, 'utf8') + .split('\n') + .find((entry: string) => /^\s*hermesCommand = /.test(entry)); + expect(line).toBe( + ' hermesCommand = new File(new File(bugseeDir, "scripts"), System.getProperty("os.name").startsWith("Windows") ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh").absolutePath', + ); + } finally { + fs.rmSync(app, { recursive: true, force: true }); + } + }); + + it('refuses a README whose hermesCommand spans lines', () => { + const split = [ + '## Android source maps', + '', + '```groovy', + 'def bugseeDir = new File(["node", "--print", "x"].execute(null, rootDir).text.trim()).getParentFile()', + '', + 'react {', + ' hermesCommand = new File(new File(bugseeDir, "scripts"),', + ' cond ? "hermesc-preserve-js.cmd" : "hermesc-preserve-js.sh").absolutePath', + '}', + '', + 'apply from: new File(new File(bugseeDir, "scripts"), "bugsee-sourcemaps.gradle")', + '```', + '', + ].join('\n'); + const { app, gradle } = appWithReadme(split); + try { + const result = cp.spawnSync(process.execPath, [SCRIPT, gradle], { encoding: 'utf8' }); + expect(result.status).not.toBe(0); + expect(result.stderr).toContain('README hermesCommand is not one whole per-OS line'); + } finally { + fs.rmSync(app, { recursive: true, force: true }); + } + }); +}); diff --git a/scripts/campaign/lib/readme-android.js b/scripts/campaign/lib/readme-android.js index 15c01dd2..97b1967b 100644 --- a/scripts/campaign/lib/readme-android.js +++ b/scripts/campaign/lib/readme-android.js @@ -26,6 +26,13 @@ const applyMatch = /^apply from: .*$/m.exec(snippet); if (!defMatch || !hermesMatch || !applyMatch) { throw new Error('README snippet changed shape; update scripts/campaign/lib/readme-android.js'); } +// One line, whole: brackets close on it, and it names both launchers (the +// per-OS choice). A value split over lines would be cut here silently. +const hermesLine = hermesMatch[0]; +const depth = [...hermesLine].reduce((d, ch) => d + ('([{'.includes(ch) ? 1 : ')]}'.includes(ch) ? -1 : 0), 0); +if (depth !== 0 || !hermesLine.includes('hermesc-preserve-js.cmd') || !hermesLine.includes('hermesc-preserve-js.sh')) { + throw new Error(`README hermesCommand is not one whole per-OS line: ${hermesLine.trim()}`); +} let gradle = fs.readFileSync(gradleFile, 'utf8'); const reactBlock = gradle.indexOf('\nreact {'); From c4c844b6bdf0240a6d3612a09d41aa2f3b353634 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 13:22:10 +0500 Subject: [PATCH 06/12] Preserve wrapper tests: resolveFrom compares native real paths (Windows 8.3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cursor review (PR 65): the resolveFrom test still used realpathSync, which keeps the runner's 8.3 temp path, while require.resolve returns the long form; it failed on windows-latest before the release build ran. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../scripts/__tests__/hermesc-preserve-js.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js index 43fa9c1c..e1311fa0 100644 --- a/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js +++ b/packages/react-native/scripts/__tests__/hermesc-preserve-js.test.js @@ -177,8 +177,8 @@ describe('file helpers', () => { it('resolveFrom resolves from the given directory, or gives null', () => { fs.mkdirSync(path.join(dir, 'node_modules', 'pkg'), { recursive: true }); fs.writeFileSync(path.join(dir, 'node_modules', 'pkg', 'package.json'), '{"name":"pkg"}'); - expect(fs.realpathSync(resolveFrom('pkg/package.json', dir))).toBe( - fs.realpathSync(path.join(dir, 'node_modules', 'pkg', 'package.json')), + expect(fs.realpathSync.native(resolveFrom('pkg/package.json', dir))).toBe( + fs.realpathSync.native(path.join(dir, 'node_modules', 'pkg', 'package.json')), ); expect(resolveFrom('no-such-package-for-bugsee-tests/package.json', dir)).toBeNull(); }); From 670c69630f071f14df7a842b0feba70442ba677c Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 13:32:19 +0500 Subject: [PATCH 07/12] campaign: the Windows guard step exits 0 once the expected failure is seen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pwsh ended the step with Gradle's last exit code, the very failure the step expects; run 37593316440 printed 'guard: failed with the fix, before hermesc' and still went red. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/campaign-windows-hermes.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/campaign-windows-hermes.yml b/.github/workflows/campaign-windows-hermes.yml index 7c66c374..acad92f2 100644 --- a/.github/workflows/campaign-windows-hermes.yml +++ b/.github/workflows/campaign-windows-hermes.yml @@ -151,6 +151,8 @@ jobs: if (-not (Select-String -Path "$env:RUNNER_TEMP/guard.log" -SimpleMatch "a shell script, but on Windows" -Quiet)) { Write-Error "FAIL: no Bugsee guard message"; exit 1 } if (Select-String -Path "$env:RUNNER_TEMP/guard.log" -SimpleMatch "NoSuchFileException" -Quiet) { Write-Error "FAIL: hermesc ran before the guard"; exit 1 } Write-Output "guard: failed with the fix, before hermesc" + # pwsh would otherwise exit with Gradle's (expected) non-zero code. + exit 0 # The same on the Expo example: the config plugin writes hermesCommand, the # per-OS launcher, during `expo prebuild` on this Windows runner. From edd126f575fac5c37fcf178c179c143c01e4f4b8 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 14:22:34 +0500 Subject: [PATCH 08/12] campaign: Windows bare release from a path with spaces and parentheses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same release build, debug-id and stub-upload checks as the bare job, from a checkout under 'my projects (x86)/bugsee rn': React Native runs hermesCommand through cmd /c, whose quote handling changes when the command path holds spaces or ( ). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/campaign-windows-hermes.yml | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/.github/workflows/campaign-windows-hermes.yml b/.github/workflows/campaign-windows-hermes.yml index acad92f2..fa98db10 100644 --- a/.github/workflows/campaign-windows-hermes.yml +++ b/.github/workflows/campaign-windows-hermes.yml @@ -254,3 +254,102 @@ jobs: ${{ runner.temp }}/gradle.log ${{ runner.temp }}/stub.log if-no-files-found: warn + + # The bare release again, from a checkout whose path holds spaces and + # parentheses, as C:\Users\First Last\... or "Program Files (x86)" do: + # React Native runs hermesCommand through `cmd /c`, whose quote handling + # changes when the command path has spaces or ( ). + android-release-spaced-path: + name: android release, path with spaces (windows-latest) + runs-on: windows-latest + timeout-minutes: 75 + env: + APP_ROOT: 'my projects (x86)/bugsee rn' + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + with: + path: 'my projects (x86)/bugsee rn' + - uses: actions/setup-node@v4 + with: + node-version: '22.18' + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + - run: corepack enable + - run: yarn install --immutable + working-directory: 'my projects (x86)/bugsee rn' + + - name: Credentials (synthetic token, stub endpoint, no NDK upload) + working-directory: 'my projects (x86)/bugsee rn' + run: | + pwd + yarn workspace bugsee-example-bare credentials + sed -i '/^plugin.ndk.enabled/d' examples/bare/android/bugsee.properties + + - name: Release build (Hermes) against the stub symbol API + shell: pwsh + run: | + New-Item -ItemType File -Force "$env:RUNNER_TEMP/stub.log" | Out-Null + $stub = Start-Process node -PassThru -NoNewWindow -ArgumentList @( + "`"$env:APP_ROOT/packages/react-native/scripts/__tests__/fixtures/symbol-stub-server.js`"", + '--port', '8777', '--log', "$env:RUNNER_TEMP/stub.log") + Start-Sleep -Seconds 2 + Push-Location "$env:APP_ROOT/examples/bare/android" + Write-Output "building in $((Get-Location).Path)" + ./gradlew.bat :app:assembleRelease -PreactNativeArchitectures=arm64-v8a -PbugseeE2eDebuggable=true --stacktrace *> "$env:RUNNER_TEMP/gradle.log" + $code = $LASTEXITCODE + Pop-Location + Stop-Process -Id $stub.Id -ErrorAction SilentlyContinue + Get-Content "$env:RUNNER_TEMP/gradle.log" + exit $code + + - name: Composed map carries a debug id; the bytecode carries the same one + working-directory: 'my projects (x86)/bugsee rn/examples/bare/android/app/build' + run: | + map="$(find generated/sourcemaps -name 'index.android.bundle.map' | head -1)" + echo "composed map: $map" + node -e ' + const m = JSON.parse(require("fs").readFileSync(process.argv[1], "utf8")); + const id = m.debugId || m.debug_id; + if (!id) { console.error("FAIL: no debugId in the composed map"); process.exit(1); } + console.log("debugId " + id); + require("fs").writeFileSync(process.env.RUNNER_TEMP + "/debug-id", id); + ' "$map" + apk=outputs/apk/release/app-release.apk + unzip -o -q "$apk" assets/index.android.bundle -d "$RUNNER_TEMP/apk" + id="$(cat "$RUNNER_TEMP/debug-id")" + if grep -a -q "$id" "$RUNNER_TEMP/apk/assets/index.android.bundle"; then + echo "bytecode carries $id" + else + echo "FAIL: the packaged bytecode does not carry $id"; exit 1 + fi + + - name: The composed map reached the stub, with that debug id + if: always() + run: | + echo "--- stub requests"; cat "$RUNNER_TEMP/stub.log" + echo "--- hook lines"; grep -i "bugsee" "$RUNNER_TEMP/gradle.log" | head -40 || true + node -e ' + const fs = require("fs"); + const want = fs.existsSync(process.argv[2]) ? fs.readFileSync(process.argv[2], "utf8").trim() : ""; + if (!want) { console.error("FAIL: no composed-map debug id to look for"); process.exit(1); } + const puts = fs.readFileSync(process.argv[1], "utf8").split("\n").filter(Boolean) + .map((l) => JSON.parse(l)).filter((e) => e.method === "PUT"); + const hit = puts.some((e) => (e.entries || []).some((x) => x.debugId === want)); + if (!hit) { console.error("FAIL: no PUT carried a map with debug_id " + want); process.exit(1); } + console.log("stub received the map with debug_id " + want); + ' "$RUNNER_TEMP/stub.log" "$RUNNER_TEMP/debug-id" + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: campaign-windows-hermes-spaced + path: | + my projects (x86)/bugsee rn/examples/bare/android/app/build/outputs/apk/release/app-release.apk + ${{ runner.temp }}/gradle.log + ${{ runner.temp }}/stub.log + if-no-files-found: warn From c258fb327c5c8485fd1f01ea426df8f436512032 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 14:34:45 +0500 Subject: [PATCH 09/12] campaign: the spaced-path job builds from a short root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Under the workspace, 'my projects (x86)/bugsee rn' pushed the New Architecture codegen objects past Windows' 260-character limit, and CMake failed before any JavaScript step. That is React Native's path-length limit, not the spaces; the job now copies the checkout to 'C:/s (x86)/b rn'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/campaign-windows-hermes.yml | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/campaign-windows-hermes.yml b/.github/workflows/campaign-windows-hermes.yml index fa98db10..32284a72 100644 --- a/.github/workflows/campaign-windows-hermes.yml +++ b/.github/workflows/campaign-windows-hermes.yml @@ -255,23 +255,30 @@ jobs: ${{ runner.temp }}/stub.log if-no-files-found: warn - # The bare release again, from a checkout whose path holds spaces and - # parentheses, as C:\Users\First Last\... or "Program Files (x86)" do: - # React Native runs hermesCommand through `cmd /c`, whose quote handling - # changes when the command path has spaces or ( ). + # The bare release again, from a copy of the checkout whose path holds + # spaces and parentheses, as C:\Users\First Last\... or "Program Files + # (x86)" do: React Native runs hermesCommand through `cmd /c`, whose quote + # handling changes when the command path has spaces or ( ). The copy sits + # at a short root: under the workspace the New Architecture codegen objects + # pass Windows' 260-character path limit and CMake fails before any + # JavaScript step (run 37600186416, ninja mkdir "No such file or + # directory"), a React Native limit that has nothing to do with spaces. android-release-spaced-path: name: android release, path with spaces (windows-latest) runs-on: windows-latest timeout-minutes: 75 env: - APP_ROOT: 'my projects (x86)/bugsee rn' + APP_ROOT: 'C:/s (x86)/b rn' defaults: run: shell: bash steps: - uses: actions/checkout@v4 - with: - path: 'my projects (x86)/bugsee rn' + - name: Copy the checkout to a path with spaces and parentheses + run: | + mkdir -p "$APP_ROOT" + cp -a . "$APP_ROOT/" + ls "$APP_ROOT" - uses: actions/setup-node@v4 with: node-version: '22.18' @@ -281,10 +288,10 @@ jobs: java-version: 17 - run: corepack enable - run: yarn install --immutable - working-directory: 'my projects (x86)/bugsee rn' + working-directory: 'C:/s (x86)/b rn' - name: Credentials (synthetic token, stub endpoint, no NDK upload) - working-directory: 'my projects (x86)/bugsee rn' + working-directory: 'C:/s (x86)/b rn' run: | pwd yarn workspace bugsee-example-bare credentials @@ -308,7 +315,7 @@ jobs: exit $code - name: Composed map carries a debug id; the bytecode carries the same one - working-directory: 'my projects (x86)/bugsee rn/examples/bare/android/app/build' + working-directory: 'C:/s (x86)/b rn/examples/bare/android/app/build' run: | map="$(find generated/sourcemaps -name 'index.android.bundle.map' | head -1)" echo "composed map: $map" @@ -349,7 +356,7 @@ jobs: with: name: campaign-windows-hermes-spaced path: | - my projects (x86)/bugsee rn/examples/bare/android/app/build/outputs/apk/release/app-release.apk + C:/s (x86)/b rn/examples/bare/android/app/build/outputs/apk/release/app-release.apk ${{ runner.temp }}/gradle.log ${{ runner.temp }}/stub.log if-no-files-found: warn From d5842db2a515af64c192c23c5bd6cb11f6749d10 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 14:45:32 +0500 Subject: [PATCH 10/12] Android: Windows hermesCommand survives a project path with spaces and ( ) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new windows-latest job from 'C:/s (x86)/b rn' (run 37601601358) failed in createBundleReleaseJsAndAssets with "'C:\s' is not recognized": React Native runs hermesCommand through cmd /c, and cmd strips the quotes around a command path that holds spaces together with ( ) & ^ @ < > |, then runs it cut at the first space. React Native passes its own paths relative to the project root and runs hermesc from there; on Windows the hook now does the same for hermesCommand when its absolute path would be cut (another drive, or a relative path that would be cut too, keeps it as written). README says so. The spaced-path job also splits its artifact, since upload-artifact needs one root. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/campaign-windows-hermes.yml | 9 +++++- packages/react-native/README.md | 12 +++++-- .../scripts/bugsee-sourcemaps.gradle | 31 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/.github/workflows/campaign-windows-hermes.yml b/.github/workflows/campaign-windows-hermes.yml index 32284a72..bdde72ce 100644 --- a/.github/workflows/campaign-windows-hermes.yml +++ b/.github/workflows/campaign-windows-hermes.yml @@ -355,8 +355,15 @@ jobs: if: always() with: name: campaign-windows-hermes-spaced + path: C:/s (x86)/b rn/examples/bare/android/app/build/outputs/apk/release/app-release.apk + if-no-files-found: warn + + # A second artifact: upload-artifact needs one root, and the logs are on D:. + - uses: actions/upload-artifact@v4 + if: always() + with: + name: campaign-windows-hermes-spaced-logs path: | - C:/s (x86)/b rn/examples/bare/android/app/build/outputs/apk/release/app-release.apk ${{ runner.temp }}/gradle.log ${{ runner.temp }}/stub.log if-no-files-found: warn diff --git a/packages/react-native/README.md b/packages/react-native/README.md index ad41b747..0733c8bc 100644 --- a/packages/react-native/README.md +++ b/packages/react-native/README.md @@ -160,9 +160,15 @@ bundle and Metro's map get the id instead. that an earlier prebuild wrote (the `.sh` on every OS) is recognised by its exact text and moved to the per-OS one; a `hermesCommand` of your own that already names `hermesc-preserve-js` is left as it is. -- **Limitations.** Windows builds are verified from a project path without - spaces. The hook has not yet been verified with Gradle's configuration - cache. +- **Windows paths with spaces.** React Native runs `hermesCommand` through + `cmd /c`, which cuts an absolute path holding spaces and `(` `)` at the + first space. On Windows the hook gives the launcher to React Native + relative to the project root instead, as React Native gives its own + paths; verified from `C:\s (x86)\b rn`. A project whose path is long + can still pass Windows' 260-character limit in React Native's own native + build, which has nothing to do with Bugsee. +- **Limitations.** The hook has not yet been verified with Gradle's + configuration cache. ## Licence diff --git a/packages/react-native/scripts/bugsee-sourcemaps.gradle b/packages/react-native/scripts/bugsee-sourcemaps.gradle index 86abb5ce..fd97caf7 100644 --- a/packages/react-native/scripts/bugsee-sourcemaps.gradle +++ b/packages/react-native/scripts/bugsee-sourcemaps.gradle @@ -83,6 +83,37 @@ def bugseeShellOnWindows = { String taskName, String command -> "writes it). See node_modules/@bugsee/react-native/README.md, \"Android source maps\"." } +// React Native runs hermesCommand through `cmd /c` on Windows. cmd keeps the +// quotes around a command path with spaces only when nothing in it is one of +// & < > ( ) @ ^ |; otherwise it strips them and runs the path cut at the first +// space ("C:\Program Files (x86)\..." becomes "C:\Program"). React Native +// passes its own paths relative to the project root for that reason, and runs +// hermesc from there, so the launcher is given the same way when its absolute +// path would be cut. Another drive, or a relative path that would be cut too, +// keeps the command as written. +def bugseeCmdUnsafe = ~/[\s&<>()@^|]/ +def bugseeCmdSafeCommand = { String command, File root -> + def file = new File(command) + if (!(command =~ bugseeCmdUnsafe) || !file.isAbsolute()) { + return command + } + try { + def relative = root.toPath().toAbsolutePath().normalize() + .relativize(file.toPath().toAbsolutePath().normalize()).toString() + return (relative =~ bugseeCmdUnsafe) ? command : relative + } catch (IllegalArgumentException ignored) { + return command + } +} +def bugseeReact = project.extensions.findByName("react") +if (System.getProperty("os.name").startsWith("Windows") && bugseeReact != null && bugseeReact.hermesCommand.isPresent()) { + def written = bugseeReact.hermesCommand.get() + def safe = bugseeCmdSafeCommand(written, bugseeReact.root.get().asFile) + if (safe != written) { + bugseeReact.hermesCommand.set(safe) + } +} + tasks.matching { task -> task.name.startsWith("createBundle") && task.name.endsWith("JsAndAssets") }.configureEach { bundleTask -> From c34cebae26cf9145c1411a6b794f31db0eb5bee5 Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 14:59:57 +0500 Subject: [PATCH 11/12] Android: the Windows relative hermesCommand may hold @ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Run 37602820088 still ran the absolute launcher: the relative form, node_modules\@bugsee\..., was rejected for its @. That character only matters inside cmd's quote rule; an unquoted relative path is cut only by a space or an operator (& < > ^ |), which is now the whole check. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../scripts/bugsee-sourcemaps.gradle | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/react-native/scripts/bugsee-sourcemaps.gradle b/packages/react-native/scripts/bugsee-sourcemaps.gradle index fd97caf7..9376c8c6 100644 --- a/packages/react-native/scripts/bugsee-sourcemaps.gradle +++ b/packages/react-native/scripts/bugsee-sourcemaps.gradle @@ -83,15 +83,17 @@ def bugseeShellOnWindows = { String taskName, String command -> "writes it). See node_modules/@bugsee/react-native/README.md, \"Android source maps\"." } -// React Native runs hermesCommand through `cmd /c` on Windows. cmd keeps the -// quotes around a command path with spaces only when nothing in it is one of -// & < > ( ) @ ^ |; otherwise it strips them and runs the path cut at the first -// space ("C:\Program Files (x86)\..." becomes "C:\Program"). React Native -// passes its own paths relative to the project root for that reason, and runs -// hermesc from there, so the launcher is given the same way when its absolute -// path would be cut. Another drive, or a relative path that would be cut too, -// keeps the command as written. -def bugseeCmdUnsafe = ~/[\s&<>()@^|]/ +// React Native runs hermesCommand through `cmd /c` on Windows. Java quotes a +// path that holds a space, and cmd keeps those quotes only when nothing in +// the path is one of & < > ( ) @ ^ |; otherwise it strips them and runs the +// path cut at the first space ("C:\Program Files (x86)\..." becomes +// "C:\Program"). React Native passes its own paths relative to the project +// root for that reason, and runs hermesc from there, so the launcher is given +// the same way when its absolute path holds a space or a cmd operator. The +// relative path goes unquoted, so only a space or an operator in it matters +// (node_modules\@bugsee is fine). Another drive, or a relative path with a +// space or an operator in it, keeps the command as written. +def bugseeCmdUnsafe = ~/[\s&<>^|]/ def bugseeCmdSafeCommand = { String command, File root -> def file = new File(command) if (!(command =~ bugseeCmdUnsafe) || !file.isAbsolute()) { From 420f41a283c4f56c07cc594be99066289dc179ee Mon Sep 17 00:00:00 2001 From: Alexey Karimov Date: Wed, 7 Oct 2026 15:16:38 +0500 Subject: [PATCH 12/12] Android: Windows hermesCommand rewrite also covers ( ) without a space MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cursor review (PR 65): c34ceba dropped ( ) from the check, so an absolute launcher path like C:\Users\John(US)\... (no space, so Java does not quote it) was kept, and cmd groups at the bracket. Two checks now: an absolute path holding a space or ( ) & < > @ ^ | is given relative to the project root, and that relative path is used unless it holds a space or ( ) & < > ^ | (@ is fine unquoted). The helper is kept on the project, and the real-Gradle hook test runs it on eight paths: the campaign's spaced path with @, John(US), plain, an operator, another tree, and an already relative path. README names both shapes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- packages/react-native/README.md | 11 +++-- .../__tests__/sourcemaps-gradle.test.js | 46 +++++++++++++++++++ .../scripts/bugsee-sourcemaps.gradle | 27 ++++++----- 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/packages/react-native/README.md b/packages/react-native/README.md index 0733c8bc..355e5dfa 100644 --- a/packages/react-native/README.md +++ b/packages/react-native/README.md @@ -160,11 +160,12 @@ bundle and Metro's map get the id instead. that an earlier prebuild wrote (the `.sh` on every OS) is recognised by its exact text and moved to the per-OS one; a `hermesCommand` of your own that already names `hermesc-preserve-js` is left as it is. -- **Windows paths with spaces.** React Native runs `hermesCommand` through - `cmd /c`, which cuts an absolute path holding spaces and `(` `)` at the - first space. On Windows the hook gives the launcher to React Native - relative to the project root instead, as React Native gives its own - paths; verified from `C:\s (x86)\b rn`. A project whose path is long +- **Windows paths with spaces or brackets.** React Native runs + `hermesCommand` through `cmd /c`, which cuts an absolute path holding a + space together with `(` `)` (`C:\Program Files (x86)\…`), or `(` `)` alone + (`C:\Users\John(US)\…`). On Windows the hook gives the launcher to React + Native relative to the project root instead, as React Native gives its own + paths; the build is verified from `C:\s (x86)\b rn`. A project whose path is long can still pass Windows' 260-character limit in React Native's own native build, which has nothing to do with Bugsee. - **Limitations.** The hook has not yet been verified with Gradle's diff --git a/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js b/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js index f7d27fde..882cffa6 100644 --- a/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js +++ b/packages/react-native/scripts/__tests__/sourcemaps-gradle.test.js @@ -101,6 +101,24 @@ bundle('StagingRelease', false) bundle('customRelease', false, 'custom/js') bundle('internalRelease', false) bundle('shellRelease', true, null, '/opt/bugsee/scripts/hermesc-preserve-js.SH') + +// The Windows hermesCommand rewrite, on this host's paths: [command, root]. +def cmdCases = [ + ['/s (x86)/b rn/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', '/s (x86)/b rn'], + ['/Users/John(US)/app/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', '/Users/John(US)/app'], + ['/plain/app/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', '/plain/app'], + ['/plain/app/tools/hermesc-preserve-js.cmd', '/plain/app'], + ['/p&q/app/x.cmd', '/p&q/app'], + ['/a b/x.cmd', '/c d/app'], + ['/a(b)/x.cmd', '/c/app'], + ['node_modules/x (1).cmd', '/app'], +] +tasks.register('bugseeCmdCases') { + def safe = project.extensions.extraProperties.get('bugseeCmdSafeCommand') + doLast { + cmdCases.each { c -> println "BUGSEE-CMD|\${c[0]}|\${safe(c[0], new File(c[1]))}" } + } +} `; // Records argv, then does what finish would to the files it was given. @@ -175,6 +193,7 @@ function argOf(argv, name) { 'createBundleCustomReleaseJsAndAssets', 'createBundleInternalReleaseJsAndAssets', 'createBundleShellReleaseJsAndAssets', + 'bugseeCmdCases', ], { encoding: 'utf8', timeout: 10 * 60 * 1000 }, ); @@ -269,6 +288,33 @@ function argOf(argv, name) { expect(`${result.stdout}${result.stderr}`).not.toContain('a shell script, but on Windows'); }); + it('gives the Windows launcher relative to the root when cmd would cut its absolute path', () => { + const got = Object.fromEntries( + `${result.stdout}` + .split('\n') + .filter((line) => line.startsWith('BUGSEE-CMD|')) + .map((line) => line.split('|').slice(1)), + ); + expect(got).toEqual({ + // The campaign job's path: a space and ( ); @ is fine unquoted. + '/s (x86)/b rn/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd': + 'node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', + // ( ) and no space: unquoted, cmd would still cut it at the bracket. + '/Users/John(US)/app/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd': + 'node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', + '/plain/app/node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd': + 'node_modules/@bugsee/react-native/scripts/hermesc-preserve-js.cmd', + // Nothing cmd would cut: as written. + '/plain/app/tools/hermesc-preserve-js.cmd': '/plain/app/tools/hermesc-preserve-js.cmd', + '/p&q/app/x.cmd': 'x.cmd', + // The relative path would be cut too (a space, or ( )): as written. + '/a b/x.cmd': '/a b/x.cmd', + '/a(b)/x.cmd': '/a(b)/x.cmd', + // Already relative: as written. + 'node_modules/x (1).cmd': 'node_modules/x (1).cmd', + }); + }); + it('finishes a Hermes-off bundle outside generated/assets', () => { const custom = callFor('custom/js'); expect(argOf(custom, '--bundle')).toBe(path.join(dir, 'build/custom/js/index.android.bundle')); diff --git a/packages/react-native/scripts/bugsee-sourcemaps.gradle b/packages/react-native/scripts/bugsee-sourcemaps.gradle index 9376c8c6..c6306212 100644 --- a/packages/react-native/scripts/bugsee-sourcemaps.gradle +++ b/packages/react-native/scripts/bugsee-sourcemaps.gradle @@ -83,17 +83,19 @@ def bugseeShellOnWindows = { String taskName, String command -> "writes it). See node_modules/@bugsee/react-native/README.md, \"Android source maps\"." } -// React Native runs hermesCommand through `cmd /c` on Windows. Java quotes a -// path that holds a space, and cmd keeps those quotes only when nothing in -// the path is one of & < > ( ) @ ^ |; otherwise it strips them and runs the -// path cut at the first space ("C:\Program Files (x86)\..." becomes -// "C:\Program"). React Native passes its own paths relative to the project -// root for that reason, and runs hermesc from there, so the launcher is given -// the same way when its absolute path holds a space or a cmd operator. The -// relative path goes unquoted, so only a space or an operator in it matters -// (node_modules\@bugsee is fine). Another drive, or a relative path with a -// space or an operator in it, keeps the command as written. -def bugseeCmdUnsafe = ~/[\s&<>^|]/ +// React Native runs hermesCommand through `cmd /c` on Windows, and cmd cuts a +// launcher path that holds a space or one of ( ) & < > ^ |. Quoted (Java +// quotes a path with a space), cmd strips the quotes unless the path is free +// of ( ) & < > @ ^ |, so "C:\Program Files (x86)\..." runs as "C:\Program". +// Unquoted (no space), ( ) still group: C:\Users\John(US)\... runs as +// "C:\Users\John". React Native passes its own paths relative to the project +// root and runs hermesc from there, so on Windows the launcher is given the +// same way whenever its absolute path holds any of those characters. The +// relative path goes unquoted, so @ in it is fine (node_modules\@bugsee). +// Another drive, or a relative path that holds a space or ( ) & < > ^ | too, +// keeps the command as written. Kept on the project for the hook's tests. +def bugseeCmdUnsafe = ~/[\s()&<>^|@]/ +def bugseeCmdUnsafeUnquoted = ~/[\s()&<>^|]/ def bugseeCmdSafeCommand = { String command, File root -> def file = new File(command) if (!(command =~ bugseeCmdUnsafe) || !file.isAbsolute()) { @@ -102,11 +104,12 @@ def bugseeCmdSafeCommand = { String command, File root -> try { def relative = root.toPath().toAbsolutePath().normalize() .relativize(file.toPath().toAbsolutePath().normalize()).toString() - return (relative =~ bugseeCmdUnsafe) ? command : relative + return (relative =~ bugseeCmdUnsafeUnquoted) ? command : relative } catch (IllegalArgumentException ignored) { return command } } +project.extensions.extraProperties.set("bugseeCmdSafeCommand", bugseeCmdSafeCommand) def bugseeReact = project.extensions.findByName("react") if (System.getProperty("os.name").startsWith("Windows") && bugseeReact != null && bugseeReact.hermesCommand.isPresent()) { def written = bugseeReact.hermesCommand.get()