diff --git a/.github/workflows/reusable-android-build.yml b/.github/workflows/reusable-android-build.yml index e15945a77..058366124 100644 --- a/.github/workflows/reusable-android-build.yml +++ b/.github/workflows/reusable-android-build.yml @@ -69,7 +69,7 @@ jobs: echo "datadogApplicationId=$DATADOG_APPLICATION_ID" >> ./secrets.properties echo "datadogClientToken=$DATADOG_CLIENT_TOKEN" >> ./secrets.properties - name: Run Spotless, Detekt, Build, Lint, and Local Tests - run: ./gradlew spotlessCheck detekt assembleDebug :app:testFdroidDebugUnitTest :app:testGoogleDebugUnitTest :core:analytics:testFdroidDebugUnitTest :core:analytics:testGoogleDebugUnitTest :core:data:testFdroidDebugUnitTest :core:data:testGoogleDebugUnitTest :core:database:testFdroidDebugUnitTest :core:database:testGoogleDebugUnitTest :core:datastore:testFdroidDebugUnitTest :core:datastore:testGoogleDebugUnitTest :core:di:testFdroidDebugUnitTest :core:di:testGoogleDebugUnitTest :core:model:testFdroidDebugUnitTest :core:model:testGoogleDebugUnitTest :core:navigation:testFdroidDebugUnitTest :core:navigation:testGoogleDebugUnitTest :core:network:testFdroidDebugUnitTest :core:network:testGoogleDebugUnitTest :core:prefs:testFdroidDebugUnitTest :core:prefs:testGoogleDebugUnitTest :core:proto:testFdroidDebugUnitTest :core:proto:testGoogleDebugUnitTest :core:service:testFdroidDebugUnitTest :core:service:testGoogleDebugUnitTest :core:ui:testFdroidDebugUnitTest :core:ui:testGoogleDebugUnitTest :feature:firmware:testFdroidDebugUnitTest :feature:firmware:testGoogleDebugUnitTest :feature:intro:testFdroidDebugUnitTest :feature:intro:testGoogleDebugUnitTest :feature:map:testFdroidDebugUnitTest :feature:map:testGoogleDebugUnitTest :feature:messaging:testFdroidDebugUnitTest :feature:messaging:testGoogleDebugUnitTest :feature:node:testFdroidDebugUnitTest :feature:node:testGoogleDebugUnitTest :feature:settings:testFdroidDebugUnitTest :feature:settings:testGoogleDebugUnitTest :mesh_service_example:testDebugUnitTest koverXmlReport --configuration-cache --scan + run: ./gradlew spotlessCheck detekt assembleDebug runAllDebugTests koverXmlReport --configuration-cache --scan env: VERSION_CODE: ${{ env.VERSION_CODE }} @@ -78,6 +78,8 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} slug: meshtastic/Meshtastic-Android + report_type: coverage + directory: . files: build/reports/kover/report.xml - name: Upload test results to Codecov @@ -86,6 +88,8 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} report_type: test_results + directory: . + files: "**/build/test-results/**/*.xml,**/build/outputs/androidTest-results/**/*.xml" - name: Upload F-Droid debug artifact if: ${{ inputs.upload_artifacts }} @@ -108,6 +112,6 @@ jobs: with: name: upload-reports path: | - app/build/reports - **/build/reports/detekt + build/reports + **/build/reports retention-days: 14 diff --git a/.github/workflows/reusable-android-test.yml b/.github/workflows/reusable-android-test.yml index 3fb655ddc..b9a2cec69 100644 --- a/.github/workflows/reusable-android-test.yml +++ b/.github/workflows/reusable-android-test.yml @@ -31,6 +31,7 @@ jobs: uses: actions/checkout@v6 with: submodules: 'recursive' + fetch-depth: 0 - name: Set up JDK 21 uses: actions/setup-java@v5 @@ -85,13 +86,14 @@ jobs: force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: ./gradlew :app:connectedFdroidDebugAndroidTest :app:connectedGoogleDebugAndroidTest :core:database:connectedFdroidDebugAndroidTest :core:database:connectedGoogleDebugAndroidTest :core:model:connectedFdroidDebugAndroidTest :core:model:connectedGoogleDebugAndroidTest :core:ui:connectedFdroidDebugAndroidTest :core:ui:connectedGoogleDebugAndroidTest :feature:messaging:connectedFdroidDebugAndroidTest :feature:messaging:connectedGoogleDebugAndroidTest :feature:settings:connectedFdroidDebugAndroidTest :feature:settings:connectedGoogleDebugAndroidTest koverXmlReport --configuration-cache --scan && ( killall -INT crashpad_handler || true ) + script: ./gradlew runAllConnectedDebugTests koverXmlReport --configuration-cache --scan && ( killall -INT crashpad_handler || true ) - name: Upload coverage reports to Codecov if: ${{ !cancelled() }} uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} + report_type: coverage slug: meshtastic/Meshtastic-Android files: build/reports/kover/report.xml @@ -101,6 +103,8 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} report_type: test_results + directory: . + files: "**/build/test-results/**/*.xml,**/build/outputs/androidTest-results/**/*.xml" - name: Upload Test Results if: ${{ always() && inputs.upload_artifacts }} diff --git a/build.gradle.kts b/build.gradle.kts index 9df788634..5d8008d04 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,3 +48,35 @@ plugins { dependencies { dokkaPlugin(libs.dokka.android.documentation.plugin) } + +val debugTests = listOf( + "testDebugUnitTest", + "testFdroidDebugUnitTest", + "testGoogleDebugUnitTest" +) + +tasks.register("runAllDebugTests") { + group = "verification" + description = "Runs all unit tests for debug variants and flavors" + dependsOn(subprojects.map { subproject -> + subproject.tasks.matching { task -> + task.name in debugTests + } + }) +} + +val connectedTests = listOf( + "connectedDebugAndroidTest", + "connectedFdroidDebugAndroidTest", + "connectedGoogleDebugAndroidTest" +) + +tasks.register("runAllConnectedDebugTests") { + group = "verification" + description = "Runs all connected tests for debug variants and flavors" + dependsOn(subprojects.map { subproject -> + subproject.tasks.matching { task -> + task.name in connectedTests + } + }) +} \ No newline at end of file