From ab09eb8a03b38fce5b9ff22e91322e480bde8831 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 17:04:04 -0400 Subject: [PATCH] Update CI build script --- build.gradle | 1 + build.sh | 14 ++++++---- tools/coverage-badge/badge.py | 11 +++++--- uhabits-android/build.gradle | 49 ++++++++++++++++++++++++++++++++--- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 6b38608fc..9cc9777e4 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath 'org.jacoco:org.jacoco.core:+' } } diff --git a/build.sh b/build.sh index 152104e7d..1059e375a 100755 --- a/build.sh +++ b/build.sh @@ -157,8 +157,12 @@ parse_instrumentation_results() { } generate_coverage_badge() { - log_info "Generating code coverage badge" - python tools/coverage-badge/badge.py -i uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge + log_info "Generating code coverage report and badge" + $GRADLE coverageReport || fail + + ANDROID_REPORT=uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml + CORE_REPORT=uhabits-core/build/reports/jacoco/test/jacocoTestReport.xml + python tools/coverage-badge/badge.py -i $ANDROID_REPORT:$CORE_REPORT -o ${OUTPUTS_DIR}/coverage-badge } fetch_artifacts() { @@ -180,7 +184,7 @@ fetch_logcat() { run_jvm_tests() { log_info "Running JVM tests" - $GRADLE --no-daemon coverageReport || fail + $GRADLE testDebugUnitTest :uhabits-core:check || fail } uninstall_test_apk() { @@ -199,8 +203,8 @@ run_local_tests() { parse_instrumentation_results fetch_artifacts fetch_logcat - #run_jvm_tests - #generate_coverage_badge + run_jvm_tests + generate_coverage_badge uninstall_test_apk } diff --git a/tools/coverage-badge/badge.py b/tools/coverage-badge/badge.py index 3d64e3247..08d8733e7 100644 --- a/tools/coverage-badge/badge.py +++ b/tools/coverage-badge/badge.py @@ -44,10 +44,13 @@ class Devnull(object): def get_total(report): - doc = BeautifulSoup(file(report), 'xml') - tag = doc.select("report > counter[type^INST]")[0] - missed = float(tag['missed']) - covered = float(tag['covered']) + missed = 0 + covered = 0 + for r in report.split(":"): + doc = BeautifulSoup(file(r), 'xml') + tag = doc.select("report > counter[type^INST]")[0] + missed = missed + float(tag['missed']) + covered = covered + float(tag['covered']) return str(int(round(100 * covered / (missed + covered)))) def get_color(total): diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 0186097a7..79b59cd81 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -23,6 +23,9 @@ android { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } + debug { + testCoverageEnabled true + } } lintOptions { @@ -56,7 +59,7 @@ dependencies { implementation 'com.android.support:support-v4:25.3.1' implementation 'com.getpebble:pebblekit:3.0.0' implementation 'com.github.paolorotolo:appintro:3.4.0' - implementation 'com.google.dagger:dagger:2.11-rc2' + implementation 'com.google.dagger:dagger:2.9' implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' implementation 'org.apmem.tools:layouts:1.10' @@ -65,7 +68,7 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:3.0.2' compileOnly 'javax.annotation:jsr250-api:1.0' compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + annotationProcessor 'com.google.dagger:dagger-compiler:2.9' annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' @@ -75,16 +78,18 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.google.guava:guava:20.0' androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + testCompile 'com.google.dagger:dagger:2.9' testCompile "org.mockito:mockito-core:2.8.9" testCompile "org.mockito:mockito-inline:2.8.9" + androidTestCompile 'com.google.dagger:dagger:2.9' androidTestCompile "org.mockito:mockito-android:2.8.9" androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' @@ -95,6 +100,42 @@ dependencies { exclude group: 'org.json', module: 'json' } } + repositories { mavenCentral() } + +task coverageReport(type: JacocoReport) { + + jacocoClasspath = configurations['androidJacocoAnt'] + + reports { + html.enabled = true + xml.enabled = true + } + + def excludes = [ + '**/R.class', + '**/R$*.class', + '**/BuildConfig.*', + '**/Manifest*', + '**/*Test*.*', + '**/*$Lambda$*', + '**/*$ViewBinder*', + '**/*MembersInjector*', + '**/*_Provide*', + '**/*Module_*', + '**/com/android/**/*', + '**/*Dagger*', + '**/*_Factory*' + ] + + def androidSrc = "${project.projectDir}/src/main/java" + def androidClasses = "${buildDir}/intermediates/classes/debug" + def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec" + def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec" + + sourceDirectories = files(androidSrc) + classDirectories = files(fileTree(dir: androidClasses, excludes: excludes)) + executionData = files(jvmExecData, connectedExecData) +} \ No newline at end of file