From 09787c71f51d00f4d4acaf2740735e97d0a03abc Mon Sep 17 00:00:00 2001 From: Ryan Harg <3821-ryan_harg@users.noreply.dev.funkwhale.audio> Date: Wed, 4 Aug 2021 08:41:42 +0000 Subject: [PATCH] Update Android Gradle Plugin to 7.0.0 --- .gitlab-ci.yml | 8 +- .sdkmanrc | 2 +- app/build.gradle.kts | 101 ++++++------------ .../java/audio/funkwhale/ffa/utils/OAuth.kt | 2 - .../ffa/playback/OAuthDatasourceTest.kt | 2 +- .../funkwhale/ffa/utils/DefaultOAuthTest.kt | 3 - build.gradle.kts | 9 +- buildSrc/.gitignore | 1 + buildSrc/build.gradle.kts | 7 ++ buildSrc/src/main/java/Constants.kt | 17 +++ 10 files changed, 69 insertions(+), 83 deletions(-) create mode 100644 buildSrc/.gitignore create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/java/Constants.kt diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 51dd459..15dd382 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ image: jangrewe/gitlab-ci-android variables: - JACOCO_CSV_LOCATION: '$CI_PROJECT_DIR/app/build/reports/jacoco/testDebugUnitTestCoverage/testDebugUnitTestCoverage.csv' + JACOCO_CSV_LOCATION: '$CI_PROJECT_DIR/app/build/reports/jacoco/debug/jacoco.csv' stages: - test @@ -33,20 +33,20 @@ test: extends: .gradle-default stage: test script: - - ./gradlew test testDebugUnitTestCoverage + - ./gradlew test jacocoTestReportDebug - awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", instructions, " instructions covered"; print 100*covered/instructions, "% covered" }' $JACOCO_CSV_LOCATION artifacts: reports: junit: app/build/test-results/test**/TEST-*.xml paths: - - app/build/reports/jacoco/testDebugUnitTestCoverage/testDebugUnitTestCoverage.xml + - app/build/reports/jacoco/debug/jacoco.xml coverage: stage: visualize image: gjrtimmer/jacoco2cobertura:1.0.8 script: # convert report from jacoco to cobertura, use relative project path - - 'python /opt/cover2cover.py app/build/reports/jacoco/testDebugUnitTestCoverage/testDebugUnitTestCoverage.xml $CI_PROJECT_DIR/app/src/main/java > app/build/reports/cobertura.xml' + - 'python /opt/cover2cover.py app/build/reports/jacoco/debug/jacoco.xml $CI_PROJECT_DIR/app/src/main/java > app/build/reports/cobertura.xml' needs: [ "test" ] dependencies: - test diff --git a/.sdkmanrc b/.sdkmanrc index 4db8676..0262a26 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=8.0.292.hs-adpt +java=11.0.11.hs-adpt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b666b00..bb22f80 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,6 +11,11 @@ plugins { id("com.github.triplet.play") version "2.4.2" id("de.mobilej.unmock") jacoco + id("com.vanniktech.android.junit.jacoco") +} + +junitJacoco { + jacocoVersion = Versions.jacoco } val props = Properties().apply { @@ -22,12 +27,6 @@ val props = Properties().apply { unMock { keep = listOf("android.net.Uri") - //keepStartingWith("org.") - //keepStartingWith("libcore.") -} - -jacoco { - toolVersion = "0.8.7" } androidGitVersion { @@ -88,7 +87,12 @@ android { } testOptions { - unitTests.isReturnDefaultValues = true + execution = "ANDROID_TEST_ORCHESTRATOR" + animationsDisabled = true + unitTests { + isReturnDefaultValues = true + isIncludeAndroidResources = true + } } buildTypes { @@ -100,8 +104,6 @@ android { signingConfig = signingConfigs.getByName("debug") } - isTestCoverageEnabled = true - resValue("string", "debug.hostname", props.getProperty("debug.hostname", "")) resValue("string", "debug.username", props.getProperty("debug.username", "")) resValue("string", "debug.password", props.getProperty("debug.password", "")) @@ -146,11 +148,11 @@ play { dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) - implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.21") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1") - implementation("androidx.appcompat:appcompat:1.3.0") + implementation("androidx.appcompat:appcompat:1.3.1") implementation("androidx.core:core-ktx:1.6.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-alpha02") implementation("androidx.coordinatorlayout:coordinatorlayout:1.1.0") @@ -160,78 +162,39 @@ dependencies { implementation("com.google.android.material:material:1.4.0") implementation("com.android.support.constraint:constraint-layout:2.0.4") - implementation("com.google.android.exoplayer:exoplayer-core:2.11.8") - implementation("com.google.android.exoplayer:exoplayer-ui:2.11.8") - implementation("com.google.android.exoplayer:extension-mediasession:2.11.8") - implementation("com.github.PaulWoitaschek.ExoPlayer-Extensions:extension-opus:2.11.4") { + implementation("com.google.android.exoplayer:exoplayer-core:${Versions.exoPlayer}") + implementation("com.google.android.exoplayer:exoplayer-ui:${Versions.exoPlayer}") + implementation("com.google.android.exoplayer:extension-mediasession:${Versions.exoPlayer}") + implementation("com.github.PaulWoitaschek.ExoPlayer-Extensions:extension-opus:${Versions.exoPlayerExtensions}") { isTransitive = false } - implementation("com.github.PaulWoitaschek.ExoPlayer-Extensions:extension-flac:2.11.4") { + implementation("com.github.PaulWoitaschek.ExoPlayer-Extensions:extension-flac:${Versions.exoPlayerExtensions}") { isTransitive = false } - implementation("com.aliassadi:power-preference-lib:2.0.0") - implementation("com.github.kittinunf.fuel:fuel:2.3.1") - implementation("com.github.kittinunf.fuel:fuel-coroutines:2.3.1") - implementation("com.github.kittinunf.fuel:fuel-android:2.3.1") - implementation("com.github.kittinunf.fuel:fuel-gson:2.3.1") - implementation("com.google.code.gson:gson:2.8.7") + implementation("com.aliassadi:power-preference-lib:${Versions.powerPreference}") + implementation("com.github.kittinunf.fuel:fuel:${Versions.fuel}") + implementation("com.github.kittinunf.fuel:fuel-coroutines:${Versions.fuel}") + implementation("com.github.kittinunf.fuel:fuel-android:${Versions.fuel}") + implementation("com.github.kittinunf.fuel:fuel-gson:${Versions.fuel}") + implementation("com.google.code.gson:gson:${Versions.gson}") implementation("com.squareup.picasso:picasso:2.71828") implementation("jp.wasabeef:picasso-transformations:2.4.0") - implementation("net.openid:appauth:0.9.1") + implementation("net.openid:appauth:${Versions.openIdAppAuth}") testImplementation("junit:junit:4.13.2") testImplementation("io.mockk:mockk:1.12.0") - androidTestImplementation("io.mockk:mockk-android:1.12.0") + androidTestImplementation("io.mockk:mockk-android:${Versions.mockk}") testImplementation("androidx.test:core:1.4.0") - testImplementation("io.strikt:strikt-core:0.31.0") + testImplementation("io.strikt:strikt-core:${Versions.strikt}") } project.afterEvaluate { - android.applicationVariants.forEach { variant -> - val testTaskName = "test${variant.name.capitalize()}UnitTest" - tasks.create(name = "${testTaskName}Coverage") { - dependsOn(testTaskName) - - group = "Reporting" - description = "Generate Jacoco coverage reports after running tests." - - reports { - xml.required.set(true) - csv.required.set(true) - html.required.set(true) - } - - val excludes = listOf( - "**/R.class", - "**/R$*.class", - "**/BuildConfig.*", - "**/Manifest*.*", - "**/*Test*.*", - "android/**/*.*" - ) - - val javaClasses = - fileTree(baseDir = variant.javaCompileProvider.get().destinationDirectory).matching { - setExcludes(excludes) - } - val kotlinClasses = - fileTree(baseDir = "$buildDir/tmp/kotlin-classes/${variant.name}").matching { - setExcludes(excludes) - } - classDirectories.setFrom(files(listOf(javaClasses, kotlinClasses))) - - val sourceDirectories = files( - listOf( - "$project.projectDir/src/main/java", - "$project.projectDir/src/${variant.name}/java", - "$project.projectDir/src/main/kotlin", - "$project.projectDir/src/${variant.name}/kotlin" - ) - ) - - sourceDirectories.setFrom(files(sourceDirectories)) - executionData.setFrom(files("${project.buildDir}/jacoco/$testTaskName.exec")) + tasks.withType { + reports { + xml.required.set(true) + csv.required.set(true) + html.required.set(true) } } } diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt index 2ff960b..c555c71 100644 --- a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt +++ b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt @@ -252,5 +252,3 @@ class DefaultOAuth(private val authorizationServiceFactory: AuthorizationService } } } - - diff --git a/app/src/test/java/audio/funkwhale/ffa/playback/OAuthDatasourceTest.kt b/app/src/test/java/audio/funkwhale/ffa/playback/OAuthDatasourceTest.kt index 76ffccf..4a01e76 100644 --- a/app/src/test/java/audio/funkwhale/ffa/playback/OAuthDatasourceTest.kt +++ b/app/src/test/java/audio/funkwhale/ffa/playback/OAuthDatasourceTest.kt @@ -34,7 +34,7 @@ class OAuthDatasourceTest { private var dataSpec: DataSpec = DataSpec(Uri.EMPTY) @Before - fun setup(){ + fun setup() { MockKAnnotations.init(this, relaxUnitFun = true) } diff --git a/app/src/test/java/audio/funkwhale/ffa/utils/DefaultOAuthTest.kt b/app/src/test/java/audio/funkwhale/ffa/utils/DefaultOAuthTest.kt index 87a5bff..52a117a 100644 --- a/app/src/test/java/audio/funkwhale/ffa/utils/DefaultOAuthTest.kt +++ b/app/src/test/java/audio/funkwhale/ffa/utils/DefaultOAuthTest.kt @@ -33,7 +33,6 @@ import strikt.assertions.isNotNull import strikt.assertions.isNull import strikt.assertions.isTrue - class DefaultOAuthTest { @InjectMockKs @@ -293,6 +292,4 @@ class DefaultOAuthTest { object : TypeToken() {}.type ) } - } - diff --git a/build.gradle.kts b/build.gradle.kts index 0e1ca98..cdc8d50 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ buildscript { + repositories { google() mavenCentral() @@ -6,13 +7,15 @@ buildscript { } dependencies { - classpath("com.android.tools.build:gradle:4.2.2") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21") - classpath("com.github.bjoernq:unmockplugin:0.7.8") + classpath("com.android.tools.build:gradle:${Versions.androidGradlePlugin}") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}") + classpath("com.github.bjoernq:unmockplugin:${Versions.unmock}") + classpath("com.vanniktech:gradle-android-junit-jacoco-plugin:${Versions.gradleAndroidJUnitJacocoPlugin}") } } allprojects { + repositories { google() maven(url = "https://jitpack.io") diff --git a/buildSrc/.gitignore b/buildSrc/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/buildSrc/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..72e4229 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` +} + +repositories { + jcenter() +} diff --git a/buildSrc/src/main/java/Constants.kt b/buildSrc/src/main/java/Constants.kt new file mode 100644 index 0000000..fa2032b --- /dev/null +++ b/buildSrc/src/main/java/Constants.kt @@ -0,0 +1,17 @@ +object Versions { + const val kotlin = "1.5.21" + const val jacoco = "0.8.7" + const val unmock = "0.7.8" + const val androidGradlePlugin = "7.0.0" + const val gradleAndroidJUnitJacocoPlugin = "0.16.0" + + const val exoPlayer = "2.11.8" + const val exoPlayerExtensions = "2.11.4" + const val fuel = "2.3.1" + const val gson = "2.8.7" + const val powerPreference = "2.0.0" + const val openIdAppAuth = "0.9.1" + + const val mockk = "1.12.0" + const val strikt = "0.31.0" +}