diff --git a/build.gradle.kts b/build.gradle.kts index aba48dff1..4ea2fc732 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -47,9 +47,7 @@ allprojects { configureQuality() if (Config.submodules.contains(name) || isLibrary) { - // TODO: Re-enable this in the future - // setupPublishing() - setupTasks() + setupPublishing() } } } @@ -65,7 +63,7 @@ val Project.isLibrary get() = name == "library" /** * Returns the maven artifact name for a Project. */ -val Project.artifactName get() = if (isLibrary) "firebase-ui" else "firebase-ui-${this.name}" +val Project.artifactName get() = if (isLibrary) "firebase-ui" else "firebase-ui-$name" /** * Returns the name for a Project's maven publication. @@ -129,7 +127,33 @@ fun Project.configureQuality() { } } -fun Project.setupTasks() { +fun Project.setupPublishing() { + val sourcesJar = task("sourcesJar") { + classifier = "sources" + from(project.the().sourceSets["main"].java.srcDirs) + } + + val javadoc = task("javadoc") { + setSource(project.the().sourceSets["main"].java.srcDirs) + classpath += configurations["compile"] + classpath += project.files(project.the().bootClasspath) + } + + val javadocJar = task("javadocJar") { + dependsOn(javadoc) + classifier = "javadoc" + from(javadoc.destinationDir) + } + + artifacts.add("archives", javadocJar) + artifacts.add("archives", sourcesJar) + + tasks.whenTaskAdded { + if (name.contains("publish") && name.contains("publication", true)) { + dependsOn("assembleRelease") + } + } + afterEvaluate { if (isLibrary) { task("testAll") { @@ -139,7 +163,7 @@ fun Project.setupTasks() { } task("prepareArtifacts") { - dependsOn("javadocJar", "sourcesJar", "assembleRelease") + dependsOn(javadocJar, sourcesJar, "assembleRelease") dependsOn("generatePomFileForMonolithLibraryPublication") dependsOn(*Config.submodules.map { ":$it:prepareArtifacts" @@ -169,43 +193,16 @@ fun Project.setupTasks() { } else { val pomTask = "generatePomFileFor${project.name.capitalize()}LibraryPublication" task("prepareArtifacts") { - dependsOn("javadocJar", "sourcesJar", "assembleRelease", pomTask) + dependsOn(javadocJar, sourcesJar, "assembleRelease", pomTask) } } - } -} - -fun Project.setupPublishing() { - println("Configuring publishing for ${this}") - val sourcesJar = task("sourcesJar") { - classifier = "sources" - from(project.the().sourceSets["main"].java.srcDirs) - } - - val javadoc = task("javadoc") { - setSource(project.the().sourceSets["main"].java.srcDirs) - classpath += configurations["compile"] - classpath += project.files(project.the().bootClasspath) - } - - val javadocJar = task("javadocJar") { - dependsOn(javadoc) - classifier = "javadoc" - from(javadoc.destinationDir) - } - - artifacts.add("archives", javadocJar) - artifacts.add("archives", sourcesJar) - - tasks.whenTaskAdded { - if (name.toLowerCase().contains("publish") && name.contains("publication", true)) { - dependsOn("assembleRelease") - } + tasks["bintrayUpload"].dependsOn("prepareArtifacts") } apply(plugin = "maven-publish") apply(plugin = "com.jfrog.artifactory") + apply(plugin = "com.jfrog.bintray") configure { repositories { @@ -226,7 +223,6 @@ fun Project.setupPublishing() { // We need to override the variables 'group' and 'version' on the 'Project' object in order // to prevent the bintray plugin from creating 'unspecified' artifacts. val groupName = "com.firebaseui" - val projectName = name group = groupName version = Config.version @@ -236,18 +232,20 @@ fun Project.setupPublishing() { artifactId = artifactName version = Config.version - val releaseAar = "$buildDir/outputs/aar/${projectName}-release.aar" + val releaseAar = "$buildDir/outputs/aar/${project.name}-release.aar" + + logger.info(""" + |Creating maven publication '$publicationName' + | Group: $groupName + | Artifact: $artifactName + | Version: $version + | Aar: $releaseAar + """.trimMargin()) artifact(releaseAar) artifact(javadocJar) artifact(sourcesJar) - println("Creating maven publication $publicationName") - println("\tgroup: $groupName") - println("\tartifact: $artifactName") - println("\tversion: $version") - println("\taar: $releaseAar") - pom { withXml { asNode().appendNode("dependencies").apply { @@ -323,8 +321,10 @@ fun Project.setupPublishing() { } } - val bintrayUsername = System.getProperty("BINTRAY_USER") ?: System.getenv("BINTRAY_USER") - val bintrayKey = System.getProperty("BINTRAY_KEY") ?: System.getenv("BINTRAY_KEY") + 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") configure { setContextUrl("https://oss.jfrog.org") @@ -339,49 +339,37 @@ fun Project.setupPublishing() { tasks.withType { publications(publicationName) } - apply(plugin = "com.jfrog.bintray") - configure { - user = bintrayUsername key = bintrayKey setPublications(publicationName) - setConfigurations("archives") - - println("Bintray configuration for ${publicationName}") - println("\tartifact: ${artifactName}") - publications.forEach { pubName -> - println("\tpub: $pubName") - - val publ = project.extensions - .getByType(PublishingExtension::class.java) - .publications.findByName(pubName) as MavenPublication - - publ.artifacts.forEach { art -> - println("\t\tpub_artifact: $art") - } - } - configurations.forEach { config -> - println("\tconfig: $config") - - project.configurations.findByName(config)?.allArtifacts?.forEach { art -> - println("\t\tconfig_artifact: $art") - } - } // When uploading, move and rename the generated POM val pomSrc = "$buildDir/publications/$publicationName/pom-default.xml" - val pomDst = "com/firebaseui/$artifactName/${Config.version}/" + val pomDest = "com/firebaseui/$artifactName/${Config.version}/" val pomName = "$artifactName-${Config.version}.pom" - println("POM Transformation") - println("\tsrc: ${pomSrc}") - println("\tdst: ${pomDst}") - println("\tname: ${pomName}") + val pubLog: (String) -> String = { name -> + val publishing = project.extensions + .getByType(PublishingExtension::class.java) + .publications[name] as MavenPublication + "'$name': ${publishing.artifacts}" + } + logger.info(""" + |Bintray configuration for '$publicationName' + | Artifact name: $artifactName + | Artifacts: ${publications.joinToString(transform = pubLog)} + """.trimMargin()) + logger.info(""" + |POM transformation + | Src: $pomSrc + | Dest: $pomDest + | Name: $pomName + """.trimMargin()) filesSpec(closureOf { from(pomSrc) - into(pomDst) + into(pomDest) rename(KotlinClosure1({ pomName })) }) @@ -398,6 +386,3 @@ fun Project.setupPublishing() { }) } } - -// TODO: Remove this -apply(from = "publishing.gradle") diff --git a/constants.gradle b/constants.gradle deleted file mode 100644 index 9071f8f33..000000000 --- a/constants.gradle +++ /dev/null @@ -1,10 +0,0 @@ -project.ext { - submodules = ['database', 'auth', 'storage', 'firestore', 'common'] - group = 'com.firebaseui' - version = '4.0.1' - pomdesc = 'Firebase UI Android' - - compileSdk = 27 - targetSdk = 27 - minSdk = 14 -} diff --git a/publishing.gradle b/publishing.gradle deleted file mode 100644 index bff243d6b..000000000 --- a/publishing.gradle +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Configure common tasks on all the submodules - */ -allprojects { project -> - - // Get constants, this is where we store things - // like the list of submodules or the version - project.apply from: "$rootDir/constants.gradle" - - def isLibrary = 'library'.equals(project.name) - def isSubmodule = submodules.contains(project.name) - - if (isLibrary || isSubmodule) { - tasks.whenTaskAdded { task -> - if (task.name.contains("publish") && task.name.toLowerCase().contains("publication")) { - task.dependsOn 'assemble' - } - } - - // So that we can resolve 'android' variable - project.apply plugin: 'com.android.library' - android { - compileSdkVersion compileSdk - } - - // Task to generate sources JAR - task sourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs - } - - // Task to generate javadoc - task javadoc(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += configurations.compile - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - } - - // Task to generate javadoc JAR - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - - // Define base name for archives - // Ex: firebase-ui-auth - archivesBaseName = isSubmodule ? "firebase-ui-${project.name}" : "firebase-ui" - - // Use tasks above to define artifacts - artifacts { - archives javadocJar - archives sourcesJar - } - - // JFrog Artifactory integration - project.apply plugin: 'com.jfrog.artifactory' - - // So that we can define publication - project.apply plugin: 'maven-publish' - - publishing { - // By passing -Pcustom_local=/some/path and running the - // publishLibraryPublicationToCustomLocalRepository task you can publish this library to a - // custom maven repository location on your machine. - repositories { - maven { - name 'CustomLocal' - url uri(project.hasProperty('custom_local') ? project.getProperty('custom_local') : '/tmp/') - } - } - - repositories { - maven { - name 'BuildLocal' - url "$buildDir/repo" - } - } - } - - // POM to meet maven specs - def publicationName = isLibrary ? 'monolithLibrary' : "${project.name}Library" - def archivesBaseName = isLibrary ? 'firebase-ui' : "firebase-ui-${project.name}" - - // We need to override the variables 'group' and 'version' on the 'Project' object in order - // to prevent the bintray plugin from creating 'unspecified' artifacts. - group = project.ext.group - version = project.ext.version - - def groupName = project.ext.group - def versionName = project.ext.version - - publishing { - publications { - "${publicationName}"(MavenPublication) { - - groupId groupName - artifactId archivesBaseName - version versionName - - artifact "$buildDir/outputs/aar/${archivesBaseName}-release.aar" - artifact javadocJar - artifact sourcesJar - - pom.withXml { - // Dependencies - def dependenciesNode = asNode().getAt("dependencies")[0] - if (dependenciesNode == null) { - dependenciesNode = asNode().appendNode("dependencies") - } - - configurations.api.dependencies.each { - def dependencyNode = dependenciesNode.appendNode('dependency') - - if (submodules.contains(it.name)) { - dependencyNode.appendNode('groupId', groupName) - dependencyNode.appendNode('artifactId', "firebase-ui-${it.name}") - dependencyNode.appendNode('version', versionName) - } else { - dependencyNode.appendNode('groupId', it.group) - dependencyNode.appendNode('artifactId', it.name) - dependencyNode.appendNode('version', it.version) - } - - dependencyNode.appendNode('scope', 'compile') - } - configurations.implementation.dependencies.each { - def dependencyNode = dependenciesNode.appendNode('dependency') - - if (submodules.contains(it.name)) { - dependencyNode.appendNode('groupId', groupName) - dependencyNode.appendNode('artifactId', "firebase-ui-${it.name}") - dependencyNode.appendNode('version', versionName) - } else { - dependencyNode.appendNode('groupId', it.group) - dependencyNode.appendNode('artifactId', it.name) - dependencyNode.appendNode('version', it.version) - } - - dependencyNode.appendNode('scope', 'runtime') - } - - // Common values - def repoUrl = 'https://github.com/firebase/FirebaseUI-Android' - def scmUrl = 'scm:git:git@github.com/firebase/firebaseui-android.git' - - // Name - asNode().appendNode('name', artifactId) - - // Description - asNode().appendNode('description', 'Firebase UI for Android') - - // Organization - def organization = asNode().appendNode('organization') - organization.appendNode('name', 'FirebaseUI') - organization.appendNode('url', repoUrl) - - // URL - asNode().appendNode('url', repoUrl) - - // SCM - def scm = asNode().appendNode('scm') - scm.appendNode('connection', scmUrl) - scm.appendNode('developerConnection', scmUrl) - scm.appendNode('url', repoUrl) - scm.appendNode('tag', 'HEAD') - - // Developers - def developer = asNode().appendNode('developers').appendNode('developer') - developer.appendNode('id', 'samtstern') - developer.appendNode('email', 'samstern@google.com') - developer.appendNode('organization', 'Firebase') - developer.appendNode('organizationUrl', 'https://firebase.google.com') - def roles = developer.appendNode('roles') - roles.appendNode('role', 'Project-Administrator') - roles.appendNode('role', 'Developer') - developer.appendNode('timezone', '-8') - - // Licenses - def license = asNode().appendNode('licenses').appendNode('license') - license.appendNode('name', 'The Apache License, Version 2.0') - license.appendNode('url', 'http://www.apache.org/licenses/LICENSE-2.0.txt') - } - } - } - } - - def bintrayUsername = hasProperty('BINTRAY_USER') ? getProperty('BINTRAY_USER') : System.getenv('BINTRAY_USER') - def bintrayKey = hasProperty('BINTRAY_KEY') ? getProperty('BINTRAY_KEY') : System.getenv('BINTRAY_KEY') - - artifactory { - contextUrl = 'https://oss.jfrog.org' - publish { - repository { - repoKey = 'oss-snapshot-local' - - username = bintrayUsername - password = bintrayKey - } - } - } - - artifactoryPublish { - publications(publishing.publications."$publicationName") - } - - // Bintray Configuration (applies to submodule and the monolith) - project.apply plugin: 'com.jfrog.bintray' - - def pomLoc = isLibrary ? "$buildDir/publications/monolithLibrary/pom-default.xml" : "$buildDir/publications/${project.name}Library/pom-default.xml" - - bintray { - user = bintrayUsername - key = bintrayKey - publications = [publicationName] - - filesSpec { - from pomLoc - into "com/firebaseui/$archivesBaseName/$versionName/" - rename { String fileName -> - "${archivesBaseName}-${versionName}.pom" - } - } - - configurations = ['archives'] - - pkg { - repo = 'firebase-ui' - name = archivesBaseName - userOrg = 'firebaseui' - licenses = ['Apache-2.0'] - vcsUrl = 'https://github.com/firebase/FirebaseUI-Android.git' - - version { - name = versionName - } - } - } - } -}