Skip to content

Commit 5e41c10

Browse files
committed
fix: preserve hook semantics across runners
1 parent d64a9c7 commit 5e41c10

8 files changed

Lines changed: 252 additions & 182 deletions

File tree

action.yml

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -223,31 +223,57 @@ runs:
223223
echo "manager=npm" >> $GITHUB_OUTPUT
224224
echo "runner=npx " >> $GITHUB_OUTPUT
225225
fi
226-
- name: Run pre-run hook
227-
if: fromJson(steps.load-config.outputs.config).platformId != 'android' && inputs.preRunHook != ''
228-
shell: bash
229-
working-directory: ${{ steps.load-config.outputs.projectRoot }}
230-
env:
231-
HOOK_CONTENT: ${{ inputs.preRunHook }}
232-
HARNESS_RUNNER: ${{ inputs.runner }}
233-
run: |
234-
export HARNESS_PROJECT_ROOT="$PWD"
235-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
236-
trap 'rm -f "$hook_file"' EXIT
237-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
238-
chmod +x "$hook_file"
239-
bash "$hook_file"
240226
- name: Run E2E tests
241227
id: run-tests
242228
if: fromJson(steps.load-config.outputs.config).platformId != 'android'
243229
shell: bash
244230
working-directory: ${{ steps.load-config.outputs.projectRoot }}
231+
env:
232+
PRE_RUN_HOOK: ${{ inputs.preRunHook }}
233+
AFTER_RUN_HOOK: ${{ inputs.afterRunHook }}
234+
HARNESS_RUNNER: ${{ inputs.runner }}
245235
run: |
236+
export HARNESS_PROJECT_ROOT="$PWD"
237+
238+
if [ -n "$PRE_RUN_HOOK" ]; then
239+
pre_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
240+
trap 'rm -f "$pre_hook_file"' EXIT
241+
printf '%s\n' "$PRE_RUN_HOOK" > "$pre_hook_file"
242+
chmod +x "$pre_hook_file"
243+
bash "$pre_hook_file"
244+
rm -f "$pre_hook_file"
245+
trap - EXIT
246+
fi
247+
246248
set +e
247249
${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} ${{ inputs.harnessArgs }}
248250
harness_exit_code=$?
251+
set -e
252+
253+
export HARNESS_EXIT_CODE="$harness_exit_code"
254+
after_run_exit_code=0
255+
if [ -n "$AFTER_RUN_HOOK" ]; then
256+
after_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
257+
trap 'rm -f "$after_hook_file"' EXIT
258+
printf '%s\n' "$AFTER_RUN_HOOK" > "$after_hook_file"
259+
chmod +x "$after_hook_file"
260+
set +e
261+
bash "$after_hook_file"
262+
after_run_exit_code=$?
263+
set -e
264+
rm -f "$after_hook_file"
265+
trap - EXIT
266+
fi
267+
249268
echo "harness_exit_code=$harness_exit_code" >> "$GITHUB_OUTPUT"
250-
exit "$harness_exit_code"
269+
270+
if [ "$harness_exit_code" -ne 0 ]; then
271+
exit "$harness_exit_code"
272+
fi
273+
274+
if [ "$after_run_exit_code" -ne 0 ]; then
275+
exit "$after_run_exit_code"
276+
fi
251277
- name: Run E2E tests
252278
id: run-tests-android
253279
if: fromJson(steps.load-config.outputs.config).platformId == 'android'
@@ -265,13 +291,14 @@ runs:
265291
disable-animations: true
266292
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
267293
script: |
294+
export HARNESS_PROJECT_ROOT="$PWD"
295+
268296
adb install -r ${{ inputs.app }}
269297
270298
if [ -n "$PRE_RUN_HOOK" ]; then
271299
pre_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
272300
printf '%s\n' "$PRE_RUN_HOOK" > "$pre_hook_file"
273301
chmod +x "$pre_hook_file"
274-
export HARNESS_PROJECT_ROOT="$PWD"
275302
bash "$pre_hook_file"
276303
rm -f "$pre_hook_file"
277304
fi
@@ -302,21 +329,6 @@ runs:
302329
if [ "$after_run_exit_code" -ne 0 ]; then
303330
exit "$after_run_exit_code"
304331
fi
305-
- name: Run after-run hook
306-
if: always() && fromJson(steps.load-config.outputs.config).platformId != 'android' && inputs.afterRunHook != '' && steps.run-tests.outcome != 'skipped'
307-
shell: bash
308-
working-directory: ${{ steps.load-config.outputs.projectRoot }}
309-
env:
310-
HOOK_CONTENT: ${{ inputs.afterRunHook }}
311-
HARNESS_RUNNER: ${{ inputs.runner }}
312-
HARNESS_EXIT_CODE: ${{ steps.run-tests.outputs.harness_exit_code }}
313-
run: |
314-
export HARNESS_PROJECT_ROOT="$PWD"
315-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
316-
trap 'rm -f "$hook_file"' EXIT
317-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
318-
chmod +x "$hook_file"
319-
bash "$hook_file"
320332
- name: Upload visual test artifacts
321333
if: always() && inputs.uploadVisualTestArtifacts == 'true'
322334
uses: actions/upload-artifact@v4

