diff --git a/badgelogk/build.gradle b/badgelogk/build.gradle index f0642d4..46e8af2 100644 --- a/badgelogk/build.gradle +++ b/badgelogk/build.gradle @@ -1,9 +1,15 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' - id 'com.vanniktech.maven.publish' } +ext { + PUBLISH_GROUP_ID = 'com.danielebachicchi.badgelogk' + PUBLISH_VERSION = '0.1.0' + PUBLISH_ARTIFACT_ID = 'badgelogk' +} +apply from: "${rootProject.projectDir}/scripts/publish-module.gradle" + android { compileSdk 32 @@ -33,5 +39,6 @@ android { dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' + } diff --git a/build.gradle b/build.gradle index f1deced..4c7446d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,21 +1,14 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - repositories { - google() - mavenCentral() // NEW - } - dependencies { - classpath 'com.vanniktech:gradle-maven-publish-plugin:0.18.0' // NEW - classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.4.10.2' // NEW - } -} plugins { id 'com.android.application' version '7.1.0' apply false id 'com.android.library' version '7.1.0' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false + id("org.jetbrains.dokka") version "1.6.10" + id("io.github.gradle-nexus.publish-plugin") version "1.1.0" } task clean(type: Delete) { delete rootProject.buildDir } +apply from: "${rootDir}/scripts/publish-root.gradle" diff --git a/gradle.properties b/gradle.properties index cd0519b..9eb5a07 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,5 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.disableAutomaticComponentCreation=true \ No newline at end of file diff --git a/scripts/publish-module.gradle b/scripts/publish-module.gradle new file mode 100644 index 0000000..9c8327a --- /dev/null +++ b/scripts/publish-module.gradle @@ -0,0 +1,84 @@ +apply plugin: 'maven-publish' +apply plugin: 'signing' + +task androidSourcesJar(type: Jar) { + archiveClassifier.set('sources') + if (project.plugins.findPlugin("com.android.library")) { + // For Android libraries + from android.sourceSets.main.java.srcDirs + from android.sourceSets.main.kotlin.srcDirs + } else { + // For pure Kotlin libraries, in case you have them + from sourceSets.main.java.srcDirs + from sourceSets.main.kotlin.srcDirs + } +} + +artifacts { + archives androidSourcesJar +} + +group = PUBLISH_GROUP_ID +version = PUBLISH_VERSION + +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + // The coordinates of the library, being set from variables that + // we'll set up later + groupId PUBLISH_GROUP_ID + artifactId PUBLISH_ARTIFACT_ID + version PUBLISH_VERSION + + // Two artifacts, the `aar` (or `jar`) and the sources + if (project.plugins.findPlugin("com.android.library")) { + from components.release + } else { + from components.java + } + + artifact androidSourcesJar + //artifact javadocJar + + // Mostly self-explanatory metadata + pom { + name = PUBLISH_ARTIFACT_ID + description = 'A light lib that helps and centralize logs in your application.' + url = 'https://github.com/Badge87/BadgeLogK' + licenses { + license { + name = 'MIT License' + url = 'https://github.com/Badge87/BadgeLogK/blob/main/LICENSE' + } + } + developers { + developer { + id = 'Badge' + name = 'Daniele Bachicchi' + email = 'bacdaniele@gmail.com' + } + // Add all other devs here... + } + + // Version control info - if you're using GitHub, follow the + // format as seen here + scm { + connection = 'scm:git:github.com/Badge87/BadgeLogK.git' + developerConnection = 'scm:git:ssh://github.com/Badge87/BadgeLogK.git' + url = 'https://github.com/Badge87/BadgeLogK/tree/main' + } + } + } + } + } +} + +signing { + useInMemoryPgpKeys( + rootProject.ext["signing.keyId"], + rootProject.ext["signing.key"], + rootProject.ext["signing.password"], + ) + sign publishing.publications +} \ No newline at end of file diff --git a/scripts/publish-root.gradle b/scripts/publish-root.gradle new file mode 100644 index 0000000..b3abdf1 --- /dev/null +++ b/scripts/publish-root.gradle @@ -0,0 +1,36 @@ +// Create variables with empty default values +ext["signing.keyId"] = '' +ext["signing.password"] = '' +ext["signing.key"] = '' +ext["ossrhUsername"] = '' +ext["ossrhPassword"] = '' +ext["sonatypeStagingProfileId"] = '' + +File secretPropsFile = project.rootProject.file('local.properties') +if (secretPropsFile.exists()) { + // Read local.properties file first if it exists + Properties p = new Properties() + new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) } + p.each { name, value -> ext[name] = value } +} else { + // Use system environment variables + ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME') + ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD') + ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID') + ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID') + ext["signing.password"] = System.getenv('SIGNING_PASSWORD') + ext["signing.key"] = System.getenv('SIGNING_KEY') +} + +// Set up Sonatype repository +nexusPublishing { + repositories { + sonatype { + stagingProfileId = sonatypeStagingProfileId + username = ossrhUsername + password = ossrhPassword + nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/")) + snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")) + } + } +} \ No newline at end of file