Skip to content

Update ktor monorepo to v3.0.3 #98

Update ktor monorepo to v3.0.3

Update ktor monorepo to v3.0.3 #98

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: 'zulu'
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120
XCODE_VERSION: '15.3'
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 with Gradle
run: ./gradlew assemble
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/
# TODO: Uncomment this once we have a proper build lane
# build-ios:
# needs: [common-test]
# runs-on: macos-latest
# steps:
# - name: Checkout project
# uses: actions/checkout@v4
# - name: Setup Xcode
# uses: maxim-lobanov/setup-xcode@v1
# with:
# xcode-version: ${{ env.XCODE_VERSION }}
# - name: Set up Ruby
# uses: ruby/setup-ruby@v1
# with:
# ruby-version: 3.3.0
# 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: Install dependencies with Bundler
# run: bundle install
# - name: Build iOS App
# run: bundle exec fastlane build_tvmaniac
# - name: Clear Derived Data
# run: bundle exec fastlane clear_derived_data_lane
# - name: Upload test results
# uses: actions/upload-artifact@v4
# if: failure()
# with:
# name: test-results
# path: fastlane/test_output
ios-ui-test:
needs: [common-test]
runs-on: macos-latest
steps:
- name: Checkout project
uses: actions/checkout@v4
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3.0
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: Install dependencies with Bundler
run: bundle install
- name: Run UI Tests
run: bundle exec fastlane ui_tests
- name: Upload test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: test-results
path: fastlane/test_output
create-release:
needs: [build-android, android-lint, android-screenshot-test, common-test, ios-ui-test, spotless, dependency-health, jvm-test]
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: ${{ env.JDK_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
- name: Create release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
files: android/app/build/outputs/apk/dev/debug/app-dev-debug.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload build outputs (APKs)
uses: actions/upload-artifact@v4
with:
name: build-outputs
path: android/app/build/outputs