actions/android/action.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,14 @@ runs:
160160
disable-animations: true
161161
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
162162
script: |
163+
export HARNESS_PROJECT_ROOT="$PWD"
164+
163165
adb install -r ${{ inputs.app }}
164166
165167
if [ -n "$PRE_RUN_HOOK" ]; then
166168
pre_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
167169
printf '%s\n' "$PRE_RUN_HOOK" > "$pre_hook_file"
168170
chmod +x "$pre_hook_file"
169-
export HARNESS_PROJECT_ROOT="$PWD"
170171
bash "$pre_hook_file"
171172
rm -f "$pre_hook_file"
172173
fi

actions/ios/action.yml

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,6 @@ runs:
5555
working-directory: ${{ inputs.projectRoot }}
5656
run: |
5757
xcrun simctl install booted ${{ inputs.app }}
58-
- name: Run pre-run hook
59-
if: inputs.preRunHook != ''
60-
shell: bash
61-
working-directory: ${{ inputs.projectRoot }}
62-
env:
63-
HOOK_CONTENT: ${{ inputs.preRunHook }}
64-
HARNESS_RUNNER: ${{ inputs.runner }}
65-
run: |
66-
export HARNESS_PROJECT_ROOT="$PWD"
67-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
68-
trap 'rm -f "$hook_file"' EXIT
69-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
70-
chmod +x "$hook_file"
71-
bash "$hook_file"
7258
- name: Detect Package Manager
7359
id: detect-pm
7460
shell: bash
@@ -93,27 +79,52 @@ runs:
9379
id: run-tests
9480
shell: bash
9581
working-directory: ${{ inputs.projectRoot }}
82+
env:
83+
PRE_RUN_HOOK: ${{ inputs.preRunHook }}
84+
AFTER_RUN_HOOK: ${{ inputs.afterRunHook }}
85+
HARNESS_RUNNER: ${{ inputs.runner }}
9686
run: |
87+
export HARNESS_PROJECT_ROOT="$PWD"
88+
89+
if [ -n "$PRE_RUN_HOOK" ]; then
90+
pre_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
91+
trap 'rm -f "$pre_hook_file"' EXIT
92+
printf '%s\n' "$PRE_RUN_HOOK" > "$pre_hook_file"
93+
chmod +x "$pre_hook_file"
94+
bash "$pre_hook_file"
95+
rm -f "$pre_hook_file"
96+
trap - EXIT
97+
fi
98+
9799
set +e
98100
${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} ${{ inputs.harnessArgs }}
99101
harness_exit_code=$?
102+
set -e
103+
104+
export HARNESS_EXIT_CODE="$harness_exit_code"
105+
after_run_exit_code=0
106+
if [ -n "$AFTER_RUN_HOOK" ]; then
107+
after_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
108+
trap 'rm -f "$after_hook_file"' EXIT
109+
printf '%s\n' "$AFTER_RUN_HOOK" > "$after_hook_file"
110+
chmod +x "$after_hook_file"
111+
set +e
112+
bash "$after_hook_file"
113+
after_run_exit_code=$?
114+
set -e
115+
rm -f "$after_hook_file"
116+
trap - EXIT
117+
fi
118+
100119
echo "harness_exit_code=$harness_exit_code" >> "$GITHUB_OUTPUT"
101-
exit "$harness_exit_code"
102-
- name: Run after-run hook
103-
if: always() && inputs.afterRunHook != '' && steps.run-tests.outcome != 'skipped'
104-
shell: bash
105-
working-directory: ${{ inputs.projectRoot }}
106-
env:
107-
HOOK_CONTENT: ${{ inputs.afterRunHook }}
108-
HARNESS_RUNNER: ${{ inputs.runner }}
109-
HARNESS_EXIT_CODE: ${{ steps.run-tests.outputs.harness_exit_code }}
110-
run: |
111-
export HARNESS_PROJECT_ROOT="$PWD"
112-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
113-
trap 'rm -f "$hook_file"' EXIT
114-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
115-
chmod +x "$hook_file"
116-
bash "$hook_file"
120+
121+
if [ "$harness_exit_code" -ne 0 ]; then
122+
exit "$harness_exit_code"
123+
fi
124+
125+
if [ "$after_run_exit_code" -ne 0 ]; then
126+
exit "$after_run_exit_code"
127+
fi
117128
- name: Upload visual test artifacts
118129
if: always() && inputs.uploadVisualTestArtifacts == 'true'
119130
uses: actions/upload-artifact@v4

