Skip to content

Instantly share code, notes, and snippets.

@ed-george
Last active February 12, 2020 13:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ed-george/6f9cf150daee31f46c47a0ba980fe5a0 to your computer and use it in GitHub Desktop.
Save ed-george/6f9cf150daee31f46c47a0ba980fe5a0 to your computer and use it in GitHub Desktop.
A small example of how to generate a report for a Gradle Project's dependencies as per - https://ed-george.github.io/articles/12-02-2020/versioning
// APP Level app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply from: '../dependency-update.gradle'
android {
compileSdkVersion build_versions.compile_sdk
compileOptions {
sourceCompatibility build_versions.java
targetCompatibility build_versions.java
}
defaultConfig {
applicationId "com.example"
minSdkVersion build_versions.min_sdk
targetSdkVersion build_versions.target_sdk
versionCode app.versionCode as int
versionName app.versionName as String
}
}
dependencies {
// Groups relevant to module here
kotlin()
androidx()
network()
}
// Top-level gradle file
buildscript {
apply from: 'versions.gradle'
addRepos(repositories)
dependencies {
classpath plugin.kotlin
classpath plugin.gradle
classpath plugin.gradle_update_version
}
}
allprojects {
addRepos(repositories)
repositories {
dependencies { apply from: "$rootProject.rootDir/versions-groups.gradle" }
}
}
import groovy.xml.MarkupBuilder
apply plugin: 'com.github.ben-manes.versions'
def gitSha() {
return 'git rev-parse --short HEAD'.execute([], rootDir).text.trim()
}
dependencyUpdates {
outputFormatter = { result ->
def updatable = result.outdated.dependencies
if (!updatable.isEmpty()) {
def filepath = "deps/${project.name}-dependencies-result.html"
def file = new File(filepath)
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs()
}
def fileWriter = new FileWriter(file)
def html = new MarkupBuilder(fileWriter)
html.html {
head {
style("table{width:100%}table,td,th{border:1px solid #231a4f;border-collapse:collapse}td,th{padding:15px;text-align:left}table tr:nth-child(even){background-color:#f4f9fb}table tr:nth-child(odd){background-color:#d6e5e9}table th{background-color:#231a4f;color:#f4f9fb}")
}
body {
h3("Module: " + project.name)
h3("Git commit: " + gitSha())
h4("Last updated: " + LocalDateTime.now())
table {
tr {
th("Group")
th("Module")
th("Current version")
th("Latest version")
}
updatable.each { dependency ->
tr {
td(dependency.group)
td(dependency.name)
td(dependency.version)
td(dependency.available.release ?: dependency.available.milestone)
}
}
}
}
}
println "[DEPS] Written file: ${filepath}"
}
}
}
def Group(Closure closure) {
closure.delegate = dependencies
return closure
}
ext {
kotlin = Group {
implementation deps.core.kotlin_stdlib
}
androidx = Group {
implementation deps.androidx.appcompat
implementation deps.androidx.ktx_core
implementation deps.androidx.ktx_fragment
}
network = Group {
implementation deps.network.retrofit_core
implementation deps.network.retrofit_converter_gson
implementation deps.network.log_interceptor
implementation deps.network.glide_core
kapt deps.network.glide_compiler
}
}
ext.deps = [:]
// Top level KVPs
def versions = [:]
def deps = [:]
// def means we're making a local variable.
// We'll use this map to build our deps key/value pairs below
// Kotlin Version
versions.kotlin = '1.3.50'
// ######################################################################################
// # Build Versions
// ######################################################################################
// Android related dependencies
def build_versions = [:]
build_versions.min_sdk = 23
build_versions.target_sdk = 29
build_versions.compile_sdk = 29
build_versions.java = JavaVersion.VERSION_1_8
ext.build_versions = build_versions
// ######################################################################################
// # Plugins
// ######################################################################################
def plugins_version = [:]
plugins_version.kotlin_plugin = versions.kotlin
plugins_version.android_gradle_plugin = '3.5.3'
plugins_version.gradle_update_version = '0.21.0'
versions.plugins = plugins_version
def plugins = [:]
plugins.kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.plugins.kotlin_plugin"
plugins.gradle = "com.android.tools.build:gradle:$versions.plugins.android_gradle_plugin"
plugins.gradle_update_version = "com.github.ben-manes:gradle-versions-plugin:$versions.plugins.gradle_update_version"
ext.plugin = plugins
// ######################################################################################
// # Dependencies
// ######################################################################################
// CORE
def core_deps = [:]
core_deps.kotlin_stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlin"
deps.core = core_deps
// ANDROIDX
def androidx_version = [:]
androidx_version.appcompat = '1.1.0'
androidx_version.ktx_core = '1.2.0-rc01'
androidx_version.ktx_fragment = '1.2.0-rc02'
versions.androidx = androidx_version
def androidx_deps = [:]
androidx_deps.appcompat = "androidx.appcompat:appcompat:$versions.androidx.appcompat"
androidx_deps.ktx_core = "androidx.core:core-ktx:$versions.androidx.ktx_core"
androidx_deps.ktx_fragment = "androidx.fragment:fragment-ktx:$versions.androidx.ktx_fragment"
deps.androidx = androidx_deps
// NETWORKING
def network_version = [:]
network_version.retrofit = '2.6.2'
network_version.glide = '4.9.0'
network_version.okhttp = '3.14.2'
versions.network = network_version
def network_deps = [:]
network_deps.retrofit_core = "com.squareup.retrofit2:retrofit:$versions.network.retrofit"
network_deps.retrofit_converter_gson = "com.squareup.retrofit2:converter-gson:$versions.network.retrofit"
network_deps.log_interceptor = "com.squareup.okhttp3:logging-interceptor:$versions.network.okhttp"
network_deps.glide_core = "com.github.bumptech.glide:glide:$versions.network.glide"
network_deps.glide_compiler = "com.github.bumptech.glide:compiler:$versions.network.glide"
deps.network = network_deps
// Add your dependencies here...
// ######################################################################################
// # Add Repo Method
// ######################################################################################
static def addRepos(RepositoryHandler handler) {
handler.google()
handler.jcenter()
handler.maven { url 'https://plugins.gradle.org/m2/' }
}
ext.addRepos = this.&addRepos
// Create global level dependencies
ext.deps = deps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment