6262 HARNESS_ANDROID_APP_BUILD_OUTPUT : apps/simple-camera/android/app/build/outputs/apk/debug/app-debug.apk
6363 HARNESS_IOS_APP_BUILD_OUTPUT : apps/simple-camera/ios/build/devicefarm/SimpleCamera.ipa
6464 HARNESS_IOS_DERIVED_DATA_OUTPUT : apps/simple-camera/ios/build/devicefarm/DerivedData
65+ HARNESS_ANDROID_APK_ARTIFACT_NAME : harness-android-apk
6566 HARNESS_IOS_IPA_ARTIFACT_NAME : harness-ios-ipa
6667 HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_ARTIFACT_NAME : harness-xctest-agent-ipa
6768 HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH : apps/simple-camera/ios/build/devicefarm/HarnessXCTestAgentUITests.ipa
6869 HARNESS_IOS_XCTEST_UI_TEST_PACKAGE_OUTPUT : apps/simple-camera/ios/build/devicefarm/HarnessXCTestUITestPackage.zip
6970 HARNESS_DEVICE_FARM_REPO_ARCHIVE_NAME : react-native-vision-camera.zip
70- HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT : devicefarm-test-package .zip
71+ HARNESS_ANDROID_DEVICE_FARM_TEST_PACKAGE_OUTPUT : apps/simple-camera/android/build/devicefarm/AndroidTestPackage .zip
7172 HARNESS_ANDROID_BUNDLE_ID : com.margelo.nitro.camera.example.simple
7273 HARNESS_ANDROID_DEVICE_ARCH : ${{ github.event.inputs.device_arch || 'arm64-v8a' }}
7374 # Name of the device pools on AWS to pick devices from.
@@ -127,77 +128,12 @@ jobs:
127128 echo "run_android=${{ steps.filter.outputs.android == 'true' || steps.filter.outputs.shared == 'true' }}" >> "$GITHUB_OUTPUT"
128129 echo "run_ios=${{ steps.filter.outputs.ios == 'true' || steps.filter.outputs.shared == 'true' }}" >> "$GITHUB_OUTPUT"
129130
130- prepare-devicefarm-assets :
131- name : Prepare Device Farm Assets
132- runs-on : ubuntu-latest
133- needs :
134- - detect-changes
135- if : ${{ needs.detect-changes.outputs.run_android == 'true' || needs.detect-changes.outputs.run_ios == 'true' }}
136- outputs :
137- test_package_arn : ${{ steps.upload-test-package.outputs.upload-arn }}
138- android_test_spec_arn : ${{ steps.upload-android-test-spec.outputs.upload-arn }}
139- ios_test_spec_arn : ${{ steps.upload-ios-test-spec.outputs.upload-arn }}
140- steps :
141- - uses : actions/checkout@v6
142- with :
143- fetch-depth : 1
144-
145- - name : Configure AWS credentials
146- uses : aws-actions/configure-aws-credentials@v6
147- with :
148- role-to-assume : arn:aws:iam::633665345122:role/GitHubDeviceFarmRole
149- aws-region : ${{ env.HARNESS_AWS_REGION }}
150-
151- - name : Create Device Farm test package zip
152- run : |
153- rm -f "${{ env.HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}"
154- git archive \
155- --format=zip \
156- --output "${{ env.HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}" \
157- HEAD
158- unzip -tq "${{ env.HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}"
159-
160- - name : Upload Device Farm test package
161- id : upload-test-package
162- uses : ./.github/actions/upload-devicefarm-artifact
163- with :
164- project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
165- aws-region : ${{ env.HARNESS_AWS_REGION }}
166- file-path : ${{ env.HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}
167- upload-type : APPIUM_NODE_TEST_PACKAGE
168- content-type : application/zip
169- upload-name : DeviceFarmTestPackage-${{ github.run_id }}-${{ github.run_attempt }}.zip
170-
171- - name : Upload Device Farm Android test spec
172- id : upload-android-test-spec
173- uses : ./.github/actions/upload-devicefarm-artifact
174- with :
175- project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
176- aws-region : ${{ env.HARNESS_AWS_REGION }}
177- file-path : apps/simple-camera/device-farm-tests/AwsTestSpec.yml
178- upload-type : APPIUM_NODE_TEST_SPEC
179- content-type : application/octet-stream
180- upload-name : AwsTestSpecAndroid-${{ github.run_id }}-${{ github.run_attempt }}.yml
181-
182- - name : Upload Device Farm iOS test spec
183- if : ${{ needs.detect-changes.outputs.run_ios == 'true' }}
184- id : upload-ios-test-spec
185- uses : ./.github/actions/upload-devicefarm-artifact
186- with :
187- project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
188- aws-region : ${{ env.HARNESS_AWS_REGION }}
189- file-path : apps/simple-camera/device-farm-tests/AwsTestSpecIOS.yml
190- upload-type : XCTEST_UI_TEST_SPEC
191- content-type : application/octet-stream
192- upload-name : AwsTestSpecIOS-${{ github.run_id }}-${{ github.run_attempt }}.yml
193-
194- test-android :
195- name : Test Android
131+ build-android :
132+ name : Build Android
196133 runs-on : ubuntu-latest
197134 timeout-minutes : 45
198135 needs :
199136 - detect-changes
200- - prepare-devicefarm-assets
201137 if : ${{ needs.detect-changes.outputs.run_android == 'true' }}
202138 steps :
203139 - uses : actions/checkout@v6
@@ -233,12 +169,6 @@ jobs:
233169 ${{ runner.os }}-gradle-${{ env.HARNESS_ANDROID_DEVICE_ARCH }}-
234170 ${{ runner.os }}-gradle-
235171
236- - name : Configure AWS credentials
237- uses : aws-actions/configure-aws-credentials@v6
238- with :
239- role-to-assume : arn:aws:iam::633665345122:role/GitHubDeviceFarmRole
240- aws-region : ${{ env.HARNESS_AWS_REGION }}
241-
242172 - name : Restore Android app from cache
243173 id : cache-apk-restore
244174 uses : actions/cache/restore@v4
@@ -261,6 +191,84 @@ jobs:
261191 - name : Verify Android app artifact
262192 run : test -f ${{ env.HARNESS_ANDROID_APP_BUILD_OUTPUT }}
263193
194+ - name : Upload Android app artifact
195+ uses : actions/upload-artifact@v4
196+ with :
197+ name : ${{ env.HARNESS_ANDROID_APK_ARTIFACT_NAME }}
198+ path : ${{ env.HARNESS_ANDROID_APP_BUILD_OUTPUT }}
199+ if-no-files-found : error
200+ retention-days : 7
201+
202+ test-android :
203+ name : Test Android
204+ runs-on : ubuntu-latest
205+ timeout-minutes : 45
206+ needs :
207+ - detect-changes
208+ - build-android
209+ if : ${{ needs.detect-changes.outputs.run_android == 'true' }}
210+ steps :
211+ - uses : actions/checkout@v6
212+ with :
213+ fetch-depth : 1
214+
215+ - name : Download Android app artifact
216+ uses : actions/download-artifact@v4
217+ with :
218+ name : ${{ env.HARNESS_ANDROID_APK_ARTIFACT_NAME }}
219+ path : apps/simple-camera/android/app/build/outputs/apk/debug
220+
221+ - name : Verify Android app artifact
222+ run : test -f ${{ env.HARNESS_ANDROID_APP_BUILD_OUTPUT }}
223+
224+ - name : Create Android Device Farm test package
225+ run : |
226+ set -euo pipefail
227+
228+ PACKAGE_PATH="${{ env.HARNESS_ANDROID_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}"
229+ PACKAGE_DIR="$(dirname "$PACKAGE_PATH")"
230+
231+ rm -f "$PACKAGE_PATH"
232+ mkdir -p "$PACKAGE_DIR"
233+
234+ git archive \
235+ --format=zip \
236+ --output "$PACKAGE_PATH" \
237+ HEAD
238+
239+ unzip -tq "$PACKAGE_PATH"
240+
241+ - name : Verify Android Device Farm test package
242+ run : test -f ${{ env.HARNESS_ANDROID_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}
243+
244+ - name : Configure AWS credentials
245+ uses : aws-actions/configure-aws-credentials@v6
246+ with :
247+ role-to-assume : arn:aws:iam::633665345122:role/GitHubDeviceFarmRole
248+ aws-region : ${{ env.HARNESS_AWS_REGION }}
249+
250+ - name : Upload Android test package to AWS Device Farm
251+ id : upload-android-test-package
252+ uses : ./.github/actions/upload-devicefarm-artifact
253+ with :
254+ project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
255+ aws-region : ${{ env.HARNESS_AWS_REGION }}
256+ file-path : ${{ env.HARNESS_ANDROID_DEVICE_FARM_TEST_PACKAGE_OUTPUT }}
257+ upload-type : APPIUM_NODE_TEST_PACKAGE
258+ content-type : application/zip
259+ upload-name : AndroidTestPackage-${{ github.run_id }}-${{ github.run_attempt }}.zip
260+
261+ - name : Upload Android test spec to AWS Device Farm
262+ id : upload-android-test-spec
263+ uses : ./.github/actions/upload-devicefarm-artifact
264+ with :
265+ project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
266+ aws-region : ${{ env.HARNESS_AWS_REGION }}
267+ file-path : apps/simple-camera/device-farm-tests/AwsTestSpec.yml
268+ upload-type : APPIUM_NODE_TEST_SPEC
269+ content-type : application/octet-stream
270+ upload-name : AwsTestSpecAndroid-${{ github.run_id }}-${{ github.run_attempt }}.yml
271+
264272 - name : Upload APK to AWS Device Farm
265273 id : upload-apk
266274 uses : ./.github/actions/upload-devicefarm-artifact
@@ -283,8 +291,8 @@ jobs:
283291 "devicePoolArn": "${{ env.HARNESS_DEVICE_FARM_ANDROID_DEVICE_POOL_ARN }}",
284292 "test": {
285293 "type": "APPIUM_NODE",
286- "testPackageArn": "${{ needs.prepare-devicefarm-assets .outputs.test_package_arn }}",
287- "testSpecArn": "${{ needs.prepare-devicefarm-assets .outputs.android_test_spec_arn }}"
294+ "testPackageArn": "${{ steps.upload-android-test-package .outputs['upload-arn'] }}",
295+ "testSpecArn": "${{ steps.upload-android-test-spec .outputs['upload-arn'] }}"
288296 }
289297 }
290298 artifact-types : ALL
@@ -476,7 +484,6 @@ jobs:
476484 timeout-minutes : 45
477485 needs :
478486 - detect-changes
479- - prepare-devicefarm-assets
480487 - build-ios
481488 if : ${{ needs.detect-changes.outputs.run_ios == 'true' }}
482489 steps :
@@ -562,9 +569,21 @@ jobs:
562569 content-type : application/zip
563570 upload-name : harness-xctest-ui-package-${{ github.run_id }}-${{ github.run_attempt }}.zip
564571
572+ - name : Upload iOS test spec to AWS Device Farm
573+ id : upload-ios-test-spec
574+ uses : ./.github/actions/upload-devicefarm-artifact
575+ with :
576+ project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
577+ aws-region : ${{ env.HARNESS_AWS_REGION }}
578+ file-path : apps/simple-camera/device-farm-tests/AwsTestSpecIOS.yml
579+ upload-type : XCTEST_UI_TEST_SPEC
580+ content-type : application/octet-stream
581+ upload-name : AwsTestSpecIOS-${{ github.run_id }}-${{ github.run_attempt }}.yml
582+
565583 - name : Schedule Device Farm iOS Automated Test
566584 id : run-test
567585 uses : aws-actions/aws-devicefarm-mobile-device-testing@v2.3
586+ continue-on-error : true
568587 with :
569588 run-settings-json : |
570589 {
@@ -575,7 +594,7 @@ jobs:
575594 "test": {
576595 "type": "XCTEST_UI",
577596 "testPackageArn": "${{ steps.upload-xctest-ui-package.outputs['upload-arn'] }}",
578- "testSpecArn": "${{ needs.prepare-devicefarm-assets .outputs.ios_test_spec_arn }}"
597+ "testSpecArn": "${{ steps.upload-ios-test-spec .outputs['upload-arn'] }}"
579598 }
580599 }
581600 artifact-types : ALL
@@ -586,3 +605,4 @@ jobs:
586605 with :
587606 artifact-folder : ${{ steps.run-test.outputs.artifact-folder }}
588607 platform : ios
608+ test-step-outcome : ${{ steps.run-test.outcome }}
0 commit comments