Skip to content

Commit

Permalink
Configure Bintray publication (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
lambdatamer committed Jul 3, 2019
1 parent d5474b3 commit 3e87c7c
Show file tree
Hide file tree
Showing 8 changed files with 267 additions and 39 deletions.
85 changes: 68 additions & 17 deletions .gitignore
@@ -1,35 +1,86 @@
# Idea
.idea
local.properties
.DS_Store
captures
*.iml
# [Android] ========================
# Built application files
*.apk
*.ap_

# Files for the Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle
.gradle/
build/
/*/build/

# Compiled class file
*.class
# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log file
# Log Files
*.log

# BlueJ files
*.ctxt

## Directory-based project format:
.idea/

## File-based project format:
*.ipr
*.iws

## Plugin-specific files:

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml


# [Maven] ========================
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties


# [Gradle-Android] ========================

# Ignore Gradle GUI config
gradle-app.setting

# Gradle Signing
signing.properties
trestle.keystore

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# Misc
/.idea/workspace.xml
.DS_Store
/captures
**/*.iml
*.class
159 changes: 150 additions & 9 deletions build.gradle.kts
@@ -1,4 +1,5 @@
import com.android.build.gradle.BaseExtension
import com.jfrog.bintray.gradle.BintrayExtension

val demoAppModuleName = "demo"

Expand All @@ -11,6 +12,8 @@ buildscript {
classpath(Plugins.androidGradle)
classpath(Plugins.kotlin)
classpath(Plugins.dexcount)
classpath(Plugins.bintray)
classpath(Plugins.buildInfo)
}
}

Expand All @@ -21,22 +24,24 @@ allprojects {
jcenter()
mavenCentral()
maven("https://kotlin.bintray.com/kotlinx")
maven("https://dl.bintray.com/aimybox/aimybox-android-sdk/")
}

if ((group as String).isNotEmpty()) configureAndroid()
if (isSubmodule) Submodules.find { it.name == name }?.let { submodule ->
configureAndroid(submodule)
if (submodule.isPublication) configureBintrayPublishing(submodule.version)
} ?: logger.warn("Submodule $name is not defined in Config.kt")
}

tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}

fun Project.configureAndroid() {
logger.warn("Project name ${project.name}")
if (name == demoAppModuleName) {
apply(plugin = "com.android.application")
} else {
apply(plugin = "com.android.library")
}
val Project.isSubmodule get() = name != rootProject.name

fun Project.configureAndroid(submodule: Submodule) {

apply(plugin = if (submodule is Library) "com.android.library" else "com.android.application")
apply(plugin = "kotlin-android")
apply(plugin = "kotlin-android-extensions")
apply(plugin = "com.getkeepsafe.dexcount")
Expand All @@ -48,7 +53,7 @@ fun Project.configureAndroid() {
minSdkVersion(Versions.Sdk.min)
targetSdkVersion(Versions.Sdk.target)

versionName = Versions.aimybox
versionName = submodule.version
versionCode = 1
}

Expand All @@ -73,3 +78,139 @@ fun Project.configureAndroid() {
}
}
}


fun Project.configureBintrayPublishing(version: String) {
apply(plugin = "com.jfrog.bintray")

val publicationName = project.name
.split('-')
.joinToString("", transform = String::capitalize)

configurePublication(publicationName, version)

configure<BintrayExtension> {
val bintrayUsername = properties["bintrayUser"] as? String
?: System.getProperty("BINTRAY_USER") ?: System.getenv("BINTRAY_USER")
val bintrayKey = properties["bintrayKey"] as? String
?: System.getProperty("BINTRAY_KEY") ?: System.getenv("BINTRAY_KEY")

user = bintrayUsername
key = bintrayKey

pkg(closureOf<BintrayExtension.PackageConfig> {
repo = "aimybox-android-assistant"
name = project.name
userOrg = "aimybox"
setLicenses("Apache-2.0")
websiteUrl = "https://aimybox.com"
publish = true
vcsUrl = "https://github.com/aimybox/aimybox-android-assistant.git"
version(closureOf<BintrayExtension.VersionConfig> {
name = version
})
})

setPublications(publicationName)
}

afterEvaluate {
val generatePomFile = "generatePomFileFor${publicationName}Publication"

tasks.register("prepareArtifacts") {
dependsOn("assembleRelease", generatePomFile, "sourcesJar")
}

tasks.named("bintrayUpload").configure { dependsOn("prepareArtifacts") }
}
}

