diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4795da37..fc7e2d61c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,7 @@ env: jobs: build-android: + needs: android-screenshot-test runs-on: ubuntu-latest env: TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} @@ -73,12 +74,19 @@ jobs: -Pandroidx.baselineprofile.skipgeneration=true \ --no-configuration-cache - - android-lint: + android-screenshot-test: runs-on: ubuntu-latest + timeout-minutes: 45 + permissions: + contents: write + pull-requests: write + steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 with: distribution: ${{ env.DISTRIBUTION }} java-version: ${{ env.JDK_VERSION }} @@ -91,17 +99,47 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Lint Project - run: ./gradlew lint + - name: Install Dependencies + run: ./gradlew dependencies - - name: Upload Lint Report + - 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 + 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: ${{ !cancelled() }} uses: actions/upload-artifact@v4 - if: always() with: - name: android-lint-report - path: app/build/reports/lint-results*.html + name: screenshot-test-results + path: '**/build/outputs/roborazzi/*_compare.png' - spotless: + android-lint: + needs: android-screenshot-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -118,20 +156,17 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Run Spotless - run: ./gradlew spotlessCheck + - name: Lint Project + run: ./gradlew :android:app:lintRelease - - name: Upload Spotless Report + - name: Upload Lint Report + if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 - if: always() with: - name: spotless-report - path: | - **/build/reports/spotless - app/build/reports/spotless - + name: android-lint-report + path: '**/build/reports/lint-results-*.html' - dependency-health: + spotless: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -148,29 +183,14 @@ jobs: 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/ + - name: Run Spotless + run: ./gradlew spotlessCheck --no-configuration-cache - android-screenshot-test: + dependency-health: 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 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: ${{ env.DISTRIBUTION }} java-version: ${{ env.JDK_VERSION }} @@ -183,43 +203,15 @@ jobs: 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: Dependency Health + run: ./gradlew buildHealth - - name: Upload screenshot results - if: always() + - name: Upload Dependency health Report uses: actions/upload-artifact@v4 + if: always() with: - name: screenshot-test-results - path: '**/build/outputs/roborazzi/*_compare.png' + name: dependency-health-report + path: '**/build/reports/dependency-analysis/build-health-report.txt' jvm-test: runs-on: ubuntu-latest @@ -241,12 +233,12 @@ jobs: - name: Run JVM Tests run: ./gradlew jvmTest - - name: Upload Test Report + - name: Upload Test Reports uses: actions/upload-artifact@v4 if: always() with: - name: jvm-test-report - path: ./**/build/reports/tests/ + name: test-report + path: '**/build/reports/*' common-test: runs-on: macos-latest @@ -282,7 +274,7 @@ jobs: if: always() with: name: common-test-report - path: ./**/build/reports/tests/ + path: '**/build/reports/*' build-ios: runs-on: macos-15 diff --git a/README.md b/README.md index 4f533a19e..d94aa5fcc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ TvManiac ![kmp](https://img.shields.io/badge/multiplatform-%237F52FF.svg?style=for-the-badge&logo=kotlin&logoColor=white) ![compose](https://img.shields.io/badge/jetpack_compose-2bab6b.svg?style=for-the-badge&logo=android&logoColor=white) ![swiftui](https://img.shields.io/badge/swiftui-%23000000.svg?style=for-the-badge&logo=swift&logoColor=white) -[![TvManiac Debug](https://img.shields.io/badge/Debug--Apk-download-green?style=for-the-badge&logo=android)](https://github.com/c0de-wizard/tv-maniac/releases/latest/download/app-debug.apk) **TvManiac** is a personalized entertainment tracking and recommendation Multiplatform app. By utilizing [TMDB](https://developer.themoviedb.org/docs), we can view shows, create a watchlist get statistics, and much more. This project aims to demonstrate KMP development capabilities. This is currently running on: @@ -17,7 +16,7 @@ This is my playground for learning Kotlin Multiplatform. With that said, I'm sur | Android | iOS | | -- | -- | -|