diff --git a/.github/workflows/android-device-test.yml b/.github/workflows/android-device-test.yml index 0967a6cff..2df097dbf 100644 --- a/.github/workflows/android-device-test.yml +++ b/.github/workflows/android-device-test.yml @@ -26,12 +26,6 @@ jobs: appFile: "MapboxGLAndroidSDKTestApp-drawable-release.apk", name: "Android Benchmark", testFilter: "org.maplibre.android.benchmark.Benchmark", - # echo '{"styleNames": [...], "styleURLs": [...], "resultsAPI: "..." }' > benchmark-input.json - # zip benchmark-input.zip benchmark-input.json - # aws devicefarm create-upload --project-arn --type EXTERNAL_DATA --name benchmark-input.zip - # curl -T benchmark-input.zip - # aws devicefarm get-upload - externalData: "arn:aws:devicefarm:us-west-2:373521797162:upload:20687d72-0e46-403e-8f03-0941850665bc/c27174c2-63f4-4cdb-9af9-68957d75ebed", # top devices, query with `aws list-device-pools --arn ` devicePool: "arn:aws:devicefarm:us-west-2::devicepool:082d10e5-d7d7-48a5-ba5c-b33d66efa1f5", # benchmark-android.yaml @@ -83,6 +77,14 @@ jobs: with: files: "${{ matrix.test.testFile }}, ${{ matrix.test.appFile }}" + - name: Upload external data for benchmark + if: matrix.test.name == 'Android Benchmark' + run: | + export RESULTS_API=${{ secrets.MLN_RESULTS_API }} + export AWS_DEVICE_FARM_PROJECT_ARN=${{ vars.AWS_DEVICE_FARM_PROJECT_ARN }} + upload_arn="$(.github/workflows/android-device-test/upload-external-data.sh)" + echo external_data_arn="$upload_arn" >> "$GITHUB_ENV" + - uses: ./.github/actions/aws-device-farm-run if: steps.check_files.outputs.files_exists == 'true' && (matrix.test.name != 'Android Benchmark' || steps.fc.outputs.comment-id) with: @@ -98,7 +100,7 @@ jobs: AWS_ROLE_TO_ASSUME: ${{ vars.AWS_ROLE_TO_ASSUME }} AWS_DEVICE_FARM_PROJECT_ARN: ${{ vars.AWS_DEVICE_FARM_PROJECT_ARN }} AWS_DEVICE_FARM_DEVICE_POOL_ARN: ${{ matrix.test.devicePool }} - externalData: ${{ matrix.test.externalData }} + externalData: ${{ env.external_data_arn }} testSpecArn: ${{ matrix.test.testSpecArn }} - uses: LouisBrunner/checks-action@v2.0.0 diff --git a/.github/workflows/android-device-test/upload-external-data.sh b/.github/workflows/android-device-test/upload-external-data.sh new file mode 100755 index 000000000..5610e623c --- /dev/null +++ b/.github/workflows/android-device-test/upload-external-data.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Check if the required variables are defined +if [ -z "$RESULTS_API" ] || [ -z "$AWS_DEVICE_FARM_PROJECT_ARN" ]; then + echo "Error: Missing required variables." + usage +fi + +cd "$(mktemp -d)" + +cat << EOF > benchmark-input.json +{ + "styleNames": ["Facebook Light", "MapTiler Basic", "Americana"], + "styleURLs": [ + "https://external.xx.fbcdn.net/maps/vt/style/canterbury_1_0/?locale=en_US", + "https://api.maptiler.com/maps/basic-v2/style.json?key=get_your_own_OpIi9ZULNHzrESv6T2vL", + "https://zelonewolf.github.io/openstreetmap-americana/style.json" + ], + "resultsAPI": "$RESULTS_API" +} +EOF + +>&2 zip benchmark-input.zip benchmark-input.json +upload_json="$(aws devicefarm create-upload --project-arn "$AWS_DEVICE_FARM_PROJECT_ARN" --type EXTERNAL_DATA --name benchmark-input.zip --output json)" +upload_url="$(echo "$upload_json" | jq -r '.upload.url')" +upload_arn="$(echo "$upload_json" | jq -r '.upload.arn')" +curl -T benchmark-input.zip "$upload_url" + +retries=5 +while true; do + upload_status="$(aws devicefarm get-upload --arn "$upload_arn" --output text --query upload.status)" + >&2 echo "Upload $upload_status" + sleep 1 + if [[ "$upload_status" == "SUCCEEDED" ]]; then + break + fi + + if (( --retries == 0 )); then + exit 1 + fi +done + +echo "$upload_arn"