Update androidx.* #5505
Workflow file for this run
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: 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 |