Skip to content

Commit e808194

Browse files
committed
github action: split android in build + test & remove prepare stage as android and iOS have no longer shared test package
1 parent 759e4e3 commit e808194

1 file changed

Lines changed: 98 additions & 78 deletions

File tree

.github/workflows/harness-aws-device.yml

Lines changed: 98 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,13 @@ env:
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

Comments
 (0)