Skip to content

Enable explicit API mode and add Binary Compatibility Validator #342

Enable explicit API mode and add Binary Compatibility Validator

Enable explicit API mode and add Binary Compatibility Validator #342

Workflow file for this run

name: Quality
on:
merge_group:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
android-lint:
name: Android Lint
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run Android Lint
run: ./gradlew lintDebug
- name: Upload Android Lint results
uses: github/codeql-action/upload-sarif@v3
if: success() || failure()
with:
sarif_file: demo/build/reports/lint-results-debug.sarif
category: android-lint
detekt:
name: Detekt
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run Detekt
run: ./gradlew detektDebug
- name: Upload Detekt results
uses: github/codeql-action/upload-sarif@v3
if: success() || failure()
with:
sarif_file: demo/build/reports/detekt/debug.sarif
category: detekt
unit-test:
name: Unit Tests
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run Unit Tests
run: ./gradlew koverXmlReportDebug
- name: Report Code Coverage
if: ${{ github.event_name == 'pull_request' }}
uses: madrapps/[email protected]
with:
paths: ${{ github.workspace }}/**/build/reports/kover/reportDebug.xml
token: ${{ secrets.GITHUB_TOKEN }}
min-coverage-overall: 0
min-coverage-changed-files: 0
update-comment: true
comment-type: both
title: Code Coverage
pass-emoji: 🟢
fail-emoji: 🔴
screenshot-test:
name: Screenshot Tests
runs-on: ubuntu-latest
permissions:
contents: write
env:
WORKFLOW_PAT: ${{ secrets.WORKFLOW_PAT }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ env.WORKFLOW_PAT }}
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run Screenshot Tests
id: validate_screenshots
continue-on-error: true
run: ./gradlew validateDebugScreenshotTest
- name: Generate new screenshots
id: update_screenshots
if: env.WORKFLOW_PAT != '' && steps.validate_screenshots.outcome == 'failure' && github.event_name == 'pull_request'
run: ./gradlew updateDebugScreenshotTest
- name: Push new screenshots
if: steps.update_screenshots.outcome == 'success'
uses: stefanzweifel/git-auto-commit-action@v5
with:
file_pattern: '*/*.png'
disable_globbing: true
commit_message: "Update screenshots"
# If the WORKFLOW_PAT secret is not available (ie. from forks), the push above won't trigger a CI build.
# So instead, we ask the contributor to manually generate and push the new screenshots.
- name: Request screenshots to be updated
if: env.WORKFLOW_PAT == '' && steps.validate_screenshots.outcome == 'failure' && github.event_name == 'pull_request'
run: |
echo "::error ::Screenshots are outdated. Run './gradlew updateDebugScreenshotTest' to update them and push the changes."
exit 1
publish-to-maven-local:
name: Publish to Maven local
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Publish to Maven local
run: ./gradlew publishToMavenLocal
generate-documentation:
name: Generate documentation
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Generate documentation
run: ./gradlew :dokkaGenerate
analyse-dependencies:
name: Analyse Dependencies
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Analyse Dependencies
id: analyse_dependencies
continue-on-error: true
run: ./gradlew :buildHealth
- name: Comment Analysis Report
if: ${{ github.event_name == 'pull_request' }}
uses: marocchino/sticky-pull-request-comment@v2
with:
path: build/reports/dependency-analysis/build-health-report.txt
delete: ${{ steps.analyse_dependencies.outcome == 'success' }}
- name: Dependency Analysis failed
if: ${{ steps.analyse_dependencies.outcome == 'failure' }}
run: |
echo "::error ::Dependency Analysis failed."
exit 1
binary-compatibility-validator:
name: Binary Compatibility Validator
runs-on: ubuntu-latest
permissions:
contents: write
env:
WORKFLOW_PAT: ${{ secrets.WORKFLOW_PAT }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ env.WORKFLOW_PAT }}
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version-file: .github/workflows/.java-version
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run API check
id: api_check
continue-on-error: true
run: ./gradlew apiCheck
- name: Update API dumps
id: update_api_dumps
if: env.WORKFLOW_PAT != '' && steps.api_check.outcome == 'failure' && github.event_name == 'pull_request'
run: ./gradlew apiDump
- name: Push new API dumps
if: steps.update_api_dumps.outcome == 'success'
uses: stefanzweifel/git-auto-commit-action@v5
with:
file_pattern: '*/*.api'
disable_globbing: true
commit_message: "Update API dumps"
# If the WORKFLOW_PAT secret is not available (ie. from forks), the push above won't trigger a CI build.
# So instead, we ask the contributor to manually update and push the new API dumps.
- name: Request API dumps to be updated
if: env.WORKFLOW_PAT == '' && steps.api_check.outcome == 'failure' && github.event_name == 'pull_request'
run: |
echo "::error ::API dumps are outdated. Run './gradlew apiDump' to update them and push the changes."
exit 1