From 912a40eaeca5099e60f75d13c96106551687f3bf Mon Sep 17 00:00:00 2001 From: Zach Klippenstein Date: Fri, 10 Jul 2020 08:33:28 -0700 Subject: [PATCH] Start using the refreshVersions Gradle plugin to manage dependencies. https://github.com/jmfayard/refreshVersions This change migrates dependency versions to the versions.properties file, which will be resolved into actual dependency strings by the plugin. New versions can be checked for by running `./gradlew refreshVersions`. Note that **this commit does not change any version numbers**, it simply moves them to be defined in a different location. It also deletes some stale dependency definitions that weren't actually used. --- build.gradle.kts | 11 +- buildSrc/src/main/java/Dependencies.kt | 110 +++++++++--------- .../timemachine-shakeable/build.gradle.kts | 2 +- settings.gradle.kts | 9 ++ versions.properties | 54 +++++++++ 5 files changed, 125 insertions(+), 61 deletions(-) create mode 100644 versions.properties diff --git a/build.gradle.kts b/build.gradle.kts index de82119478..61e28d7062 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,14 +56,21 @@ subprojects { tasks.findByName("check") ?.dependsOn("detekt") + // Can't use the normal placeholder syntax to reference the reflect version, since that + // placeholder seems to only be evaluated if the module has a direct dependency on the library. + val kotlinReflectVersion = File(rootDir, "versions.properties") + .useLines { it.first { line -> "kotlin-reflect" in line } } + .split("=") + .last() + configurations.configureEach { // There could be transitive dependencies in tests with a lower version. This could cause // problems with a newer Kotlin version that we use. - resolutionStrategy.force(Dependencies.Kotlin.reflect) + resolutionStrategy.force("org.jetbrains.kotlin:kotlin-reflect:$kotlinReflectVersion") } } - tasks.withType() { + tasks.withType { kotlinOptions { // Allow warnings when running from IDE, makes it easier to experiment. if (!isRunningFromIde) { diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 1cfc1235b6..9c1271420a 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -4,52 +4,49 @@ import java.util.Locale.US import kotlin.reflect.full.declaredMembers object Versions { - const val coroutines = "1.3.7" - const val kotlin = "1.3.72" const val targetSdk = 29 } @Suppress("unused") object Dependencies { - const val android_gradle_plugin = "com.android.tools.build:gradle:4.0.0" + const val android_gradle_plugin = "com.android.tools.build:gradle:_" object AndroidX { - const val activity = "androidx.activity:activity:1.1.0" - const val annotations = "androidx.annotation:annotation:1.1.0" - const val appcompat = "androidx.appcompat:appcompat:1.1.0" - const val constraint_layout = "androidx.constraintlayout:constraintlayout:1.1.3" - const val fragment = "androidx.fragment:fragment:1.2.3" - const val gridlayout = "androidx.gridlayout:gridlayout:1.0.0" + const val activity = "androidx.activity:activity:_" + const val appcompat = "androidx.appcompat:appcompat:_" + const val constraint_layout = "androidx.constraintlayout:constraintlayout:_" + const val fragment = "androidx.fragment:fragment:_" + const val gridlayout = "androidx.gridlayout:gridlayout:_" object Lifecycle { - const val ktx = "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0" - const val reactivestreams = "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.2.0" + const val ktx = "androidx.lifecycle:lifecycle-runtime-ktx:_" } // Note that we're not using the actual androidx material dep yet, it's still alpha. - const val material = "com.google.android.material:material:1.1.0" - const val recyclerview = "androidx.recyclerview:recyclerview:1.1.0" + const val material = "com.google.android.material:material:_" + const val recyclerview = "androidx.recyclerview:recyclerview:_" // Note that we are *not* using lifecycle-viewmodel-savedstate, which at this // writing is still in beta and still fixing bad bugs. Probably we'll never bother to, // it doesn't really add value for us. - const val savedstate = "androidx.savedstate:savedstate:1.0.0" - const val transition = "androidx.transition:transition:1.3.1" - const val viewbinding = "androidx.databinding:viewbinding:3.6.2" + const val savedstate = "androidx.savedstate:savedstate:_" + const val transition = "androidx.transition:transition:_" + const val viewbinding = "androidx.databinding:viewbinding:_" } - const val cycler = "com.squareup.cycler:cycler:0.1.3" + const val cycler = "com.squareup.cycler:cycler:_" // Required for Dungeon Crawler sample. - const val desugar_jdk_libs = "com.android.tools:desugar_jdk_libs:1.0.5" - const val moshi = "com.squareup.moshi:moshi:1.9.2" - const val rxandroid2 = "io.reactivex.rxjava2:rxandroid:2.1.1" - const val timber = "com.jakewharton.timber:timber:4.7.1" + const val desugar_jdk_libs = "com.android.tools:desugar_jdk_libs:_" + const val moshi = "com.squareup.moshi:moshi:_" + const val rxandroid2 = "io.reactivex.rxjava2:rxandroid:_" + const val seismic = "com.squareup:seismic:_" + const val timber = "com.jakewharton.timber:timber:_" object Kotlin { const val binaryCompatibilityValidatorPlugin = - "org.jetbrains.kotlinx:binary-compatibility-validator:0.2.3" - const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" + "org.jetbrains.kotlinx:binary-compatibility-validator:_" + const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:_" object Stdlib { const val common = "org.jetbrains.kotlin:kotlin-stdlib-common" @@ -59,20 +56,20 @@ object Dependencies { } object Coroutines { - const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.coroutines}" - const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutines}" - const val rx2 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:${Versions.coroutines}" + const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:_" + const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:_" + const val rx2 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:_" - const val test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Versions.coroutines}" + const val test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:_" } - const val moshi = "com.squareup.moshi:moshi-kotlin:1.9.2" - const val reflect = "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlin}" + const val moshi = "com.squareup.moshi:moshi-kotlin:_" + const val reflect = "org.jetbrains.kotlin:kotlin-reflect:_" object Serialization { - const val gradlePlugin = "org.jetbrains.kotlin:kotlin-serialization:${Versions.kotlin}" - const val runtime = "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0" - const val kaml = "com.charleskorn.kaml:kaml:0.16.1" + const val gradlePlugin = "org.jetbrains.kotlin:kotlin-serialization:_" + const val runtime = "org.jetbrains.kotlinx:kotlinx-serialization-runtime:_" + const val kaml = "com.charleskorn.kaml:kaml:_" } object Test { @@ -80,53 +77,50 @@ object Dependencies { const val annotations = "org.jetbrains.kotlin:kotlin-test-annotations-common" const val jdk = "org.jetbrains.kotlin:kotlin-test-junit" - const val mockito = "com.nhaarman:mockito-kotlin-kt1.1:1.6.0" + const val mockito = "com.nhaarman:mockito-kotlin-kt1.1:_" } } - const val dokka = "org.jetbrains.dokka:dokka-gradle-plugin:0.10.0" + const val dokka = "org.jetbrains.dokka:dokka-gradle-plugin:_" object Jmh { - const val gradlePlugin = "me.champeau.gradle:jmh-gradle-plugin:0.5.0" - const val core = "org.openjdk.jmh:jmh-core:1.23" - const val generator = "org.openjdk.jmh:jmh-generator-annprocess:1.23" + const val gradlePlugin = "me.champeau.gradle:jmh-gradle-plugin:_" + const val core = "org.openjdk.jmh:jmh-core:_" + const val generator = "org.openjdk.jmh:jmh-generator-annprocess:_" } - const val mavenPublish = "com.vanniktech:gradle-maven-publish-plugin:0.11.1" - const val ktlint = "org.jlleitschuh.gradle:ktlint-gradle:9.2.0" - const val lanterna = "com.googlecode.lanterna:lanterna:3.0.2" - const val detekt = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.1" - const val okio = "com.squareup.okio:okio:2.5.0" + const val mavenPublish = "com.vanniktech:gradle-maven-publish-plugin:_" + const val ktlint = "org.jlleitschuh.gradle:ktlint-gradle:_" + const val lanterna = "com.googlecode.lanterna:lanterna:_" + const val detekt = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:_" + const val okio = "com.squareup.okio:okio:_" object RxJava2 { - const val rxjava2 = "io.reactivex.rxjava2:rxjava:2.2.19" - - const val extensions = "com.github.akarnokd:rxjava2-extensions:0.20.10" + const val rxjava2 = "io.reactivex.rxjava2:rxjava:_" } object Annotations { - const val intellij = "org.jetbrains:annotations:19.0.0" + const val intellij = "org.jetbrains:annotations:_" } object Test { object AndroidX { object Espresso { - const val contrib = "androidx.test.espresso:espresso-contrib:3.2.0" - const val core = "androidx.test.espresso:espresso-core:3.2.0" - const val idlingResource = "androidx.test.espresso:espresso-idling-resource:3.2.0" - const val intents = "androidx.test.espresso:espresso-intents:3.2.0" + const val core = "androidx.test.espresso:espresso-core:_" + const val idlingResource = "androidx.test.espresso:espresso-idling-resource:_" + const val intents = "androidx.test.espresso:espresso-intents:_" } - const val junitExt = "androidx.test.ext:junit:1.1.1" - const val runner = "androidx.test:runner:1.2.0" - const val truthExt = "androidx.test.ext:truth:1.2.0" - const val uiautomator = "androidx.test.uiautomator:uiautomator:2.2.0" + const val junitExt = "androidx.test.ext:junit:_" + const val runner = "androidx.test:runner:_" + const val truthExt = "androidx.test.ext:truth:_" + const val uiautomator = "androidx.test.uiautomator:uiautomator:_" } - const val hamcrestCore = "org.hamcrest:hamcrest-core:2.2" - const val junit = "junit:junit:4.13" - const val mockito = "org.mockito:mockito-core:3.3.3" - const val truth = "com.google.truth:truth:1.0.1" + const val hamcrestCore = "org.hamcrest:hamcrest-core:_" + const val junit = "junit:junit:_" + const val mockito = "org.mockito:mockito-core:_" + const val truth = "com.google.truth:truth:_" } } diff --git a/samples/dungeon/timemachine-shakeable/build.gradle.kts b/samples/dungeon/timemachine-shakeable/build.gradle.kts index 841ed58844..44d501e175 100644 --- a/samples/dungeon/timemachine-shakeable/build.gradle.kts +++ b/samples/dungeon/timemachine-shakeable/build.gradle.kts @@ -32,5 +32,5 @@ dependencies { implementation(Dependencies.AndroidX.constraint_layout) implementation(Dependencies.AndroidX.material) implementation(Dependencies.Kotlin.Stdlib.jdk8) - implementation("com.squareup:seismic:1.0.2") + implementation(Dependencies.seismic) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 270f204930..935143a802 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import de.fayard.dependencies.bootstrapRefreshVersionsAndDependencies + rootProject.name = "workflow" include( @@ -50,3 +52,10 @@ include( ":workflow-ui:modal-common", ":workflow-ui:modal-android" ) + +buildscript { + repositories { gradlePluginPortal() } + // See https://github.com/jmfayard/refreshVersions + dependencies.classpath("de.fayard:dependencies:0.5.8") +} +bootstrapRefreshVersionsAndDependencies() diff --git a/versions.properties b/versions.properties new file mode 100644 index 0000000000..63f5c593d3 --- /dev/null +++ b/versions.properties @@ -0,0 +1,54 @@ +## suppress inspection "SpellCheckingInspection" for whole file +## +## Dependencies and Plugin versions with their available updates +## Generated by $ ./gradlew refreshVersions +## Please, don't put extra comments in that file yet, keeping them is not supported yet. +plugin.android=4.0.0 +version.androidx.activity=1.1.0 +version.androidx.appcompat=1.1.0 +version.androidx.constraintlayout=1.1.3 +version.androidx.databinding=4.0.0 +version.androidx.fragment=1.2.3 +version.androidx.gridlayout=1.0.0 +version.androidx.lifecycle=2.2.0 +version.androidx.recyclerview=1.1.0 +version.androidx.savedstate=1.0.0 +version.androidx.test.espresso=3.2.0 +version.androidx.test.ext.junit=1.1.1 +version.androidx.test.ext.truth=1.2.0 +version.androidx.test.runner=1.2.0 +version.androidx.test.uiautomator=2.2.0 +version.androidx.test=1.2.0 +version.androidx.transition=1.3.1 +version.com.android.tools..desugar_jdk_libs=1.0.5 +version.com.charleskorn.kaml..kaml=0.16.1 +version.com.google.truth..truth=1.0.1 +version.com.googlecode.lanterna..lanterna=3.0.2 +version.com.jakewharton.timber..timber=4.7.1 +version.com.nhaarman..mockito-kotlin-kt1.1=1.6.0 +version.com.squareup..seismic=1.0.2 +version.com.vanniktech..gradle-maven-publish-plugin=0.11.1 +version.cycler=0.1.3 +version.google.android.material=1.1.0 +version.io.gitlab.arturbosch.detekt..detekt-gradle-plugin=1.0.1 +version.io.reactivex.rxjava2..rxandroid=2.1.1 +version.io.reactivex.rxjava2..rxjava=2.2.19 +version.junit.junit=4.13 +version.kotlin=1.3.72 +version.kotlinx.coroutines=1.3.7 +version.kotlinx.serialization=0.20.0 +version.me.champeau.gradle..jmh-gradle-plugin=0.5.0 +version.moshi=1.9.2 +version.okio=2.5.0 +version.org.hamcrest..hamcrest-core=2.2 +version.org.jetbrains..annotations=19.0.0 +version.org.jetbrains.dokka..dokka-gradle-plugin=0.10.0 +version.org.jetbrains.kotlin..kotlin-gradle-plugin=1.3.72 +version.org.jetbrains.kotlin..kotlin-reflect=1.3.72 +version.org.jetbrains.kotlinx..binary-compatibility-validator=0.2.3 +version.org.jlleitschuh.gradle..ktlint-gradle=9.2.1 +version.org.jlleitschuh.gradle=9.2.0 +version.org.mockito=3.3.3 +version.org.openjdk.jmh..jmh-core=1.23 +version.org.openjdk.jmh..jmh-generator-annprocess=1.23 +version.org.openjdk.jmh=1.23