2018-08-20 20:41:04 +03:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
2018-11-15 23:53:13 +03:00
|
|
|
def libLicense = properties.libLicense
|
|
|
|
def libLicenseUrl = properties.libLicenseUrl
|
|
|
|
def libRepositoryName = properties.libRepositoryName
|
Publish all Maven artifacts to a single bintray package.
Right now, we publish each Maven artifact "cluster" -- for "logins",
say, that is "logins", "logins-withoutLibs", and "logins-forUnitTests"
-- to a single bintray package named like the Maven artifact ID (say,
"logins").
This seems to be common, but bintray mirrors packages to jcenter, and
bintray packages don't map directly to Maven coordinates. AFAICT,
that is the thing that requires somebody (right now, me -- nalexander)
to push the "mirror to jcenter" button in the bintray UI.
If we instead have a single bintray "package" (say,
"org.mozilla.appservices") and then publish many Maven artifacts to
that package, we should get automatic jcenter mirroring for everything
that we have under it. Let's try!
2019-03-16 01:35:33 +03:00
|
|
|
def libProjectName = properties.libProjectName
|
2018-11-15 23:53:13 +03:00
|
|
|
def libUrl = properties.libUrl
|
|
|
|
def libVcsUrl = properties.libVcsUrl
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
ext.configurePublish = { groupIdArg, artifactIdArg, descriptionArg,
|
|
|
|
jnaForTestConfiguration = null,
|
|
|
|
variantWithoutLib = null ->
|
2018-11-15 22:08:16 +03:00
|
|
|
// `jnaForTestConfiguration` is a hacky way to say yes, I'm using JNA and
|
|
|
|
// want to pack the JNA dispatch libraries and my Rust libraries into a
|
|
|
|
// single JAR for use in unit tests that run on a development host (and not
|
|
|
|
// an Android target device). We extract the JNA libraries and our local
|
|
|
|
// Rust libraries and stick them into a JAR that consumers augment their
|
|
|
|
// test configuration with.
|
2018-11-14 02:47:20 +03:00
|
|
|
//
|
|
|
|
// `variantWithoutLib` says to publish an AAR that doesn't have native Rust
|
|
|
|
// libraries packed into it. Such an AAR will be aggregated into another
|
2018-12-14 21:08:01 +03:00
|
|
|
// Maven publication that has a single megazord Rust library that provides
|
2018-11-14 02:47:20 +03:00
|
|
|
// the native code functionality.
|
2018-11-15 22:08:16 +03:00
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
task extractJnaResources(type: Sync) {
|
|
|
|
dependsOn jnaForTestConfiguration
|
|
|
|
|
2018-12-19 03:46:42 +03:00
|
|
|
from {
|
|
|
|
// Defer the resolution of the configuration. This helps to
|
|
|
|
// avoid a nasty issue with the Android-Gradle plugin 3.2.1,
|
|
|
|
// like `Cannot change attributes of configuration
|
|
|
|
// ':PROJECT:kapt' after it has been resolved`.
|
|
|
|
zipTree(jnaForTestConfiguration.singleFile)
|
|
|
|
}
|
2018-11-15 22:08:16 +03:00
|
|
|
|
|
|
|
into "${buildDir}/jnaResources/"
|
|
|
|
|
|
|
|
eachFile { FileCopyDetails fcp ->
|
|
|
|
// The intention is to just keep the various `*jnidispatch.*` files.
|
|
|
|
if (fcp.relativePath.pathString.startsWith("META-INFO") || fcp.relativePath.pathString.endsWith(".class")) {
|
|
|
|
fcp.exclude()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
includeEmptyDirs false
|
|
|
|
}
|
|
|
|
|
|
|
|
def forUnitTestsJarTask = task forUnitTestsJar(type: Jar) {
|
|
|
|
from extractJnaResources
|
2018-11-27 23:43:01 +03:00
|
|
|
from "$buildDir/rustJniLibs/desktop"
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
project.afterEvaluate {
|
|
|
|
forUnitTestsJarTask.dependsOn(tasks["cargoBuild"])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task sourcesJar(type: Jar) {
|
|
|
|
from android.sourceSets.main.java.srcDirs
|
|
|
|
classifier = 'sources'
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task javadoc(type: Javadoc) {
|
|
|
|
source = android.sourceSets.main.java.srcDirs
|
|
|
|
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
|
|
classifier = 'javadoc'
|
|
|
|
from javadoc.destinationDir
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
publishing {
|
|
|
|
publications {
|
|
|
|
aar(MavenPublication) {
|
|
|
|
project.afterEvaluate {
|
|
|
|
from components.findByName("androidRelease")
|
|
|
|
}
|
|
|
|
artifact sourcesJar
|
|
|
|
// Can't publish Javadoc yet: fxaclient isn't well behaved.
|
|
|
|
// artifact javadocJar
|
|
|
|
|
|
|
|
// If this goes haywire with
|
|
|
|
// 'Cannot configure the 'publishing' extension after it has been accessed.',
|
|
|
|
// see https://github.com/researchgate/gradle-release/issues/125 and
|
|
|
|
// https://stackoverflow.com/q/28020520.
|
|
|
|
pom {
|
|
|
|
groupId = groupIdArg
|
|
|
|
artifactId = artifactIdArg
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
2018-08-20 20:41:04 +03:00
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
2018-11-15 23:53:13 +03:00
|
|
|
name = libLicense
|
|
|
|
url = libLicenseUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
2018-11-15 08:13:33 +03:00
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
2018-11-15 23:53:13 +03:00
|
|
|
connection = libVcsUrl
|
|
|
|
developerConnection = libVcsUrl
|
|
|
|
url = libUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
2018-11-14 02:47:20 +03:00
|
|
|
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
// If we are publishing a `-withoutLib` publication, we
|
|
|
|
// never want to choose the real one when a parent project
|
|
|
|
// has us as a child `project()` dependency.
|
|
|
|
alias = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
aarWithoutLib(MavenPublication) {
|
|
|
|
project.afterEvaluate {
|
|
|
|
from components.findByName(variantWithoutLib)
|
|
|
|
}
|
|
|
|
artifact sourcesJar
|
|
|
|
// Can't publish Javadoc yet: fxaclient isn't well behaved.
|
|
|
|
// artifact javadocJar
|
|
|
|
|
|
|
|
pom {
|
2018-12-14 22:19:29 +03:00
|
|
|
groupId = groupIdArg
|
2018-11-14 02:47:20 +03:00
|
|
|
artifactId = "${artifactIdArg}-withoutLib"
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
|
|
|
name = properties.libLicense
|
|
|
|
url = properties.libLicenseUrl
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
|
|
|
connection = properties.libVcsUrl
|
|
|
|
developerConnection = properties.libVcsUrl
|
|
|
|
url = properties.libUrl
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
2018-11-15 22:08:16 +03:00
|
|
|
|
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
forUnitTestsJar(MavenPublication) {
|
|
|
|
artifact tasks['forUnitTestsJar']
|
|
|
|
|
|
|
|
pom {
|
2018-12-14 22:19:29 +03:00
|
|
|
groupId = groupIdArg
|
2018-11-15 22:08:16 +03:00
|
|
|
artifactId = "${artifactIdArg}-forUnitTests"
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
2018-11-15 23:53:13 +03:00
|
|
|
name = libLicense
|
|
|
|
url = libLicenseUrl
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
2018-11-15 23:53:13 +03:00
|
|
|
connection = libVcsUrl
|
|
|
|
developerConnection = libVcsUrl
|
|
|
|
url = libUrl
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is never the publication we want to use when publishing a
|
|
|
|
// parent project with us as a child `project()` dependency.
|
|
|
|
alias = true
|
|
|
|
}
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
apply plugin: 'com.jfrog.bintray'
|
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
// It feels like this shouldn't be necessary, but without it an
|
|
|
|
// "unspecified" creeps into bintray URLs -- just like
|
|
|
|
// https://github.com/bintray/gradle-bintray-plugin/issues/244, but not
|
|
|
|
// fixed by gradle-bintray-plugin:1.8.4.
|
2018-08-20 20:41:04 +03:00
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
Properties localProperties = null;
|
|
|
|
if (project.rootProject.file('local.properties').canRead()) {
|
|
|
|
localProperties = new Properties()
|
|
|
|
localProperties.load(project.rootProject.file('local.properties').newDataInputStream())
|
|
|
|
}
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
def thePublications = ['aar']
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
thePublications << 'aarWithoutLib'
|
|
|
|
}
|
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
thePublications << 'forUnitTestsJar'
|
|
|
|
}
|
|
|
|
|
2018-08-20 20:41:04 +03:00
|
|
|
bintray {
|
|
|
|
user = localProperties != null ? localProperties.getProperty("bintray.user") : ""
|
|
|
|
key = localProperties != null ? localProperties.getProperty("bintray.apikey") : ""
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
publications = thePublications
|
2018-11-15 22:08:16 +03:00
|
|
|
|
2018-08-20 20:41:04 +03:00
|
|
|
pkg {
|
2018-11-15 23:53:13 +03:00
|
|
|
repo = libRepositoryName
|
Publish all Maven artifacts to a single bintray package.
Right now, we publish each Maven artifact "cluster" -- for "logins",
say, that is "logins", "logins-withoutLibs", and "logins-forUnitTests"
-- to a single bintray package named like the Maven artifact ID (say,
"logins").
This seems to be common, but bintray mirrors packages to jcenter, and
bintray packages don't map directly to Maven coordinates. AFAICT,
that is the thing that requires somebody (right now, me -- nalexander)
to push the "mirror to jcenter" button in the bintray UI.
If we instead have a single bintray "package" (say,
"org.mozilla.appservices") and then publish many Maven artifacts to
that package, we should get automatic jcenter mirroring for everything
that we have under it. Let's try!
2019-03-16 01:35:33 +03:00
|
|
|
name = libProjectName
|
2018-11-15 23:53:13 +03:00
|
|
|
websiteUrl = libUrl
|
|
|
|
vcsUrl = libVcsUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
if (project.ext.has('vcsTag')) {
|
|
|
|
vcsTag = project.ext.vcsTag
|
|
|
|
}
|
2018-11-15 23:53:13 +03:00
|
|
|
licenses = [libLicense]
|
2018-08-20 20:41:04 +03:00
|
|
|
publish = true
|
|
|
|
publicDownloadNumbers = true
|
|
|
|
}
|
|
|
|
}
|
2018-11-27 23:47:15 +03:00
|
|
|
|
|
|
|
task zipMavenArtifacts(type: Zip) {
|
|
|
|
from "${project.buildDir}/maven"
|
|
|
|
|
|
|
|
include '**/*.aar'
|
|
|
|
include '**/*.jar'
|
|
|
|
include '**/*.pom'
|
|
|
|
include '**/*.md5'
|
|
|
|
include '**/*.sha1'
|
|
|
|
|
|
|
|
// Metadata is generated by maven.mozilla.org directly
|
|
|
|
exclude '**/*maven-metadata.xml*'
|
|
|
|
|
|
|
|
archiveName "target.maven.zip"
|
|
|
|
includeEmptyDirs = false
|
|
|
|
destinationDir(file("${project.buildDir}"))
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|