diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d8cf62e66..b95d63910 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,7 +1,6 @@ name: Android CI -on: - push +on: [push, pull_request] jobs: build: @@ -14,4 +13,6 @@ jobs: with: java-version: 1.8 - name: Build with Gradle - run: ./gradlew -Pcoverage jacocoTestBetaDebugUnitTestReport \ No newline at end of file + run: ./gradlew -Pcoverage testBetaDebugUnitTestCoverage + - name: Upload Test Report + run: bash <(curl -s https://codecov.io/bash) -f "app/build/reports/jacoco/testBetaDebugUnitTestCoverage/testBetaDebugUnitTestCoverage.xml" \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 3e86a578d..73185141d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ android: licenses: - android-sdk-license-.+ script: -- "./gradlew -Pcoverage jacocoTestBetaDebugUnitTestReport" +- "./gradlew -Pcoverage testBetaDebugUnitTestCoverage" - if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then mkdir -p app/src/prodRelease/play/release-notes/en-US; fi diff --git a/README.md b/README.md index 3e5774873..3771db667 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Wikimedia Commons Android app [![Build status](https://api.travis-ci.org/commons-app/apps-android-commons.svg?branch=master)](https://travis-ci.org/commons-app/apps-android-commons) +[![Build status](https://github.com/commons-app/apps-android-commons/actions/workflows/android.yml/badge.svg?branch=master)](https://github.com/commons-app/apps-android-commons/actions?query=branch%3Amaster) [![Preview the app](https://img.shields.io/badge/Preview-Appetize.io-orange.svg)](https://appetize.io/app/8ywtpe9f8tb8h6bey11c92vkcw) +[![codecov](https://codecov.io/gh/commons-app/apps-android-commons/branch/master/graph/badge.svg)](https://codecov.io/gh/commons-app/apps-android-commons) The Wikimedia Commons Android app allows users to upload pictures from their Android phone/tablet to Wikimedia Commons. Download the app [here][1], or view our [website][2]. diff --git a/app/build.gradle b/app/build.gradle index b7e829925..eb4d11c24 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' -apply plugin: "com.hiya.jacoco-android" +apply from: "$rootDir/jacoco.gradle" def isRunningOnTravisAndIsNotPRBuild = System.getenv("CI") == "true" && file('../play.p12').exists() diff --git a/build.gradle b/build.gradle index 64d05c987..25bb5ee0d 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,6 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.0.1' - classpath "com.hiya:jacoco-android:0.2" classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION" classpath 'org.codehaus.groovy:groovy-all:2.4.15' diff --git a/jacoco.gradle b/jacoco.gradle new file mode 100644 index 000000000..a7cef0a78 --- /dev/null +++ b/jacoco.gradle @@ -0,0 +1,61 @@ +apply plugin: 'jacoco' + +jacoco { + toolVersion = "0.8.7" +} + +android { + testOptions { + unitTests.all { + jacoco { + includeNoLocationClasses = true + } + } + } +} + +project.afterEvaluate { + + android.applicationVariants.all { variant -> + def name = variant.name + def testTaskName = "test${name.capitalize()}UnitTest" + + tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") { + group = "Reporting" + description = "Generate Jacoco coverage reports for the ${name.capitalize()} build." + + def fileFilter = ['**/R.class', + '**/R$*.class', + '**/*$ViewInjector*.*', + '**/*$ViewBinder*.*', + '**/BuildConfig.*', + '**/Manifest*.*', + '**/*Test*.*', + 'android/**/*.*'] + + //java compiled classes + def javaTree = fileTree( + dir: "${buildDir}/intermediates/classes/${name}", + excludes: fileFilter + ) + //kotlin compiled classes + def kotlinTree = fileTree( + dir: "${buildDir}/tmp/kotlin-classes/${name}", + excludes: fileFilter + ) + def mainSrc = "${project.projectDir}/src/main/java" + + sourceDirectories.setFrom(files([mainSrc])) + classDirectories.setFrom(files([javaTree, kotlinTree])) + executionData.setFrom(fileTree(dir: "${buildDir}", includes: [ + "jacoco/${testTaskName}.exec", + "outputs/code-coverage/connected/*coverage.ec" + ])) + + reports { + xml.enabled = true + html.enabled = true + } + } + } +} \ No newline at end of file