Skip to content

Commit 0238e69

Browse files
authored
feat: automatically detect packager in GitHub actions (#65)
This PR automatically detects the packager and package runner to use when running react-native-harness in GitHub Actions, based on the lock file available in the repo.
1 parent 1629fe9 commit 0238e69

6 files changed

Lines changed: 126 additions & 10 deletions

File tree

actions/android/action.yml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ runs:
102102
~/.android/avd
103103
~/.android/adb*
104104
key: ${{ steps.avd-key.outputs.key }}
105+
- name: Detect Package Manager
106+
id: detect-pm
107+
shell: bash
108+
run: |
109+
if [ -f "pnpm-lock.yaml" ]; then
110+
echo "manager=pnpm" >> $GITHUB_OUTPUT
111+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
112+
elif [ -f "yarn.lock" ]; then
113+
echo "manager=yarn" >> $GITHUB_OUTPUT
114+
echo "runner=yarn " >> $GITHUB_OUTPUT
115+
elif [ -f "bun.lockb" ]; then
116+
echo "manager=bun" >> $GITHUB_OUTPUT
117+
echo "runner=bunx " >> $GITHUB_OUTPUT
118+
elif [ -f "deno.lock" ]; then
119+
echo "manager=deno" >> $GITHUB_OUTPUT
120+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
121+
else
122+
echo "manager=npm" >> $GITHUB_OUTPUT
123+
echo "runner=npx " >> $GITHUB_OUTPUT
124+
fi
105125
- name: Run E2E tests
106126
id: run-tests
107127
uses: reactivecircus/android-emulator-runner@v2
@@ -116,7 +136,7 @@ runs:
116136
script: |
117137
echo $(pwd)
118138
adb install -r ${{ inputs.app }}
119-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
139+
${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
120140
- name: Upload visual test artifacts
121141
if: always() && inputs.uploadVisualTestArtifacts == 'true'
122142
uses: actions/upload-artifact@v4

actions/ios/action.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,30 @@ runs:
4040
working-directory: ${{ inputs.projectRoot }}
4141
run: |
4242
xcrun simctl install booted ${{ inputs.app }}
43+
- name: Detect Package Manager
44+
id: detect-pm
45+
shell: bash
46+
run: |
47+
if [ -f "pnpm-lock.yaml" ]; then
48+
echo "manager=pnpm" >> $GITHUB_OUTPUT
49+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
50+
elif [ -f "yarn.lock" ]; then
51+
echo "manager=yarn" >> $GITHUB_OUTPUT
52+
echo "runner=yarn " >> $GITHUB_OUTPUT
53+
elif [ -f "bun.lockb" ]; then
54+
echo "manager=bun" >> $GITHUB_OUTPUT
55+
echo "runner=bunx " >> $GITHUB_OUTPUT
56+
elif [ -f "deno.lock" ]; then
57+
echo "manager=deno" >> $GITHUB_OUTPUT
58+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
59+
else
60+
echo "manager=npm" >> $GITHUB_OUTPUT
61+
echo "runner=npx " >> $GITHUB_OUTPUT
62+
fi
4363
- name: Run E2E tests
4464
shell: bash
4565
working-directory: ${{ inputs.projectRoot }}
46-
run: |
47-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
66+
run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
4867
- name: Upload visual test artifacts
4968
if: always() && inputs.uploadVisualTestArtifacts == 'true'
5069
uses: actions/upload-artifact@v4

actions/web/action.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,30 @@ runs:
2828
- name: Install Playwright Browsers
2929
shell: bash
3030
run: npx playwright install --with-deps chromium
31+
- name: Detect Package Manager
32+
id: detect-pm
33+
shell: bash
34+
run: |
35+
if [ -f "pnpm-lock.yaml" ]; then
36+
echo "manager=pnpm" >> $GITHUB_OUTPUT
37+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
38+
elif [ -f "yarn.lock" ]; then
39+
echo "manager=yarn" >> $GITHUB_OUTPUT
40+
echo "runner=yarn " >> $GITHUB_OUTPUT
41+
elif [ -f "bun.lockb" ]; then
42+
echo "manager=bun" >> $GITHUB_OUTPUT
43+
echo "runner=bunx " >> $GITHUB_OUTPUT
44+
elif [ -f "deno.lock" ]; then
45+
echo "manager=deno" >> $GITHUB_OUTPUT
46+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
47+
else
48+
echo "manager=npm" >> $GITHUB_OUTPUT
49+
echo "runner=npx " >> $GITHUB_OUTPUT
50+
fi
3151
- name: Run E2E tests
3252
shell: bash
3353
working-directory: ${{ inputs.projectRoot }}
34-
run: |
35-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
54+
run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
3655
- name: Upload visual test artifacts
3756
if: always() && inputs.uploadVisualTestArtifacts == 'true'
3857
uses: actions/upload-artifact@v4

packages/github-action/src/android/action.yml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ runs:
102102
~/.android/avd
103103
~/.android/adb*
104104
key: ${{ steps.avd-key.outputs.key }}
105+
- name: Detect Package Manager
106+
id: detect-pm
107+
shell: bash
108+
run: |
109+
if [ -f "pnpm-lock.yaml" ]; then
110+
echo "manager=pnpm" >> $GITHUB_OUTPUT
111+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
112+
elif [ -f "yarn.lock" ]; then
113+
echo "manager=yarn" >> $GITHUB_OUTPUT
114+
echo "runner=yarn " >> $GITHUB_OUTPUT
115+
elif [ -f "bun.lockb" ]; then
116+
echo "manager=bun" >> $GITHUB_OUTPUT
117+
echo "runner=bunx " >> $GITHUB_OUTPUT
118+
elif [ -f "deno.lock" ]; then
119+
echo "manager=deno" >> $GITHUB_OUTPUT
120+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
121+
else
122+
echo "manager=npm" >> $GITHUB_OUTPUT
123+
echo "runner=npx " >> $GITHUB_OUTPUT
124+
fi
105125
- name: Run E2E tests
106126
id: run-tests
107127
uses: reactivecircus/android-emulator-runner@v2
@@ -116,7 +136,7 @@ runs:
116136
script: |
117137
echo $(pwd)
118138
adb install -r ${{ inputs.app }}
119-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
139+
${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
120140
- name: Upload visual test artifacts
121141
if: always() && inputs.uploadVisualTestArtifacts == 'true'
122142
uses: actions/upload-artifact@v4

packages/github-action/src/ios/action.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,30 @@ runs:
4040
working-directory: ${{ inputs.projectRoot }}
4141
run: |
4242
xcrun simctl install booted ${{ inputs.app }}
43+
- name: Detect Package Manager
44+
id: detect-pm
45+
shell: bash
46+
run: |
47+
if [ -f "pnpm-lock.yaml" ]; then
48+
echo "manager=pnpm" >> $GITHUB_OUTPUT
49+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
50+
elif [ -f "yarn.lock" ]; then
51+
echo "manager=yarn" >> $GITHUB_OUTPUT
52+
echo "runner=yarn " >> $GITHUB_OUTPUT
53+
elif [ -f "bun.lockb" ]; then
54+
echo "manager=bun" >> $GITHUB_OUTPUT
55+
echo "runner=bunx " >> $GITHUB_OUTPUT
56+
elif [ -f "deno.lock" ]; then
57+
echo "manager=deno" >> $GITHUB_OUTPUT
58+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
59+
else
60+
echo "manager=npm" >> $GITHUB_OUTPUT
61+
echo "runner=npx " >> $GITHUB_OUTPUT
62+
fi
4363
- name: Run E2E tests
4464
shell: bash
4565
working-directory: ${{ inputs.projectRoot }}
46-
run: |
47-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
66+
run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
4867
- name: Upload visual test artifacts
4968
if: always() && inputs.uploadVisualTestArtifacts == 'true'
5069
uses: actions/upload-artifact@v4

packages/github-action/src/web/action.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,30 @@ runs:
2828
- name: Install Playwright Browsers
2929
shell: bash
3030
run: npx playwright install --with-deps chromium
31+
- name: Detect Package Manager
32+
id: detect-pm
33+
shell: bash
34+
run: |
35+
if [ -f "pnpm-lock.yaml" ]; then
36+
echo "manager=pnpm" >> $GITHUB_OUTPUT
37+
echo "runner=pnpm exec " >> $GITHUB_OUTPUT
38+
elif [ -f "yarn.lock" ]; then
39+
echo "manager=yarn" >> $GITHUB_OUTPUT
40+
echo "runner=yarn " >> $GITHUB_OUTPUT
41+
elif [ -f "bun.lockb" ]; then
42+
echo "manager=bun" >> $GITHUB_OUTPUT
43+
echo "runner=bunx " >> $GITHUB_OUTPUT
44+
elif [ -f "deno.lock" ]; then
45+
echo "manager=deno" >> $GITHUB_OUTPUT
46+
echo "runner=deno run -A npm:" >> $GITHUB_OUTPUT
47+
else
48+
echo "manager=npm" >> $GITHUB_OUTPUT
49+
echo "runner=npx " >> $GITHUB_OUTPUT
50+
fi
3151
- name: Run E2E tests
3252
shell: bash
3353
working-directory: ${{ inputs.projectRoot }}
34-
run: |
35-
pnpm react-native-harness --harnessRunner ${{ inputs.runner }}
54+
run: ${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }}
3655
- name: Upload visual test artifacts
3756
if: always() && inputs.uploadVisualTestArtifacts == 'true'
3857
uses: actions/upload-artifact@v4

0 commit comments

Comments
 (0)