GitHub Actions
info
With visual regression testing, it is all about consistency. Please make sure that you use the same simulator across environments. Use the same emulator configuration to generate the baseline images and for running the test suite on CI so that the library can compare the screenshots. The library will not be able to compare different sizes and resolutions of screenshots.
iOS
To run the tests on an iOS simulator, you will need to use a macOS based runner.
.github/workflows/visual-regression-ios.yml
name: Visual Regression - iOS
on: [pull_request]
jobs:
  run-visual-regression-ios:
    runs-on: macos-11
    steps:
      - uses: actions/checkout@v2
      - name: Get Runner Information
        run: /usr/bin/xcodebuild -version
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache@v2
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Install Dependencies
        run: yarn install --frozen-lockfile
      - name: Install CocoaPods
        run: gem install cocoapods -v 1.11.0
      - uses: actions/cache@v2
        with:
          path: ./ios/Pods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-
      - name: Install CocoaPods
        run: pod install
        working-directory: ./ios
      - uses: futureware-tech/simulator-action@v1
        with:
          model: 'iPhone 13 Pro'
          os_version: '>=15.0'
      - name: Run Owl Build
        run: yarn owl:build:ios
      - name: Run Owl Test
        run: yarn owl:test:ios
      - name: Store screenshots and report as artifacts
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: owl-results
          path: ./.owl
Android
.github/workflows/visual-regression-android.yml
name: Visual Regression - Android
on: [pull_request]
jobs:
  run-visual-regression-android:
    runs-on: macos-11
    steps:
      - uses: actions/checkout@v2
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache@v2
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Install Dependencies
        run: yarn install --frozen-lockfile
      - uses: actions/cache@v2
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: SKDs - download required images
        run: $ANDROID_HOME/tools/bin/sdkmanager "system-images;android-30;default;x86_64"
      - name: SDKs - accept licenses
        run: y | $ANDROID_HOME/tools/bin/sdkmanager --licenses
      - name: Emulator - Create
        run: $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_30 --device 'Nexus 5X' --package "system-images;android-30;default;x86_64" --sdcard 512M
      - name: Emulator - Boot
        run: $ANDROID_HOME/emulator/emulator -memory 4096 -avd Pixel_API_30 -wipe-data -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim &
      - name: ADB Wait For Device
        run: adb wait-for-any-device
        timeout-minutes: 3
      - name: Run Owl Build
        run: yarn owl:build:android
      - name: Run Owl Test
        run: yarn owl:test:android
      - name: Store screenshots as artifacts
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: owl-screenshots
          path: ./.owl