diff options
author | Harsh Shandilya <me@msfjarvis.dev> | 2020-11-25 00:19:11 +0530 |
---|---|---|
committer | Harsh Shandilya <me@msfjarvis.dev> | 2020-11-29 17:18:34 +0530 |
commit | fa2a93769f5cec8397064337fd53659147ba1877 (patch) | |
tree | e7fc5b80e70189311e3ce38af795ecfeaa49284e /buildSrc/src/main/java | |
parent | 0b9d3dc5c23e372ae7b4e7df266ac0172701c307 (diff) |
build: move publishing config to buildSrc for re-use
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'buildSrc/src/main/java')
-rw-r--r-- | buildSrc/src/main/java/BintrayPublishing.kt | 102 | ||||
-rw-r--r-- | buildSrc/src/main/java/PasswordStorePlugin.kt | 5 |
2 files changed, 107 insertions, 0 deletions
diff --git a/buildSrc/src/main/java/BintrayPublishing.kt b/buildSrc/src/main/java/BintrayPublishing.kt new file mode 100644 index 00000000..6567a5ea --- /dev/null +++ b/buildSrc/src/main/java/BintrayPublishing.kt @@ -0,0 +1,102 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +import com.android.build.gradle.TestedExtension +import java.util.Locale +import org.gradle.api.Project +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.jvm.tasks.Jar +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.register + +/** + * Register the `sourcesJar` task so that our published artifacts can include them. + */ +internal fun TestedExtension.registerSourcesJarTask(project: Project) { + project.tasks.register<Jar>("sourcesJar") { + archiveClassifier.set("sources") + from(sourceSets.getByName("main").java.srcDirs) + } +} + +/** + * Configures the `apsMaven` and `bintray` repositories along with an `aps` publication + */ +internal fun PublishingExtension.configureMavenPublication(project: Project) { + repositories { + maven { + name = "apsMaven" + url = project.uri("https://maven.msfjarvis.dev/android-password-store/${project.getKey("POM_ARTIFACT_ID")}") + credentials { + username = project.getCredential("user") + password = project.getCredential("password") + } + } + maven { + val artifactId = project.getKey("POM_ARTIFACT_ID") + name = "bintray" + url = project.uri("https://api.bintray.com/maven/android-password-store/$artifactId/$artifactId/;publish=1;override=0") + credentials { + username = project.getCredential("user") + password = project.getCredential("password") + } + } + } + publications { + create<MavenPublication>("aps") { + from(project.components.getByName("release")) + groupId = project.getKey("GROUP") + artifactId = project.getKey("POM_ARTIFACT_ID") + version = project.getKey("VERSION_NAME") + artifact(project.tasks.getByName("sourcesJar")) + configurePom(project) + } + } +} + +private fun Project.getCredential(type: String): String { + return when (type) { + // Attempt to find credentials passed by -Pmaven.$type= + "user", "password" -> (findProperty("maven.$type") + // Fall back to MAVEN_$type from env + ?: System.getenv("MAVEN_${type.toUpperCase(Locale.ROOT)}"))?.toString() + // Finally fallthrough to an empty string to let task configuration complete + // even if actual publishing is going to fail + ?: "" + else -> throw IllegalArgumentException("Invalid credential type: $type") + } +} + +private fun Project.getKey(propertyName: String): String { + return findProperty(propertyName)?.toString() + ?: error("Failed to find value for property: $propertyName") +} + +private fun MavenPublication.configurePom(project: Project) { + pom { + name.set(project.getKey("POM_ARTIFACT_ID")) + description.set(project.getKey("POM_ARTIFACT_DESCRIPTION")) + url.set(project.getKey("POM_URL")) + licenses { + license { + name.set(project.getKey("POM_LICENSE_NAME")) + url.set(project.getKey("POM_LICENSE_URL")) + } + } + developers { + developer { + id.set(project.getKey("POM_DEVELOPER_ID")) + name.set(project.getKey("POM_DEVELOPER_NAME")) + email.set(project.getKey("POM_DEVELOPER_EMAIL")) + } + } + scm { + connection.set(project.getKey("POM_SCM_CONNECTION")) + developerConnection.set(project.getKey("POM_SCM_DEV_CONNECTION")) + url.set(project.getKey("POM_SCM_URL")) + } + } +} diff --git a/buildSrc/src/main/java/PasswordStorePlugin.kt b/buildSrc/src/main/java/PasswordStorePlugin.kt index b8271f65..12cd764e 100644 --- a/buildSrc/src/main/java/PasswordStorePlugin.kt +++ b/buildSrc/src/main/java/PasswordStorePlugin.kt @@ -11,6 +11,7 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaLibraryPlugin import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.publish.PublishingExtension import org.gradle.api.tasks.compile.JavaCompile import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType @@ -35,6 +36,10 @@ class PasswordStorePlugin : Plugin<Project> { } is LibraryPlugin -> { project.extensions.getByType<TestedExtension>().configureCommonAndroidOptions() + project.extensions.getByType<TestedExtension>().registerSourcesJarTask(project) + project.afterEvaluate { + project.extensions.getByType<PublishingExtension>().configureMavenPublication(project) + } } is AppPlugin -> { project.extensions.getByType<BaseAppModuleExtension>().configureAndroidApplicationOptions(project) |