Skip to content

Add CI job for running macOS unit tests #333

Add CI job for running macOS unit tests

Add CI job for running macOS unit tests #333

Workflow file for this run

name: CI
on:
pull_request:
types:
- opened
- synchronize
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
env:
flutter: '3.x'
ios-simulator: iPhone 15
java: 11
jobs:
authorize:
name: Authorize
environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
runs-on: ubuntu-latest
steps:
- run: true
analyze-auth0_flutter:
name: Analyze auth0_flutter Flutter package
needs: authorize
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Install Flutter
uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225
with:
flutter-version: ${{ env.flutter }}
channel: stable
cache: true
- name: Add example/.env
working-directory: auth0_flutter
run: cp example/.env.example example/.env
- name: Analize auth0_flutter package
working-directory: auth0_flutter
run: flutter analyze
analyze-auth0_flutter_platform_interface:
name: Analyze auth0_flutter_platform_interface Flutter package
needs: authorize
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Install Flutter
uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225
with:
flutter-version: ${{ env.flutter }}
channel: stable
cache: true
- name: Analize auth0_flutter_platform_interface package
working-directory: auth0_flutter_platform_interface
run: flutter analyze
test-auth0_flutter:
name: Test auth0_flutter Flutter package
needs: authorize
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Install Flutter
uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225
with:
flutter-version: ${{ env.flutter }}
channel: stable
cache: true
- name: Add example/.env
working-directory: auth0_flutter
run: cp example/.env.example example/.env
- name: Test auth0_flutter package
working-directory: auth0_flutter
run: |
flutter test --tags browser --platform chrome
flutter test --coverage --exclude-tags browser
- name: Upload coverage report
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: auth0_flutter coverage
path: auth0_flutter/coverage/lcov.info
test-auth0_flutter_platform_interface:
name: Test auth0_flutter_platform_interface Flutter package
needs: authorize
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Install Flutter
uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225
with:
flutter-version: ${{ env.flutter }}
channel: stable
cache: true
- name: Test auth0_flutter_platform_interface package
working-directory: auth0_flutter_platform_interface
run: flutter test --coverage
- name: Upload coverage report
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: auth0_flutter_platform_interface coverage
path: auth0_flutter_platform_interface/coverage/lcov.info
test-ios-unit:
name: Run native iOS unit tests using Xcode ${{ matrix.xcode }}
needs: authorize
runs-on: macos-13
environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
strategy:
matrix:
xcode:
- '15.0.1'
env:
platform: iOS
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up environment
uses: ./.github/actions/setup-darwin
with:
platform: ${{ env.platform }}
flutter: ${{ env.flutter }}
xcode: ${{ matrix.xcode }}
auth0-domain: ${{ vars.AUTH0_DOMAIN }}
auth0-client-id: ${{ vars.AUTH0_CLIENT_ID }}
- name: Run iOS unit tests
uses: ./.github/actions/unit-tests-darwin
with:
platform: ${{ env.platform }}
destination: ${{ format('{0}{1}', 'platform=iOS Simulator,name=', env.ios-simulator) }}
- name: Convert coverage report
working-directory: auth0_flutter/example/ios
run: bundle exec slather coverage -x --scheme Runner Runner.xcodeproj
- name: Upload coverage report
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: iOS coverage
path: auth0_flutter/example/ios/cobertura
test-ios-smoke:
name: Run native iOS smoke tests using Xcode ${{ matrix.xcode }}
needs: authorize
runs-on: macos-13
environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
env:
platform: iOS
USER_EMAIL: ${{ secrets.USER_EMAIL }}
USER_PASSWORD: ${{ secrets.USER_PASSWORD }}
strategy:
matrix:
xcode:
- '15.0.1'
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up environment
uses: ./.github/actions/setup-darwin
with:
platform: ${{ env.platform }}
flutter: ${{ env.flutter }}
xcode: ${{ matrix.xcode }}
auth0-domain: ${{ vars.AUTH0_DOMAIN }}
auth0-client-id: ${{ vars.AUTH0_CLIENT_ID }}
- name: Run iOS smoke tests
if: ${{ github.event.pull_request.head.repo.fork == false }}
working-directory: auth0_flutter/example/ios
run: |
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0
xcodebuild test -scheme Runner -workspace Runner.xcworkspace -destination '${{ format('{0}{1}', 'platform=iOS Simulator,name=', env.ios-simulator) }}' -resultBundlePath smoke-tests.xcresult -only-testing:RunnerUITests
- name: Upload xcresult bundles
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
if: ${{ failure() }}
with:
name: 'iOS xcresult bundles (smoke tests)'
path: 'auth0_flutter/example/ios/*.xcresult'
test-macos-unit:
name: Run native macOS unit tests using Xcode ${{ matrix.xcode }}
needs: authorize
runs-on: macos-13
environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
strategy:
matrix:
xcode:
- '15.0.1'
env:
platform: macOS
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up environment
uses: ./.github/actions/setup-darwin
with:
platform: ${{ env.platform }}
flutter: ${{ env.flutter }}
xcode: ${{ matrix.xcode }}
auth0-domain: ${{ vars.AUTH0_DOMAIN }}
auth0-client-id: ${{ vars.AUTH0_CLIENT_ID }}
- name: Build macOS example app
working-directory: auth0_flutter/example
run: flutter build macos --debug
- name: Run macOS unit tests
uses: ./.github/actions/unit-tests-darwin
with:
platform: ${{ env.platform }}
destination: platform=macOS,arch=x86_64
test-android-unit:
name: Run native Android unit tests
needs: authorize
runs-on: ubuntu-latest
environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up environment
uses: ./.github/actions/setup-android
with:
flutter: ${{ env.flutter }}
java: ${{ env.java }}
auth0-domain: ${{ vars.AUTH0_DOMAIN }}
auth0-client-id: ${{ vars.AUTH0_CLIENT_ID }}
- name: Build Android example app
working-directory: auth0_flutter/example
run: flutter build apk --split-per-abi
- name: Run Android unit tests
working-directory: auth0_flutter/example/android
run: ./gradlew koverXmlReportDebug
- name: Upload coverage report
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: Android coverage
path: auth0_flutter/example/build/app/coverage.xml
- name: Upload test results
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
if: ${{ failure() }}
with:
name: Test results
path: 'auth0_flutter/example/build/app/reports/androidTests/*.xml'
# test-android-smoke:
# name: Run native Android smoke tests using API-level ${{ matrix.android-api }}
# needs: authorize
# runs-on: macos-latest-xl
# environment: ${{ github.event.pull_request.head.repo.fork && 'external' || 'internal' }}
# env:
# USER_EMAIL: ${{ secrets.USER_EMAIL }}
# USER_PASSWORD: ${{ secrets.USER_PASSWORD }}
# ANDROID_EMULATOR_WAIT_TIME_BEFORE_KILL: 50
# strategy:
# matrix:
# android-api:
# - 32
# steps:
# - name: Checkout
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
# - name: Gradle cache
# uses: gradle/gradle-build-action@ef76a971e2fa3f867b617efd72f2fbd72cf6f8bc
# - name: AVD cache
# uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
# id: avd-cache
# with:
# path: |
# ~/.android/avd/*
# ~/.android/adb*
# key: avd-${{ matrix.android-api }}
# - name: Set up environment
# uses: ./.github/actions/setup-android
# with:
# flutter: ${{ env.flutter }}
# java: ${{ env.java }}
# auth0-domain: ${{ vars.AUTH0_DOMAIN }}
# auth0-client-id: ${{ vars.AUTH0_CLIENT_ID }}
# - name: Build Android example app
# working-directory: auth0_flutter/example
# run: flutter build apk --split-per-abi
# env:
# AUTH0_DOMAIN: ${{ vars.AUTH0_DOMAIN }}
# USER_EMAIL: ${{ vars.USER_EMAIL }}
# USER_PASSWORD: ${{ vars.USER_PASSWORD }}
# - name: Set up Appium tests
# working-directory: appium-test
# run: npm install
# - name: Set up Appium driver
# run: npx --yes appium@next driver install uiautomator2
# - name: Start Appium server
# run: npx --yes appium@next & # Appium recommends this until v2 is released
# - name: Create AVD and generate snapshot for caching
# if: steps.avd-cache.outputs.cache-hit != 'true'
# uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b
# with:
# api-level: ${{ matrix.android-api }}
# target: playstore
# arch: x86_64
# profile: 5.4in FWVGA
# force-avd-creation: false
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
# disable-animations: false
# script: echo "Generated AVD snapshot for caching."
# - name: Run Appium tests
# uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b
# with:
# api-level: ${{ matrix.android-api }}
# target: playstore
# arch: x86_64
# profile: 5.4in FWVGA
# ram-size: 10240M
# heap-size: 4096M
# force-avd-creation: false
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
# disable-animations: true
# script: |
# adb shell pm clear com.android.chrome
# adb shell am set-debug-app --persistent com.android.chrome
# adb shell 'echo "chrome --disable-fre --no-default-browser-check --no-first-run" > /data/local/tmp/chrome-command-line'
# adb emu screenrecord start --time-limit 300 ./recording_video.webm
# adb shell settings put system pointer_location 1
# USER_EMAIL=$USER_EMAIL USER_PASSWORD=$USER_PASSWORD node appium-test/test.js
# - name: Upload recording
# uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
# if: ${{ failure() }}
# with:
# name: 'Android - smoke tests recording'
# path: recording_video.webm
# - name: Upload APK
# uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
# if: ${{ failure() }}
# with:
# name: 'Android - APK'
# path: ./auth0_flutter/example/build/app/outputs/flutter-apk/app-arm64-v8a-release.apk
upload-coverage:
name: Upload coverage reports
runs-on: ubuntu-latest
needs: [
test-auth0_flutter,
test-auth0_flutter_platform_interface,
test-ios-unit,
test-android-unit
]
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
with:
name: auth0_flutter coverage
path: coverage/auth0_flutter
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
with:
name: auth0_flutter_platform_interface coverage
path: coverage/auth0_flutter_platform_interface
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
with:
name: iOS coverage
path: coverage/ios
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
with:
name: Android coverage
path: coverage/android
- name: Upload coverage report for auth0_flutter
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
with:
name: Auth0 Flutter
flags: auth0_flutter
directory: coverage/auth0_flutter
- name: Upload coverage report for auth0_flutter_platform_interface
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
with:
name: Auth0 Flutter
flags: auth0_flutter_platform_interface
directory: coverage/auth0_flutter_platform_interface
- name: Upload coverage report for iOS
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
with:
name: Auth0 Flutter
flags: auth0_flutter_ios
directory: coverage/ios
- name: Upload coverage report for Android
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
with:
name: Auth0 Flutter
flags: auth0_flutter_android
directory: coverage/android