@@ -35,18 +35,24 @@ concurrency:
3535jobs :
3636 e2e-android-compat :
3737 name : E2E Android (RN 0.72)
38- runs-on : ubuntu-latest
38+ runs-on : ubuntu-24.04
3939 timeout-minutes : 30
4040 if : |
4141 inputs.test_matrix == 'all' ||
4242 inputs.test_matrix == 'android' ||
4343 inputs.test_matrix == 'compat' ||
4444 github.event_name != 'workflow_dispatch'
4545 steps :
46- - uses : actions/checkout@v4
46+ - uses : actions/checkout@v6
47+
48+ - name : Enable KVM
49+ run : |
50+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
51+ sudo udevadm control --reload-rules
52+ sudo udevadm trigger --name-match=kvm
4753
4854 - name : Install devbox
49- uses : jetify-com/devbox-install-action@v0.14 .0
55+ uses : jetify-com/devbox-install-action@v0.15 .0
5056 with :
5157 project-path : examples/E2E-compat
5258
@@ -58,26 +64,26 @@ jobs:
5864
5965 - name : Upload test results
6066 if : always()
61- uses : actions/upload-artifact@v4
67+ uses : actions/upload-artifact@v7
6268 with :
6369 name : e2e-android-compat-results
6470 path : examples/E2E-compat/reports/
6571 if-no-files-found : ignore
6672
6773 e2e-ios-compat :
6874 name : E2E iOS (RN 0.72)
69- runs-on : macos-latest
75+ runs-on : macos-14
7076 timeout-minutes : 30
7177 if : |
7278 inputs.test_matrix == 'all' ||
7379 inputs.test_matrix == 'ios' ||
7480 inputs.test_matrix == 'compat' ||
7581 github.event_name != 'workflow_dispatch'
7682 steps :
77- - uses : actions/checkout@v4
83+ - uses : actions/checkout@v6
7884
7985 - name : Install devbox
80- uses : jetify-com/devbox-install-action@v0.14 .0
86+ uses : jetify-com/devbox-install-action@v0.15 .0
8187 with :
8288 project-path : examples/E2E-compat
8389
@@ -87,15 +93,15 @@ jobs:
8793
8894 - name : Upload test results
8995 if : always()
90- uses : actions/upload-artifact@v4
96+ uses : actions/upload-artifact@v7
9197 with :
9298 name : e2e-ios-compat-results
9399 path : examples/E2E-compat/reports/
94100 if-no-files-found : ignore
95101
96102 e2e-android-latest :
97103 name : E2E Android (RN 0.84)
98- runs-on : ubuntu-latest
104+ runs-on : ubuntu-24.04
99105 timeout-minutes : 30
100106 continue-on-error : true # TODO: Remove when RN 0.84 support is complete
101107 if : |
@@ -104,10 +110,16 @@ jobs:
104110 inputs.test_matrix == 'latest' ||
105111 github.event_name != 'workflow_dispatch'
106112 steps :
107- - uses : actions/checkout@v4
113+ - uses : actions/checkout@v6
114+
115+ - name : Enable KVM
116+ run : |
117+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
118+ sudo udevadm control --reload-rules
119+ sudo udevadm trigger --name-match=kvm
108120
109121 - name : Install devbox
110- uses : jetify-com/devbox-install-action@v0.14 .0
122+ uses : jetify-com/devbox-install-action@v0.15 .0
111123 with :
112124 project-path : examples/E2E-latest
113125
@@ -119,15 +131,15 @@ jobs:
119131
120132 - name : Upload test results
121133 if : always()
122- uses : actions/upload-artifact@v4
134+ uses : actions/upload-artifact@v7
123135 with :
124136 name : e2e-android-latest-results
125137 path : examples/E2E-latest/reports/
126138 if-no-files-found : ignore
127139
128140 e2e-ios-latest :
129141 name : E2E iOS (RN 0.84)
130- runs-on : macos-latest
142+ runs-on : macos-14
131143 timeout-minutes : 30
132144 continue-on-error : true # TODO: Remove when RN 0.84 support is complete
133145 if : |
@@ -136,10 +148,10 @@ jobs:
136148 inputs.test_matrix == 'latest' ||
137149 github.event_name != 'workflow_dispatch'
138150 steps :
139- - uses : actions/checkout@v4
151+ - uses : actions/checkout@v6
140152
141153 - name : Install devbox
142- uses : jetify-com/devbox-install-action@v0.14 .0
154+ uses : jetify-com/devbox-install-action@v0.15 .0
143155 with :
144156 project-path : examples/E2E-latest
145157
@@ -149,8 +161,40 @@ jobs:
149161
150162 - name : Upload test results
151163 if : always()
152- uses : actions/upload-artifact@v4
164+ uses : actions/upload-artifact@v7
153165 with :
154166 name : e2e-ios-latest-results
155167 path : examples/E2E-latest/reports/
156168 if-no-files-found : ignore
169+
170+ e2e-summary :
171+ name : E2E Test Summary
172+ runs-on : ubuntu-latest
173+ needs :
174+ [e2e-android-compat, e2e-ios-compat, e2e-android-latest, e2e-ios-latest]
175+ if : always()
176+ steps :
177+ - name : Check results
178+ run : |
179+ echo "📊 E2E Test Results:"
180+ echo " Android (RN 0.72): ${{ needs.e2e-android-compat.result }}"
181+ echo " iOS (RN 0.72): ${{ needs.e2e-ios-compat.result }}"
182+ echo " Android (RN 0.84): ${{ needs.e2e-android-latest.result }}"
183+ echo " iOS (RN 0.84): ${{ needs.e2e-ios-latest.result }}"
184+ echo ""
185+
186+ # Check for failures, treating continue-on-error jobs as non-blocking
187+ if [[ "${{ needs.e2e-android-compat.result }}" != "success" && "${{ needs.e2e-android-compat.result }}" != "skipped" ]] || \
188+ [[ "${{ needs.e2e-ios-compat.result }}" != "success" && "${{ needs.e2e-ios-compat.result }}" != "skipped" ]]; then
189+ echo "::error::One or more E2E test suites failed"
190+ echo "::error::Check the individual job logs for details"
191+ exit 1
192+ fi
193+
194+ # Note: android-latest and ios-latest have continue-on-error, so we don't fail on them
195+ if [[ "${{ needs.e2e-android-latest.result }}" == "failure" ]] || \
196+ [[ "${{ needs.e2e-ios-latest.result }}" == "failure" ]]; then
197+ echo "::warning::RN 0.84 tests failed but are allowed to fail (continue-on-error)"
198+ fi
199+
200+ echo "::notice::✅ E2E tests passed successfully!"
0 commit comments