Skip to content

Update androidx.* #5505

Update androidx.*

Update androidx.* #5505

Workflow file for this run

name: Pull Request
on: # yamllint disable-line rule:truthy
pull_request:
branches: [main]
# This workflow should cancel previous builds since it means that a new commit has been made to the PR
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
yamllint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Register yamllint problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/yamllint.json"
- name: Validate YAML
run: yamllint --strict --format github .
lockfiles:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Update lockfiles
run: ./gradlew alldependencies --write-locks
- name: Check for missing lockfiles update
run: |
if [[ $(git status --porcelain) ]]; then
echo $(git status --porcelain)
echo -e "\n❌ Uncommitted changes detected in the repository."
echo -e "🔍 It seems that the dependency lockfiles are outdated. Please update them by running:"
echo -e " ./gradlew alldependencies --write-locks"
echo -e " Then commit the updated lockfiles to your branch."
error_message="Dependency changes detected, but lockfiles are not updated. Run \`./gradlew alldependencies --write-locks\` and commit the changes."
echo "::error file=gradle/libs.versions.toml,line=1,title=⛔ Lockfile Update Required::${error_message}"
exit 1;
else
echo -e "\n✔️ All dependency lockfiles are up to date. No uncommitted changes detected."
fi
ktlint:
needs: [yamllint, lockfiles]
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
# Since `build-logic` is added with `includeBuild` we have to call ktlint explicitly on `:convention`.
- name: Validate ktlint
run: ./gradlew ktlintCheck :build-logic:convention:ktlintCheck --continue
- uses: ./.github/actions/upload-sarif-results
if: always()
with:
category: "KTlint"
lint:
needs: [yamllint, lockfiles]
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Validate Lint
run: ./gradlew lint --continue
- name: Upload lint reports (HTML)
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: lint-reports
path: "**/build/reports/lint-results-*.html"
- uses: ./.github/actions/upload-sarif-results
if: always()
with:
category: "Android Lint"
screenshot_test:
name: "Screenshot Tests"
needs: [lint, lockfiles, ktlint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Validate Screenshot Previews
run: ./gradlew validateDebugScreenshotTest validateFullDebugScreenshotTest
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: Screenshot test results
path: |
**/build/test-results/**/TEST-*.xml
pr_build:
needs: [yamllint, lockfiles]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for modified DB schemas on branch
run: |
if git diff --name-only --diff-filter=DMR origin/main... | grep "^common/schemas"; then
echo -e "\n❌ Existing database schema modified, please increase the database version instead"
exit 1
else
echo -e "\n✔️ No changed database schemas on branch"
fi
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Check version file creation
run: ./gradlew versionFile
- name: Build Debug APK
run: |
./gradlew :common:assemble :app:assembleDebug :wear:assembleDebug :automotive:assembleDebug
- name: Check for missing/modified DB schemas after build
run: |
if [[ $(git status common/schemas --porcelain) ]]; then
echo $(git status common/schemas --porcelain)
echo -e "\n❌ Found uncommitted changes in database schema directory, please make sure to include all changes in your commit(s)"
exit 1;
else
echo -e "\n✔️ No changes in database schema directory after build"
fi
- name: Archive Debug Build
uses: actions/upload-artifact@v4
with:
path: ./**/*.apk
unit_tests:
name: "Unit Tests"
needs: [lint, lockfiles, ktlint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Run test
# Run testFullDebugUnitTest at the app level since :automotive shares the same sourceSet than app. Minimal and Full are the same in unit tests for now
run: ./gradlew testDebugUnitTest :app:testFullDebugUnitTest :lint:test
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: Unit test results
path: |
**/build/test-results/**/TEST-*.xml
instrumentation_test:
name: "Instrumentation Tests"
needs: [lint, lockfiles, ktlint]
runs-on: ubuntu-latest
strategy:
# We want the result of each device to be reported, so we can't fail-fast
fail-fast: false
matrix:
configuration:
- api-level: 21
arch: x86_64
profile: "Nexus 5"
target: "google_apis"
gradle_target: ":app:connectedFullDebugAndroidTest :app:connectedMinimalDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: 30
arch: x86
profile: "tv_4k"
target: "android-tv"
gradle_target: ":app:connectedFullDebugAndroidTest :app:connectedMinimalDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: 35
arch: x86_64
profile: "pixel_7"
target: "google_apis"
gradle_target: ":app:connectedFullDebugAndroidTest :app:connectedMinimalDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: 33
arch: x86_64
profile: "automotive_1024p_landscape"
target: "android-automotive"
gradle_target: ":automotive:connectedFullDebugAndroidTest :automotive:connectedMinimalDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: "34"
system-image-api-level: "34-ext9"
arch: x86_64
profile: "automotive_1024p_landscape"
target: "android-automotive"
gradle_target: ":automotive:connectedFullDebugAndroidTest :automotive:connectedMinimalDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: 26
arch: x86
profile: "wearos_square"
target: "android-wear"
gradle_target: ":wear:connectedDebugAndroidTest :common:connectedDebugAndroidTest"
- api-level: 34
arch: x86_64
profile: "wearos_small_round"
target: "android-wear"
gradle_target: ":wear:connectedDebugAndroidTest :common:connectedDebugAndroidTest"
steps:
- name: Delete unnecessary tools 🔧
uses: jlumbroso/[email protected]
with:
android: false # Don't remove Android tools
tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY"
docker-images: false # Takes 16s, enable if needed in the future
large-packages: false # includes google-cloud-sdk and it's slow
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
mock-google-services: "true"
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
ls /dev/kvm
- name: AVD cache
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.configuration.target }}-${{ matrix.configuration.api-level }}
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.configuration.api-level }}
arch: ${{ matrix.configuration.arch }}
force-avd-creation: false
disable-animations: true
disk-size: 1G # We need to ensure that there is enough space for the emulator to run. If not we get 'Failed to commit install' errors.
heap-size: 1G
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
profile: ${{ matrix.configuration.profile }}
target: ${{ matrix.configuration.target }}
system-image-api-level: ${{ matrix.configuration.system-image-api-level }}
script: |
echo "Generated AVD snapshot for caching."
- name: Build projects and run instrumentation tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.configuration.api-level }}
arch: ${{ matrix.configuration.arch }}
force-avd-creation: false
disable-animations: true
disk-size: 1G
heap-size: 1G
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
profile: ${{ matrix.configuration.profile }}
target: ${{ matrix.configuration.target }}
system-image-api-level: ${{ matrix.configuration.system-image-api-level }}
script: ./gradlew ${{ matrix.configuration.gradle_target }}
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: Instrumentation test results (API${{ matrix.configuration.api-level }}) ${{ matrix.configuration.target }}
path: |
**/build/reports/*
**/build/outputs/*/connected/*
publish_test_results:
name: "Publish Tests Results"
needs: [instrumentation_test, unit_tests, screenshot_test]
runs-on: ubuntu-latest
permissions:
checks: write
pull-requests: write
if: always()
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
- name: Publish Test Results EnricoMi
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
comment_mode: "failures"
# We want to fail the build to block the merge if any test fail it allows us simplify the setup of the protected branch.
action_fail: true
files: |
**/androidTest-results/**/TEST-*.xml
**/build/test-results/**/TEST-*.xml