test ios device #531
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: test ios device | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '30 21 * * *' | |
jobs: | |
run_tests: | |
name: Flutter ${{ matrix.flutter-version }} on ${{ matrix.device_model }} ${{ matrix.os }} ${{ matrix.os_version }} on FTL | |
runs-on: macos-latest | |
timeout-minutes: 40 | |
outputs: | |
SLACK_MESSAGE_TITLE: Flutter ${{ matrix.flutter-version }} on ${{ matrix.os }} ${{ matrix.os_version }} | |
TESTS_EXIT_CODE: ${{ steps.tests_step.outputs.TESTS_EXIT_CODE }} | |
EXCLUDED_TESTS: ${{ steps.set_excluded_tests.outputs.EXCLUDED_TESTS }} | |
URL_TO_DETAILS: ${{ steps.tests_step.outputs.URL_TO_DETAILS }} | |
strategy: | |
fail-fast: false | |
matrix: | |
flutter-version: ['3.16.x'] | |
flutter-channel: ['stable'] | |
device_model: ['iphone14pro'] | |
os_version: ['16.6'] | |
os: [iOS] | |
defaults: | |
run: | |
working-directory: dev/e2e_app | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
- name: Add current platform to Gemfile | |
working-directory: dev/e2e_app/ios | |
run: bundle lock --add-platform ruby | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: '3.2' | |
bundler-cache: true | |
working-directory: dev/e2e_app/ios | |
- name: Set up fastlane | |
working-directory: dev/e2e_app/ios | |
run: bundle install | |
- name: Run fastlane match | |
working-directory: dev/e2e_app/ios | |
env: | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
GIT_USERNAME: ${{ secrets.PATROL_FASTLANE_CERTS_REPO_TOKEN_USERNAME }} | |
GIT_TOKEN: ${{ secrets.PATROL_FASTLANE_CERTS_REPO_TOKEN }} | |
APP_STORE_KEY_ID: ${{ secrets.APP_STORE_KEY_ID }} | |
APP_STORE_ISSUER_ID: ${{ secrets.APP_STORE_ISSUER_ID }} | |
APP_STORE_KEY: ${{ secrets.APP_STORE_KEY }} | |
run: bundle exec fastlane ios certificates | |
- name: Authenticate to Google Cloud | |
uses: google-github-actions/auth@v1 | |
with: | |
credentials_json: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY_JSON }} | |
- name: Set up Cloud SDK | |
uses: google-github-actions/setup-gcloud@v1 | |
- name: Set up Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ matrix.flutter-version }} | |
channel: ${{ matrix.flutter-channel }} | |
- name: Preload Flutter artifacts | |
run: flutter precache --ios | |
- name: Set up Melos and activate workspace | |
working-directory: . | |
run: | | |
dart pub global activate melos | |
melos bootstrap | |
- name: Set up Patrol CLI | |
working-directory: packages/patrol_cli | |
run: dart pub global activate --source path . && patrol | |
- name: Set tests to exclude | |
id: set_excluded_tests | |
run: | | |
TESTS_TO_EXCLUDE="android_app_test,\ | |
permissions/permissions_location_test,\ | |
service_dark_mode_test,\ | |
permissions/notifications_test" | |
target_paths="" | |
for target in $(echo $TESTS_TO_EXCLUDE | tr ',' '\n'); do | |
target_paths+="integration_test/${target}.dart," | |
done | |
target_paths="${target_paths%,}" | |
echo "EXCLUDED_TESTS=$TESTS_TO_EXCLUDE" >> "$GITHUB_OUTPUT" | |
echo "EXCLUDED_TESTS=$target_paths" >> "$GITHUB_ENV" | |
- name: Build tests | |
run: patrol build ios --release --exclude ${{ env.EXCLUDED_TESTS }} --verbose | |
- name: Upload APKs to Firebase Test Lab and wait for tests to finish | |
id: tests_step | |
env: | |
IOS_DEVICE_MODEL: ${{ matrix.device_model }} | |
IOS_DEVICE_VERSION: ${{ matrix.os_version }} | |
run: | | |
set +e | |
output="$(./run_ios_testlab 2>&1)" | |
TESTS_EXIT_CODE=$? | |
set -e | |
echo "$output" | |
# Extract the last link using grep, tail, and sed, and write it to Github Summmary | |
link="$(echo "$output" | grep -o 'https://[^ ]*' | tail -1 | sed 's/\[//;s/\]//')" | |
echo "[Test details on Firebase Test Lab]($link) (LeanCode members only)" >> "$GITHUB_STEP_SUMMARY" | |
echo "URL_TO_DETAILS=$link" >> "$GITHUB_OUTPUT" | |
echo "TESTS_EXIT_CODE=$TESTS_EXIT_CODE" >> "$GITHUB_OUTPUT" | |
exit $TESTS_EXIT_CODE | |
call_send_slack_message: | |
name: Notify on Slack | |
uses: ./.github/workflows/send-slack-message.yaml | |
needs: run_tests | |
if: always() | |
with: | |
TESTS_EXIT_CODE: ${{ needs.run_tests.outputs.TESTS_EXIT_CODE }} | |
SLACK_MESSAGE_TITLE: ${{ needs.run_tests.outputs.SLACK_MESSAGE_TITLE }} | |
EXCLUDED_TESTS: ${{ needs.run_tests.outputs.EXCLUDED_TESTS }} | |
URL_TO_DETAILS: ${{ needs.run_tests.outputs.URL_TO_DETAILS }} | |
secrets: inherit |