From b427de370f18a1671d0cb2b21360f3a4b698a056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Tue, 3 Feb 2026 21:54:28 +0100 Subject: [PATCH 01/12] Add run-harness script that chooses the correct packager runner --- packages/github-action/src/android/action.yml | 7 +++- packages/github-action/src/ios/action.yml | 7 +++- .../github-action/src/shared/run-harness.ts | 34 +++++++++++++++++++ packages/github-action/src/web/action.yml | 7 +++- packages/github-action/tsup.config.mts | 7 ++-- 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 packages/github-action/src/shared/run-harness.ts diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index 5c4e5a4b..e55bdd5c 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -8,6 +8,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -116,7 +121,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index 706d573a..0d3b8197 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -8,6 +8,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -44,7 +49,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/shared/run-harness.ts b/packages/github-action/src/shared/run-harness.ts new file mode 100644 index 00000000..6f922edb --- /dev/null +++ b/packages/github-action/src/shared/run-harness.ts @@ -0,0 +1,34 @@ +import { spawn } from 'node:child_process'; + +const [packager, runner] = process.argv.slice(2); + +if (!runner) { + console.error('Runner input is required'); + process.exit(1); +} + +const commands: Record = { + pnpm: ['pnpm', ['react-native-harness', '--harnessRunner', runner]], + npm: ['npx', ['react-native-harness', '--harnessRunner', runner]], + yarn: ['yarn', ['react-native-harness', '--harnessRunner', runner]], + bun: ['bunx', ['react-native-harness', '--harnessRunner', runner]], + deno: [ + 'deno', + ['run', '-A', 'npm:react-native-harness', '--harnessRunner', runner], + ], +}; + +const key = packager || 'pnpm'; +const entry = commands[key]; + +if (!entry) { + console.error(`Unsupported packager: ${packager}`); + console.error('Supported packagers: pnpm, npm, yarn, bun, deno'); + process.exit(1); +} + +const [cmd, args] = entry; +const child = spawn(cmd, args, { stdio: 'inherit' }); + +child.on('close', (code) => process.exit(code ?? 1)); +child.on('error', () => process.exit(1)); diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index 5cd40061..9cdb3604 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -5,6 +5,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -32,7 +37,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/tsup.config.mts b/packages/github-action/tsup.config.mts index 8d15b463..a42e30e0 100644 --- a/packages/github-action/tsup.config.mts +++ b/packages/github-action/tsup.config.mts @@ -6,15 +6,16 @@ const OUT_DIR = path.resolve('../../actions'); const TARGETS = ['ios', 'android', 'web']; const packageJson = JSON.parse( - fs.readFileSync(path.resolve('./package.json'), 'utf8') + fs.readFileSync(path.resolve('./package.json'), 'utf8'), ); export default defineConfig({ entry: { ...Object.fromEntries( - TARGETS.map((target) => [`${target}/index`, `src/${target}/index.ts`]) + TARGETS.map((target) => [`${target}/index`, `src/${target}/index.ts`]), ), 'shared/index': 'src/shared/index.ts', + 'shared/run-harness': 'src/shared/run-harness.ts', }, outDir: OUT_DIR, format: 'cjs', @@ -28,7 +29,7 @@ export default defineConfig({ TARGETS.forEach((target) => { fs.copyFileSync( path.resolve(`./src/${target}/action.yml`), - path.resolve(OUT_DIR, `./${target}/action.yml`) + path.resolve(OUT_DIR, `./${target}/action.yml`), ); }); }, From 06549313a8da5086a16f5447e1583b0c6f8a1e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Tue, 3 Feb 2026 21:54:42 +0100 Subject: [PATCH 02/12] Document packager input option --- packages/github-action/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/github-action/README.md b/packages/github-action/README.md index bc34b692..e44fa5e6 100644 --- a/packages/github-action/README.md +++ b/packages/github-action/README.md @@ -26,6 +26,7 @@ Runs React Native Harness tests on Android emulators. This action handles: - `app` (required): Path to your built Android app (`.apk` file) - `runner` (required): The runner name from your configuration +- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun`, or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to repository root) **Requirements:** @@ -43,6 +44,7 @@ Runs React Native Harness tests on Android emulators. This action handles: with: app: './android/app/build/outputs/apk/debug/app-debug.apk' runner: 'android' + packager: 'pnpm' projectRoot: './apps/my-app' ``` @@ -59,6 +61,7 @@ Runs React Native Harness tests on iOS simulators. This action handles: - `app` (required): Path to your built iOS app (`.app` bundle) - `runner` (required): The runner name from your configuration +- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun` or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to repository root) **Requirements:** @@ -74,6 +77,7 @@ Runs React Native Harness tests on iOS simulators. This action handles: with: app: './ios/build/Build/Products/Debug-iphonesimulator/MyApp.app' runner: 'ios' + packager: 'pnpm' projectRoot: './apps/my-app' ``` From 5081a783b01c6ea5cb0bf787274c37da956896eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Tue, 3 Feb 2026 21:55:19 +0100 Subject: [PATCH 03/12] Run build --- actions/android/action.yml | 7 ++++++- actions/ios/action.yml | 7 ++++++- actions/shared/run-harness.cjs | 30 ++++++++++++++++++++++++++++++ actions/web/action.yml | 7 ++++++- 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 actions/shared/run-harness.cjs diff --git a/actions/android/action.yml b/actions/android/action.yml index 5c4e5a4b..e55bdd5c 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -8,6 +8,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -116,7 +121,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/ios/action.yml b/actions/ios/action.yml index 706d573a..0d3b8197 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -8,6 +8,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -44,7 +49,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/shared/run-harness.cjs b/actions/shared/run-harness.cjs new file mode 100644 index 00000000..aae18f23 --- /dev/null +++ b/actions/shared/run-harness.cjs @@ -0,0 +1,30 @@ +"use strict"; + +// src/shared/run-harness.ts +var import_node_child_process = require("child_process"); +var [packager, runner] = process.argv.slice(2); +if (!runner) { + console.error("Runner input is required"); + process.exit(1); +} +var commands = { + pnpm: ["pnpm", ["react-native-harness", "--harnessRunner", runner]], + npm: ["npx", ["react-native-harness", "--harnessRunner", runner]], + yarn: ["yarn", ["react-native-harness", "--harnessRunner", runner]], + bun: ["bunx", ["react-native-harness", "--harnessRunner", runner]], + deno: [ + "deno", + ["run", "-A", "npm:react-native-harness", "--harnessRunner", runner] + ] +}; +var key = packager || "pnpm"; +var entry = commands[key]; +if (!entry) { + console.error(`Unsupported packager: ${packager}`); + console.error("Supported packagers: pnpm, npm, yarn, bun, deno"); + process.exit(1); +} +var [cmd, args] = entry; +var child = (0, import_node_child_process.spawn)(cmd, args, { stdio: "inherit" }); +child.on("close", (code) => process.exit(code ?? 1)); +child.on("error", () => process.exit(1)); diff --git a/actions/web/action.yml b/actions/web/action.yml index 5cd40061..9cdb3604 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -5,6 +5,11 @@ inputs: description: The runner to use required: true type: string + packager: + description: The package manager to use (pnpm, npm, yarn, bun, deno) + required: false + type: string + default: 'pnpm' projectRoot: description: The project root directory required: false @@ -32,7 +37,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - pnpm react-native-harness --harnessRunner ${{ inputs.runner }} + node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 From 82b0274fc9020222657c393b99359ffa39d34012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Tue, 3 Feb 2026 22:15:16 +0100 Subject: [PATCH 04/12] Update CI/CD docs as well --- website/src/docs/guides/ci-cd.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/docs/guides/ci-cd.md b/website/src/docs/guides/ci-cd.md index 94a77134..5ffc0051 100644 --- a/website/src/docs/guides/ci-cd.md +++ b/website/src/docs/guides/ci-cd.md @@ -38,6 +38,7 @@ Both actions accept the following inputs: - `app` (required): Path to your built app (`.apk` for Android, `.app` for iOS) - `runner` (required): The runner name (e.g., `"android"` or `"ios"`) +- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun` or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to the repository root) ## GitHub Actions Example From 22a229fe8c068ec1971df84279352feca99b295d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Mon, 9 Feb 2026 08:42:57 +0100 Subject: [PATCH 05/12] Auto detect package manager based on lock file --- actions/android/action.yml | 5 --- actions/web/action.yml | 5 --- packages/github-action/README.md | 2 -- packages/github-action/src/android/action.yml | 26 ++++++++++---- packages/github-action/src/ios/action.yml | 27 +++++++++++---- .../github-action/src/shared/run-harness.ts | 34 ------------------- packages/github-action/src/web/action.yml | 26 ++++++++++---- website/src/docs/guides/ci-cd.md | 1 - 8 files changed, 60 insertions(+), 66 deletions(-) delete mode 100644 packages/github-action/src/shared/run-harness.ts diff --git a/actions/android/action.yml b/actions/android/action.yml index e55bdd5c..a056498d 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -8,11 +8,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false diff --git a/actions/web/action.yml b/actions/web/action.yml index 9cdb3604..ab172602 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -5,11 +5,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false diff --git a/packages/github-action/README.md b/packages/github-action/README.md index e44fa5e6..3a05ee8d 100644 --- a/packages/github-action/README.md +++ b/packages/github-action/README.md @@ -26,7 +26,6 @@ Runs React Native Harness tests on Android emulators. This action handles: - `app` (required): Path to your built Android app (`.apk` file) - `runner` (required): The runner name from your configuration -- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun`, or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to repository root) **Requirements:** @@ -61,7 +60,6 @@ Runs React Native Harness tests on iOS simulators. This action handles: - `app` (required): Path to your built iOS app (`.app` bundle) - `runner` (required): The runner name from your configuration -- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun` or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to repository root) **Requirements:** diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index e55bdd5c..f47905de 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -8,11 +8,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false @@ -107,6 +102,25 @@ runs: ~/.android/avd ~/.android/adb* key: ${{ steps.avd-key.outputs.key }} + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests id: run-tests uses: reactivecircus/android-emulator-runner@v2 @@ -121,7 +135,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index 0d3b8197..0b7b3099 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -8,11 +8,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false @@ -45,11 +40,29 @@ runs: working-directory: ${{ inputs.projectRoot }} run: | xcrun simctl install booted ${{ inputs.app }} + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: | - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/shared/run-harness.ts b/packages/github-action/src/shared/run-harness.ts deleted file mode 100644 index 6f922edb..00000000 --- a/packages/github-action/src/shared/run-harness.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { spawn } from 'node:child_process'; - -const [packager, runner] = process.argv.slice(2); - -if (!runner) { - console.error('Runner input is required'); - process.exit(1); -} - -const commands: Record = { - pnpm: ['pnpm', ['react-native-harness', '--harnessRunner', runner]], - npm: ['npx', ['react-native-harness', '--harnessRunner', runner]], - yarn: ['yarn', ['react-native-harness', '--harnessRunner', runner]], - bun: ['bunx', ['react-native-harness', '--harnessRunner', runner]], - deno: [ - 'deno', - ['run', '-A', 'npm:react-native-harness', '--harnessRunner', runner], - ], -}; - -const key = packager || 'pnpm'; -const entry = commands[key]; - -if (!entry) { - console.error(`Unsupported packager: ${packager}`); - console.error('Supported packagers: pnpm, npm, yarn, bun, deno'); - process.exit(1); -} - -const [cmd, args] = entry; -const child = spawn(cmd, args, { stdio: 'inherit' }); - -child.on('close', (code) => process.exit(code ?? 1)); -child.on('error', () => process.exit(1)); diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index 9cdb3604..f72d57bc 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -5,11 +5,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false @@ -33,11 +28,30 @@ runs: - name: Install Playwright Browsers shell: bash run: npx playwright install --with-deps chromium + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} run: | - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/website/src/docs/guides/ci-cd.md b/website/src/docs/guides/ci-cd.md index 5ffc0051..94a77134 100644 --- a/website/src/docs/guides/ci-cd.md +++ b/website/src/docs/guides/ci-cd.md @@ -38,7 +38,6 @@ Both actions accept the following inputs: - `app` (required): Path to your built app (`.apk` for Android, `.app` for iOS) - `runner` (required): The runner name (e.g., `"android"` or `"ios"`) -- `packager` (optional): Package manager to use (`pnpm`, `npm`, `yarn`, `bun` or `deno`. Defaults to `pnpm`) - `projectRoot` (optional): The project root directory (defaults to the repository root) ## GitHub Actions Example From fd9907f0f6f151fca1fb00b9019ae9b7768c98cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Mon, 9 Feb 2026 08:46:06 +0100 Subject: [PATCH 06/12] Build actions --- actions/android/action.yml | 21 +++++++++++++++++- actions/ios/action.yml | 27 +++++++++++++++++------ actions/shared/run-harness.cjs | 30 -------------------------- actions/web/action.yml | 21 +++++++++++++++++- packages/github-action/tsup.config.mts | 7 +++--- 5 files changed, 63 insertions(+), 43 deletions(-) delete mode 100644 actions/shared/run-harness.cjs diff --git a/actions/android/action.yml b/actions/android/action.yml index a056498d..f47905de 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -102,6 +102,25 @@ runs: ~/.android/avd ~/.android/adb* key: ${{ steps.avd-key.outputs.key }} + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests id: run-tests uses: reactivecircus/android-emulator-runner@v2 @@ -116,7 +135,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/ios/action.yml b/actions/ios/action.yml index 0d3b8197..0b7b3099 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -8,11 +8,6 @@ inputs: description: The runner to use required: true type: string - packager: - description: The package manager to use (pnpm, npm, yarn, bun, deno) - required: false - type: string - default: 'pnpm' projectRoot: description: The project root directory required: false @@ -45,11 +40,29 @@ runs: working-directory: ${{ inputs.projectRoot }} run: | xcrun simctl install booted ${{ inputs.app }} + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: | - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/shared/run-harness.cjs b/actions/shared/run-harness.cjs deleted file mode 100644 index aae18f23..00000000 --- a/actions/shared/run-harness.cjs +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -// src/shared/run-harness.ts -var import_node_child_process = require("child_process"); -var [packager, runner] = process.argv.slice(2); -if (!runner) { - console.error("Runner input is required"); - process.exit(1); -} -var commands = { - pnpm: ["pnpm", ["react-native-harness", "--harnessRunner", runner]], - npm: ["npx", ["react-native-harness", "--harnessRunner", runner]], - yarn: ["yarn", ["react-native-harness", "--harnessRunner", runner]], - bun: ["bunx", ["react-native-harness", "--harnessRunner", runner]], - deno: [ - "deno", - ["run", "-A", "npm:react-native-harness", "--harnessRunner", runner] - ] -}; -var key = packager || "pnpm"; -var entry = commands[key]; -if (!entry) { - console.error(`Unsupported packager: ${packager}`); - console.error("Supported packagers: pnpm, npm, yarn, bun, deno"); - process.exit(1); -} -var [cmd, args] = entry; -var child = (0, import_node_child_process.spawn)(cmd, args, { stdio: "inherit" }); -child.on("close", (code) => process.exit(code ?? 1)); -child.on("error", () => process.exit(1)); diff --git a/actions/web/action.yml b/actions/web/action.yml index ab172602..f72d57bc 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -28,11 +28,30 @@ runs: - name: Install Playwright Browsers shell: bash run: npx playwright install --with-deps chromium + - name: Detect Package Manager + id: detect-pm + run: | + if [ -f "pnpm-lock.yaml" ]; then + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "runner=pnpm exec" >> $GITHUB_OUTPUT + elif [ -f "yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + elif [ -f "bun.lockb" ]; then + echo "manager=bun" >> $GITHUB_OUTPUT + echo "runner=bunx" >> $GITHUB_OUTPUT + elif [ -f "deno.lock" ]; then + echo "manager=deno" >> $GITHUB_OUTPUT + echo "runner=dx" >> $GITHUB_OUTPUT + else + echo "manager=npm" >> $GITHUB_OUTPUT + echo "runner=npx" >> $GITHUB_OUTPUT + fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} run: | - node ${{ github.action_path }}/../shared/run-harness.cjs "${{ inputs.packager }}" "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/tsup.config.mts b/packages/github-action/tsup.config.mts index a42e30e0..8d15b463 100644 --- a/packages/github-action/tsup.config.mts +++ b/packages/github-action/tsup.config.mts @@ -6,16 +6,15 @@ const OUT_DIR = path.resolve('../../actions'); const TARGETS = ['ios', 'android', 'web']; const packageJson = JSON.parse( - fs.readFileSync(path.resolve('./package.json'), 'utf8'), + fs.readFileSync(path.resolve('./package.json'), 'utf8') ); export default defineConfig({ entry: { ...Object.fromEntries( - TARGETS.map((target) => [`${target}/index`, `src/${target}/index.ts`]), + TARGETS.map((target) => [`${target}/index`, `src/${target}/index.ts`]) ), 'shared/index': 'src/shared/index.ts', - 'shared/run-harness': 'src/shared/run-harness.ts', }, outDir: OUT_DIR, format: 'cjs', @@ -29,7 +28,7 @@ export default defineConfig({ TARGETS.forEach((target) => { fs.copyFileSync( path.resolve(`./src/${target}/action.yml`), - path.resolve(OUT_DIR, `./${target}/action.yml`), + path.resolve(OUT_DIR, `./${target}/action.yml`) ); }); }, From 2311798c8c7b9f584931ae7de8101b58b639da03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Mon, 9 Feb 2026 08:50:12 +0100 Subject: [PATCH 07/12] Remove old "inputs.runner" argument --- actions/android/action.yml | 2 +- actions/ios/action.yml | 2 +- actions/web/action.yml | 2 +- packages/github-action/src/android/action.yml | 2 +- packages/github-action/src/ios/action.yml | 2 +- packages/github-action/src/web/action.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/actions/android/action.yml b/actions/android/action.yml index f47905de..fef560b7 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -135,7 +135,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/ios/action.yml b/actions/ios/action.yml index 0b7b3099..9ac6b104 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -62,7 +62,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/web/action.yml b/actions/web/action.yml index f72d57bc..39acaa10 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -51,7 +51,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index f47905de..fef560b7 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -135,7 +135,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index 0b7b3099..9ac6b104 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -62,7 +62,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index f72d57bc..39acaa10 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -51,7 +51,7 @@ runs: shell: bash working-directory: ${{ inputs.projectRoot }} run: | - ${{ steps.detect-pm.outputs.runner }} react-native-harness "${{ inputs.runner }}" + ${{ steps.detect-pm.outputs.runner }} react-native-harness - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 From 86db681acf16802392108e73e21a6d89c50ee978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Mon, 9 Feb 2026 09:11:43 +0100 Subject: [PATCH 08/12] Remove packager option from example sin readme --- packages/github-action/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/github-action/README.md b/packages/github-action/README.md index 3a05ee8d..bc34b692 100644 --- a/packages/github-action/README.md +++ b/packages/github-action/README.md @@ -43,7 +43,6 @@ Runs React Native Harness tests on Android emulators. This action handles: with: app: './android/app/build/outputs/apk/debug/app-debug.apk' runner: 'android' - packager: 'pnpm' projectRoot: './apps/my-app' ``` @@ -75,7 +74,6 @@ Runs React Native Harness tests on iOS simulators. This action handles: with: app: './ios/build/Build/Products/Debug-iphonesimulator/MyApp.app' runner: 'ios' - packager: 'pnpm' projectRoot: './apps/my-app' ``` From 152bfb7b730fd7baa26272063bc7e30645919bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Tue, 10 Feb 2026 15:14:24 +0100 Subject: [PATCH 09/12] Detect Package Manager step needs shell --- actions/android/action.yml | 1 + actions/ios/action.yml | 1 + actions/web/action.yml | 1 + packages/github-action/src/android/action.yml | 1 + packages/github-action/src/ios/action.yml | 1 + packages/github-action/src/web/action.yml | 1 + 6 files changed, 6 insertions(+) diff --git a/actions/android/action.yml b/actions/android/action.yml index fef560b7..afe54e9f 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -104,6 +104,7 @@ runs: key: ${{ steps.avd-key.outputs.key }} - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT diff --git a/actions/ios/action.yml b/actions/ios/action.yml index 9ac6b104..484185ce 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -42,6 +42,7 @@ runs: xcrun simctl install booted ${{ inputs.app }} - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT diff --git a/actions/web/action.yml b/actions/web/action.yml index 39acaa10..5e9d1a50 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -30,6 +30,7 @@ runs: run: npx playwright install --with-deps chromium - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index fef560b7..afe54e9f 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -104,6 +104,7 @@ runs: key: ${{ steps.avd-key.outputs.key }} - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index 9ac6b104..484185ce 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -42,6 +42,7 @@ runs: xcrun simctl install booted ${{ inputs.app }} - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index 39acaa10..5e9d1a50 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -30,6 +30,7 @@ runs: run: npx playwright install --with-deps chromium - name: Detect Package Manager id: detect-pm + shell: bash run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT From ed0536192366482fd33dfe91a4c0c8bf3e641ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Wed, 11 Feb 2026 09:10:19 +0100 Subject: [PATCH 10/12] Set --harnessRunner --- packages/github-action/src/android/action.yml | 2 +- packages/github-action/src/ios/action.yml | 2 +- packages/github-action/src/web/action.yml | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index afe54e9f..76c2b815 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -136,7 +136,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness + ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index 484185ce..e99af804 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -63,7 +63,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index 5e9d1a50..85426469 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -51,8 +51,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: | - ${{ steps.detect-pm.outputs.runner }} react-native-harness + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 From 20e160b9ec8ac66f01e736e7cf85170b405f3671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Wed, 11 Feb 2026 09:49:17 +0100 Subject: [PATCH 11/12] Build actions again --- actions/android/action.yml | 2 +- actions/ios/action.yml | 2 +- actions/web/action.yml | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/actions/android/action.yml b/actions/android/action.yml index afe54e9f..76c2b815 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -136,7 +136,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness + ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/ios/action.yml b/actions/ios/action.yml index 484185ce..e99af804 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -63,7 +63,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/web/action.yml b/actions/web/action.yml index 5e9d1a50..85426469 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -51,8 +51,7 @@ runs: - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: | - ${{ steps.detect-pm.outputs.runner }} react-native-harness + run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 From 986db7fbe4685c130bcd8b1ba61cbad1db588653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfred=20Lieth=20=C3=85r=C3=B8e?= Date: Mon, 16 Feb 2026 09:20:29 +0100 Subject: [PATCH 12/12] Use old runner type for deno --- actions/android/action.yml | 12 ++++++------ actions/ios/action.yml | 12 ++++++------ actions/web/action.yml | 12 ++++++------ packages/github-action/src/android/action.yml | 12 ++++++------ packages/github-action/src/ios/action.yml | 12 ++++++------ packages/github-action/src/web/action.yml | 12 ++++++------ 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/actions/android/action.yml b/actions/android/action.yml index 76c2b815..8970d951 100644 --- a/actions/android/action.yml +++ b/actions/android/action.yml @@ -108,19 +108,19 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests id: run-tests @@ -136,7 +136,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/ios/action.yml b/actions/ios/action.yml index e99af804..6ac89d61 100644 --- a/actions/ios/action.yml +++ b/actions/ios/action.yml @@ -46,24 +46,24 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/actions/web/action.yml b/actions/web/action.yml index 85426469..bb18c85c 100644 --- a/actions/web/action.yml +++ b/actions/web/action.yml @@ -34,24 +34,24 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/android/action.yml b/packages/github-action/src/android/action.yml index 76c2b815..8970d951 100644 --- a/packages/github-action/src/android/action.yml +++ b/packages/github-action/src/android/action.yml @@ -108,19 +108,19 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests id: run-tests @@ -136,7 +136,7 @@ runs: script: | echo $(pwd) adb install -r ${{ inputs.app }} - ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/ios/action.yml b/packages/github-action/src/ios/action.yml index e99af804..6ac89d61 100644 --- a/packages/github-action/src/ios/action.yml +++ b/packages/github-action/src/ios/action.yml @@ -46,24 +46,24 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4 diff --git a/packages/github-action/src/web/action.yml b/packages/github-action/src/web/action.yml index 85426469..bb18c85c 100644 --- a/packages/github-action/src/web/action.yml +++ b/packages/github-action/src/web/action.yml @@ -34,24 +34,24 @@ runs: run: | if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT - echo "runner=pnpm exec" >> $GITHUB_OUTPUT + echo "runner=pnpm exec " >> $GITHUB_OUTPUT elif [ -f "yarn.lock" ]; then echo "manager=yarn" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT + echo "runner=yarn " >> $GITHUB_OUTPUT elif [ -f "bun.lockb" ]; then echo "manager=bun" >> $GITHUB_OUTPUT - echo "runner=bunx" >> $GITHUB_OUTPUT + echo "runner=bunx " >> $GITHUB_OUTPUT elif [ -f "deno.lock" ]; then echo "manager=deno" >> $GITHUB_OUTPUT - echo "runner=dx" >> $GITHUB_OUTPUT + echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT - echo "runner=npx" >> $GITHUB_OUTPUT + echo "runner=npx " >> $GITHUB_OUTPUT fi - name: Run E2E tests shell: bash working-directory: ${{ inputs.projectRoot }} - run: ${{ steps.detect-pm.outputs.runner }} react-native-harness --harnessRunner ${{ inputs.runner }} + run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} - name: Upload visual test artifacts if: always() && inputs.uploadVisualTestArtifacts == 'true' uses: actions/upload-artifact@v4