Enable explicit API mode and add Binary Compatibility Validator #342
This file contains hidden or 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: 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 |