fun Project.configurePublication(publicationName: String, publicationVersion: String) {
apply(plugin = "maven-publish")

val sourcesJar = tasks.register<Jar>("sourcesJar") {
classifier = "sources"
from(project.the<BaseExtension>().sourceSets["main"].java.srcDirs)
}

artifacts.add("archives", sourcesJar)

configure<PublishingExtension> {
publications {
create<MavenPublication>(publicationName) {
groupId = "com.justai.aimybox"
artifactId = project.name
version = publicationVersion

val releaseAar = "$buildDir/outputs/aar/${project.name}-release.aar"

artifact(releaseAar)
artifact(sourcesJar.get())

pom {
name.set("Aimybox ${project.name.replace('-', ' ').capitalize()}")
description.set("Aimybox Android SDK")
url.set("https://github.com/aimybox/aimybox-android-sdk")
organization {
name.set("Aimybox")
url.set("https://aimybox.com/")
}
scm {
val scmUrl = "scm:git:git@github.com/aimybox/aimybox-android-sdk.git"
connection.set(scmUrl)
developerConnection.set(scmUrl)
url.set(this@pom.url)
tag.set("HEAD")
}
developers {
developer {
id.set("morfeusys")
name.set("Dmitriy Chechyotkin")
email.set("morfeusys@gmail.com")
organization.set("Aimybox")
organizationUrl.set("https://aimybox.com")
roles.set(listOf("Project-Administrator", "Developer"))
}
developer {
id.set("lambdatamer")
name.set("Alexander Sirota")
email.set("lambdatamer@gmail.com")
organization.set("Aimybox")
organizationUrl.set("https://aimybox.com")
roles.set(listOf("Developer"))
}
developer {
id.set("nikkas29")
name.set("Nikita Kasenkov")
organization.set("Aimybox")
organizationUrl.set("https://aimybox.com")
roles.set(listOf("Developer"))
}
}
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
withXml {
asNode().appendNode("dependencies").apply {
fun Dependency.write(scope: String) = appendNode("dependency").apply {
appendNode("groupId", group)
appendNode("artifactId", name)
appendNode("version", version)
appendNode("scope", scope)
}
for (dependency in configurations["api"].dependencies) {
dependency.write("compile")
}
for (dependency in configurations["implementation"].dependencies) {
dependency.write("runtime")
}
}
}
}
}
}
}
}
29 changes: 23 additions & 6 deletions buildSrc/src/main/java/Config.kt
@@ -1,3 +1,7 @@
val Submodules = listOf(
Application("demo", Versions.Aimybox.demo, false),
Library("components", Versions.Aimybox.components, true)
)

object Versions {
object Sdk {
Expand All @@ -6,12 +10,23 @@ object Versions {
const val compile = target
}

const val aimybox = "0.0.1"
object Aimybox {
const val core = "0.1.0"
const val googlePlatform = "0.1.0"
const val demo = "0.0.1"
const val components = "0.0.1"
}

object Plugins {
const val androidGradle = "3.4.1"
const val dexCount = "0.8.6"
const val bintray = "1.8.4"
const val buildInfo = "4.7.5"
}

const val kotlin = "1.3.40"
const val coroutines = "1.3.0-M1"

const val androidGradle = "3.4.1"
const val appCompat = "1.0.2"
const val constraintLayout = "1.1.3"
const val material = "1.1.0-alpha06"
Expand All @@ -24,16 +39,16 @@ object Versions {
const val okHttp = "3.14.1"
const val kotson = "2.5.0"

const val dexCount = "0.8.6"

const val mockk = "1.9"
const val androidxTest = "1.1.1"
}

object Plugins {
val androidGradle = "com.android.tools.build:gradle" version Versions.androidGradle
val kotlin = kotlin("gradle-plugin")
val dexcount = "com.getkeepsafe.dexcount:dexcount-gradle-plugin" version Versions.dexCount
val androidGradle = "com.android.tools.build:gradle" version Versions.Plugins.androidGradle
val dexcount = "com.getkeepsafe.dexcount:dexcount-gradle-plugin" version Versions.Plugins.dexCount
val bintray = "com.jfrog.bintray.gradle:gradle-bintray-plugin" version Versions.Plugins.bintray
val buildInfo = "org.jfrog.buildinfo:build-info-extractor-gradle" version Versions.Plugins.buildInfo
}

object Libraries {
Expand All @@ -56,6 +71,8 @@ object Libraries {

val glide = "com.github.bumptech.glide:glide" version Versions.glide
val glideCompiler = "com.github.bumptech.glide:compiler" version Versions.glide

val kotson = "com.github.salomonbrys.kotson:kotson" version Versions.kotson
}


Expand Down
17 changes: 17 additions & 0 deletions buildSrc/src/main/java/Submodule.kt
@@ -0,0 +1,17 @@
interface Submodule {
val name: String
val version: String
val isPublication: Boolean
}

data class Library(
override val name: String,
override val version: String,
override val isPublication: Boolean
) : Submodule

data class Application(
override val name: String,
override val version: String,
override val isPublication: Boolean
) : Submodule
2 changes: 1 addition & 1 deletion components/build.gradle.kts
Expand Up @@ -8,7 +8,7 @@ dependencies {
implementation(Libraries.Kotlin.stdLib)
batchImplementation(Libraries.Kotlin.coroutines)

implementation("com.justai.aimybox:core:${Versions.aimybox}")
implementation("com.justai.aimybox:core:${Versions.Aimybox.core}")

implementation(Libraries.Android.glide)
annotationProcessor(Libraries.Android.glideCompiler)
Expand Down

0 comments on commit 3e87c7c

Please sign in to comment.