Skip to content

Fix iOS Snapshot Tests. #203

Fix iOS Snapshot Tests.

Fix iOS Snapshot Tests. #203

Workflow file for this run

name: Android and iOS CI Pipeline
on:
push:
branches: [ main ]
pull_request:
types: [ opened, synchronize ]
concurrency:
group: ci-${{ github.ref }}-${{ github.head_ref }}
cancel-in-progress: true
env:
JDK_VERSION: 21
DISTRIBUTION: 'temurin'
XCODE_VERSION: latest-stable
GRADLE_CACHE_PATH: |
~/.gradle/caches
~/.gradle/wrapper
SPM_CACHE_PATH: |
~/Library/Caches/org.swift.swiftpm
~/Library/Developer/Xcode/DerivedData
jobs:
build-android:
runs-on: ubuntu-latest
env:
TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }}
TMDB_API_URL: ${{ secrets.TMDB_API_URL }}
TRAKT_CLIENT_ID: ${{ secrets.TRAKT_CLIENT_ID }}
TRAKT_CLIENT_SECRET: ${{ secrets.TRAKT_CLIENT_SECRET }}
TRAKT_REDIRECT_URI: ${{ secrets.TRAKT_REDIRECT_URI }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: 🚚 Checkout Code
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: πŸ“ Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: 🐘 Setup Gradle 8.8
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: 8.11
- name: Add App Secrets
run: |
echo "TMDB_API_KEY=$TMDB_API_KEY" >> ./local.properties
echo "TMDB_API_URL=$TMDB_API_URL" >> ./local.properties
echo "TRAKT_CLIENT_ID=$TRAKT_CLIENT_ID" >> ./local.properties
echo "TRAKT_CLIENT_SECRET=$TRAKT_CLIENT_SECRET" >> ./local.properties
echo "TRAKT_REDIRECT_URI=$TRAKT_REDIRECT_URI" >> ./local.properties
- name: πŸ€– Build Android App
run: |
./gradlew check \
:android:app:assemble \
:android:app:bundle \
-x assembleNonMinifiedRelease \
-x bundleNonMinifiedRelease \
-Pandroidx.baselineprofile.skipgeneration=true \
--no-configuration-cache
android-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Lint Project
run: ./gradlew lint
- name: Upload Lint Report
uses: actions/upload-artifact@v4
if: always()
with:
name: android-lint-report
path: app/build/reports/lint-results*.html
spotless:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run Spotless
run: ./gradlew spotlessCheck
- name: Upload Spotless Report
uses: actions/upload-artifact@v4
if: always()
with:
name: spotless-report
path: |
**/build/reports/spotless
app/build/reports/spotless
dependency-health:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Dependency Health
run: ./gradlew buildHealth
- name: Upload Dependency Report
uses: actions/upload-artifact@v4
if: always()
with:
name: dependency-health-report
path: ./**/build/reports/tests/
android-screenshot-test:
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Roborazzi screenshot tests
id: screenshotsverify
continue-on-error: true
run: ./gradlew clean verifyRoborazziDebug
- name: Generate Roborazzi screenshot Report
id: screenshots-report
continue-on-error: true
run: ./gradlew compareRoborazziDebug
- name: Prevent pushing new screenshots if this is a fork
id: checkfork_screenshots
continue-on-error: false
if: steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository
run: |
echo "::error::Screenshot tests failed, please create a PR in your fork first." && exit 1
- name: Generate new screenshots if verification failed and it's a PR
id: screenshotsrecord
if: steps.screenshotsverify.outcome == 'failure' && github.event_name == 'pull_request'
run: |
./gradlew recordRoborazziDebug
- name: Push new screenshots if available
uses: stefanzweifel/git-auto-commit-action@v5
if: steps.screenshotsrecord.outcome == 'success'
with:
file_pattern: '*/*.png'
disable_globbing: true
commit_message: "πŸ€– Beep Beep: Update screenshots πŸ€–"
- name: Upload screenshot results
if: always()
uses: actions/upload-artifact@v4
with:
name: screenshot-test-results
path: '**/build/outputs/roborazzi/*_compare.png'
jvm-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run JVM Tests
run: ./gradlew jvmTest
- name: Upload Test Report
uses: actions/upload-artifact@v4
if: always()
with:
name: jvm-test-report
path: ./**/build/reports/tests/
common-test:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: ${{ env.DISTRIBUTION }}
java-version: ${{ env.JDK_VERSION }}
- name: Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run Common iOS Unit Tests
run: |
if [[ $(uname -m) == 'arm64' ]]; then
./gradlew clean iosSimulatorArm64Test
else
./gradlew clean iosX64Test
fi
- name: Upload Common Test Report
uses: actions/upload-artifact@v4
if: always()
with:
name: common-test-report
path: ./**/build/reports/tests/
build-ios:
runs-on: macos-14
timeout-minutes: 60
env:
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 60
steps:
- name: 🚚 Checkout project
uses: actions/checkout@v4
- name: πŸ“€ Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}
- name: πŸ’Ž Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Cache SPM dependencies
uses: actions/cache@v4
with:
path: ${{ env.SPM_CACHE_PATH }}
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- name: πŸ“¦ Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: 🧹 Clear Derived Data
run: bundle exec fastlane clear_derived_data_lane
- name: πŸ“¦ Install dependencies with Bundler
run: bundle install
- name: 🧱 Build iOS App
run: bundle exec fastlane build_tvmaniac
- name: Upload build artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: ios-build
path: |
build/
fastlane/logs
ios-snapshot-test:
runs-on: macos-14
timeout-minutes: 60
env:
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 60
steps:
- name: 🚚 Checkout project
uses: actions/checkout@v4
- name: πŸ“€ Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}
- name: πŸ“± List Available Simulators
run: xcrun simctl list devices
- name: πŸ’Ž Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: brew install swiftlint
- name: Cache SPM dependencies
uses: actions/cache@v4
with:
path: ${{ env.SPM_CACHE_PATH }}
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- name: πŸ“¦ Setup Gradle Cache
uses: actions/cache@v4
with:
path: ${{ env.GRADLE_CACHE_PATH }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Install dependencies with Bundler
run: bundle install
- name: πŸ“Έ Run Snapshot Tests
run: bundle exec fastlane snapshot_tests
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: snapshot-test-results
path: |
fastlane/test_output
fastlane/logs
derived_data/Logs/Test