actions/web/action.yml

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -63,45 +63,56 @@ runs:
6363
echo "manager=npm" >> $GITHUB_OUTPUT
6464
echo "runner=npx " >> $GITHUB_OUTPUT
6565
fi
66-
- name: Run pre-run hook
67-
if: inputs.preRunHook != ''
66+
- name: Run E2E tests
67+
id: run-tests
6868
shell: bash
6969
working-directory: ${{ inputs.projectRoot }}
7070
env:
71-
HOOK_CONTENT: ${{ inputs.preRunHook }}
71+
PRE_RUN_HOOK: ${{ inputs.preRunHook }}
72+
AFTER_RUN_HOOK: ${{ inputs.afterRunHook }}
7273
HARNESS_RUNNER: ${{ inputs.runner }}
7374
run: |
7475
export HARNESS_PROJECT_ROOT="$PWD"
75-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
76-
trap 'rm -f "$hook_file"' EXIT
77-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
78-
chmod +x "$hook_file"
79-
bash "$hook_file"
80-
- name: Run E2E tests
81-
id: run-tests
82-
shell: bash
83-
working-directory: ${{ inputs.projectRoot }}
84-
run: |
76+
77+
if [ -n "$PRE_RUN_HOOK" ]; then
78+
pre_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-pre-run.XXXXXX.sh")"
79+
trap 'rm -f "$pre_hook_file"' EXIT
80+
printf '%s\n' "$PRE_RUN_HOOK" > "$pre_hook_file"
81+
chmod +x "$pre_hook_file"
82+
bash "$pre_hook_file"
83+
rm -f "$pre_hook_file"
84+
trap - EXIT
85+
fi
86+
8587
set +e
8688
${{ steps.detect-pm.outputs.runner }}react-native-harness --harnessRunner ${{ inputs.runner }} ${{ inputs.harnessArgs }}
8789
harness_exit_code=$?
90+
set -e
91+
92+
export HARNESS_EXIT_CODE="$harness_exit_code"
93+
after_run_exit_code=0
94+
if [ -n "$AFTER_RUN_HOOK" ]; then
95+
after_hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
96+
trap 'rm -f "$after_hook_file"' EXIT
97+
printf '%s\n' "$AFTER_RUN_HOOK" > "$after_hook_file"
98+
chmod +x "$after_hook_file"
99+
set +e
100+
bash "$after_hook_file"
101+
after_run_exit_code=$?
102+
set -e
103+
rm -f "$after_hook_file"
104+
trap - EXIT
105+
fi
106+
88107
echo "harness_exit_code=$harness_exit_code" >> "$GITHUB_OUTPUT"
89-
exit "$harness_exit_code"
90-
- name: Run after-run hook
91-
if: always() && inputs.afterRunHook != '' && steps.run-tests.outcome != 'skipped'
92-
shell: bash
93-
working-directory: ${{ inputs.projectRoot }}
94-
env:
95-
HOOK_CONTENT: ${{ inputs.afterRunHook }}
96-
HARNESS_RUNNER: ${{ inputs.runner }}
97-
HARNESS_EXIT_CODE: ${{ steps.run-tests.outputs.harness_exit_code }}
98-
run: |
99-
export HARNESS_PROJECT_ROOT="$PWD"
100-
hook_file="$(mktemp "${RUNNER_TEMP:-/tmp}/harness-after-run.XXXXXX.sh")"
101-
trap 'rm -f "$hook_file"' EXIT
102-
printf '%s\n' "$HOOK_CONTENT" > "$hook_file"
103-
chmod +x "$hook_file"
104-
bash "$hook_file"
108+
109+
if [ "$harness_exit_code" -ne 0 ]; then
110+
exit "$harness_exit_code"
111+
fi
112+
113+
if [ "$after_run_exit_code" -ne 0 ]; then
114+
exit "$after_run_exit_code"
115+
fi
105116
- name: Upload visual test artifacts
106117
if: always() && inputs.uploadVisualTestArtifacts == 'true'
107118
uses: actions/upload-artifact@v4

0 commit comments

Comments
 (0)