Merge pull request #331 from thomaskioko/renovate/compose #866
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: 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 | |
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 | |
uses: gradle/[email protected] | |
- 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: Lint Project | |
run: ./gradlew lint | |
- name: Upload Lint Report | |
uses: actions/upload-artifact@v4 | |
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: Run Spotless | |
run: ./gradlew spotlessCheck | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: spotless-report | |
path: ./**/build/reports/spotless/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: Dependency Health | |
run: ./gradlew buildHealth | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: dependency-health-report | |
path: ./**/build/reports/tests/ | |
android_screenshot_test: | |
runs-on: macos-latest | |
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: Roborazzi screenshot tests | |
id: screenshotsverify | |
continue-on-error: true | |
run: ./gradlew clean verifyRoborazziDevDebug | |
- 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 | |
# Runs if previous job failed | |
- 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: Jvm Test | |
run: ./gradlew jvmTest | |
- uses: actions/upload-artifact@v4 | |
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: 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 | |
with: | |
name: common-test-report | |
path: ./**/build/reports/tests/ | |
build-ios: | |
runs-on: macos-latest | |
timeout-minutes: 180 | |
steps: | |
- name: Checkout project | |
uses: actions/checkout@v4 | |
- name: Setup Xcode | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: 16.0 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: 3.3.0 | |
bundler-cache: true | |
- 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: 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, build-ios, spotless, 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: 21 | |
distribution: 'zulu' | |
- 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 |