diff --git a/.circleci/docker/android/build.gradle b/.circleci/docker/android/build.gradle index 96f73716f646e..6b876b41c610d 100644 --- a/.circleci/docker/android/build.gradle +++ b/.circleci/docker/android/build.gradle @@ -21,9 +21,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.1.2' - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0" - classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" - classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.9.8" + classpath 'com.vanniktech:gradle-maven-publish-plugin:0.14.2' } } diff --git a/.circleci/scripts/publish_android_snapshot.sh b/.circleci/scripts/publish_android_snapshot.sh index 81f79d5cf6883..352b9d54f871a 100755 --- a/.circleci/scripts/publish_android_snapshot.sh +++ b/.circleci/scripts/publish_android_snapshot.sh @@ -35,7 +35,9 @@ else echo "ndk.dir=/opt/ndk" >> $GRADLE_LOCAL_PROPERTIES echo "SONATYPE_NEXUS_USERNAME=${SONATYPE_NEXUS_USERNAME}" >> $GRADLE_PROPERTIES + echo "mavenCentralRepositoryUsername=${SONATYPE_NEXUS_USERNAME}" >> $GRADLE_PROPERTIES echo "SONATYPE_NEXUS_PASSWORD=${SONATYPE_NEXUS_PASSWORD}" >> $GRADLE_PROPERTIES + echo "mavenCentralRepositoryPassword=${SONATYPE_NEXUS_PASSWORD}" >> $GRADLE_PROPERTIES echo "signing.keyId=${ANDROID_SIGN_KEY}" >> $GRADLE_PROPERTIES echo "signing.password=${ANDROID_SIGN_PASS}" >> $GRADLE_PROPERTIES diff --git a/android/build.gradle b/android/build.gradle index 458222fcb3486..60cd969bf652d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -26,9 +26,7 @@ allprojects { dependencies { classpath 'com.android.tools.build:gradle:4.1.2' - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:${GRADLE_BINTRAY_PLUGIN_VERSION}" - classpath "com.github.dcendents:android-maven-gradle-plugin:${ANDROID_MAVEN_GRADLE_PLUGIN_VERSION}" - classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.9.8" + classpath 'com.vanniktech:gradle-maven-publish-plugin:0.14.2' } } diff --git a/android/gradle.properties b/android/gradle.properties index 0ab42c56396d0..f99b6407be5a8 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -3,6 +3,7 @@ ABI_FILTERS=armeabi-v7a,arm64-v8a,x86,x86_64 VERSION_NAME=1.8.0-SNAPSHOT GROUP=org.pytorch MAVEN_GROUP=org.pytorch +SONATYPE_STAGING_PROFILE=orgpytorch POM_URL=https://github.com/pytorch/pytorch/tree/master/android POM_SCM_URL=https://github.com/pytorch/pytorch.git POM_SCM_CONNECTION=scm:git:https://github.com/pytorch/pytorch @@ -13,11 +14,6 @@ POM_ISSUES_URL=https://github.com/pytorch/pytorch/issues POM_LICENSE_DIST=repo POM_DEVELOPER_ID=pytorch POM_DEVELOPER_NAME=pytorch -syncWithMavenCentral=true - -GRADLE_BINTRAY_PLUGIN_VERSION=1.8.0 -GRADLE_VERSIONS_PLUGIN_VERSION=0.15.0 -ANDROID_MAVEN_GRADLE_PLUGIN_VERSION=2.1 # Gradle internals org.gradle.internal.repository.max.retries=1 diff --git a/android/gradle/android_maven_install.gradle b/android/gradle/android_maven_install.gradle deleted file mode 100644 index ce80472d79e30..0000000000000 --- a/android/gradle/android_maven_install.gradle +++ /dev/null @@ -1,38 +0,0 @@ -apply plugin: 'com.github.dcendents.android-maven' - -version = VERSION_NAME -group = GROUP -project.archivesBaseName = POM_ARTIFACT_ID - -install { - repositories.mavenInstaller { - pom.project { - name POM_NAME - artifactId POM_ARTIFACT_ID - packaging POM_PACKAGING - description POM_DESCRIPTION - url projectUrl - - scm { - url scmUrl - connection scmConnection - developerConnection scmDeveloperConnection - } - - licenses { - license { - name = POM_LICENSE_NAME - url = POM_LICENSE_URL - distribution = POM_LICENSE_DIST - } - } - - developers { - developer { - id developerId - name developerName - } - } - } - } -} diff --git a/android/gradle/android_tasks.gradle b/android/gradle/android_tasks.gradle index 0d5932559e470..6bba126b2f66b 100644 --- a/android/gradle/android_tasks.gradle +++ b/android/gradle/android_tasks.gradle @@ -1,94 +1,11 @@ -import java.nio.file.Files -import java.nio.file.Paths -import java.io.FileOutputStream -import java.util.zip.ZipFile - -// Android tasks for Javadoc and sources.jar generation - afterEvaluate { project -> if (POM_PACKAGING == 'aar') { - task androidJavadoc(type: Javadoc, dependsOn: assembleDebug) { - source += files(android.sourceSets.main.java.srcDirs) - failOnError false - // This task will try to compile *everything* it finds in the above directory and - // will choke on text files it doesn't understand. - exclude '**/BUCK' - exclude '**/*.md' - } - - task androidJavadocJar(type: Jar, dependsOn: androidJavadoc) { - classifier = 'javadoc' - from androidJavadoc.destinationDir - } - - task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs - } - - android.libraryVariants.all { variant -> - def name = variant.name.capitalize() - task "jar${name}"(type: Jar, dependsOn: variant.javaCompileProvider) { - from variant.javaCompileProvider.get().destinationDir - } - - androidJavadoc.doFirst { - classpath += files(android.bootClasspath) - classpath += files(variant.javaCompileProvider.get().classpath.files) - // This is generated by `assembleDebug` and holds the JARs generated by the APT. - classpath += fileTree(dir: "$buildDir/intermediates/bundles/debug/", include: '**/*.jar') - - // Process AAR dependencies - def aarDependencies = classpath.filter { it.name.endsWith('.aar') } - classpath -= aarDependencies - aarDependencies.each { aar -> - // Extract classes.jar from the AAR dependency, and add it to the javadoc classpath - def outputPath = "$buildDir/tmp/aarJar/${aar.name.replace('.aar', '.jar')}" - classpath += files(outputPath) - - // Use a task so the actual extraction only happens before the javadoc task is run - dependsOn task(name: "extract ${aar.name}").doLast { - extractEntry(aar, 'classes.jar', outputPath) - } - } - } - } - - artifacts.add('archives', androidJavadocJar) - artifacts.add('archives', androidSourcesJar) - } - - if (POM_PACKAGING == 'jar') { - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - - task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource - } - - artifacts.add('archives', javadocJar) - artifacts.add('archives', sourcesJar) - } -} - -// Utility method to extract only one entry in a zip file -private def extractEntry(archive, entryPath, outputPath) { - if (!archive.exists()) { - throw new GradleException("archive $archive not found") - } - - def zip = new ZipFile(archive) - zip.entries().each { - if (it.name == entryPath) { - def path = Paths.get(outputPath) - if (!Files.exists(path)) { - Files.createDirectories(path.getParent()) - Files.copy(zip.getInputStream(it), path) + task headersJar(type: Jar) { + archiveClassifier.set('headers') + from("$rootDir/cxx/") { + include '**/*.h' } } + artifacts.add('archives', headersJar) } - zip.close() } diff --git a/android/gradle/bintray.gradle b/android/gradle/bintray.gradle deleted file mode 100644 index c20073964f7ef..0000000000000 --- a/android/gradle/bintray.gradle +++ /dev/null @@ -1,64 +0,0 @@ -apply plugin: 'com.jfrog.bintray' - -def getBintrayUsername() { - return project.hasProperty('bintrayUsername') ? property('bintrayUsername') : System.getenv('BINTRAY_USERNAME') -} - -def getBintrayApiKey() { - return project.hasProperty('bintrayApiKey') ? property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') -} - -def getBintrayGpgPassword() { - return project.hasProperty('bintrayGpgPassword') ? property('bintrayGpgPassword') : System.getenv('BINTRAY_GPG_PASSWORD') -} - -def getMavenCentralUsername() { - return project.hasProperty('mavenCentralUsername') ? property('mavenCentralUsername') : System.getenv('MAVEN_CENTRAL_USERNAME') -} - -def getMavenCentralPassword() { - return project.hasProperty('mavenCentralPassword') ? property('mavenCentralPassword') : System.getenv('MAVEN_CENTRAL_PASSWORD') -} - -def shouldSyncWithMavenCentral() { - return project.hasProperty('syncWithMavenCentral') ? property('syncWithMavenCentral').toBoolean() : false -} - -def dryRunOnly() { - return project.hasProperty('dryRun') ? property('dryRun').toBoolean() : false -} - -bintray { - user = getBintrayUsername() - key = getBintrayApiKey() - override = false - configurations = ['archives'] - pkg { - repo = bintrayRepo - userOrg = bintrayUserOrg - name = bintrayName - desc = bintrayDescription - websiteUrl = projectUrl - issueTrackerUrl = issuesUrl - vcsUrl = scmUrl - licenses = [ POM_LICENSE_NAME ] - dryRun = dryRunOnly() - override = false - publish = true - publicDownloadNumbers = true - version { - name = versionName - desc = bintrayDescription - gpg { - sign = true - passphrase = getBintrayGpgPassword() - } - mavenCentralSync { - sync = shouldSyncWithMavenCentral() - user = getMavenCentralUsername() - password = getMavenCentralPassword() - close = '1' // If set to 0, you have to manually click release - } - } - } -} diff --git a/android/gradle/gradle_maven_push.gradle b/android/gradle/gradle_maven_push.gradle deleted file mode 100644 index 5fdd8fbc6a037..0000000000000 --- a/android/gradle/gradle_maven_push.gradle +++ /dev/null @@ -1,99 +0,0 @@ -apply plugin: 'signing' - -version = VERSION_NAME -group = MAVEN_GROUP - -def isReleaseBuild() { - return !VERSION_NAME.contains('SNAPSHOT') -} - -def getReleaseRepositoryUrl() { - return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL - : "https://oss.sonatype.org/service/local/staging/deploy/maven2/" -} - -def getSnapshotRepositoryUrl() { - return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL - : "https://oss.sonatype.org/content/repositories/snapshots/" -} - -def getRepositoryUsername() { - return hasProperty('SONATYPE_NEXUS_USERNAME') ? SONATYPE_NEXUS_USERNAME : "" -} - -def getRepositoryPassword() { - return hasProperty('SONATYPE_NEXUS_PASSWORD') ? SONATYPE_NEXUS_PASSWORD : "" -} - -def getHttpProxyHost() { - return project.properties['systemProp.http.proxyHost'] -} - -def getHttpProxyPort() { - return project.properties['systemProp.http.proxyPort'] -} - -def needProxy() { - return (getHttpProxyHost() != null) && (getHttpProxyPort() != null) -} - -afterEvaluate { project -> - uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - pom.groupId = MAVEN_GROUP - pom.artifactId = POM_ARTIFACT_ID - pom.version = VERSION_NAME - - repository(url: getReleaseRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - if (needProxy()) { - proxy(host: getHttpProxyHost(), port: getHttpProxyPort() as Integer, type: 'http') - } - } - snapshotRepository(url: getSnapshotRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - if (needProxy()) { - proxy(host: getHttpProxyHost(), port: getHttpProxyPort() as Integer, type: 'http') - } - } - - pom.project { - name POM_NAME - packaging POM_PACKAGING - description POM_DESCRIPTION - url POM_URL - - scm { - url POM_SCM_URL - connection POM_SCM_CONNECTION - developerConnection POM_SCM_DEV_CONNECTION - } - - licenses { - license { - name POM_LICENSE_NAME - url POM_LICENSE_URL - distribution POM_LICENSE_DIST - } - } - - developers { - developer { - id POM_DEVELOPER_ID - name POM_DEVELOPER_NAME - } - } - } - } - } - } - - signing { - required { isReleaseBuild() && gradle.taskGraph.hasTask('uploadArchives') } - sign configurations.archives - } - -} diff --git a/android/gradle/release.gradle b/android/gradle/release.gradle index 5709a2cdb32f3..7a69483493644 100644 --- a/android/gradle/release.gradle +++ b/android/gradle/release.gradle @@ -1,5 +1,3 @@ apply from: rootProject.file('gradle/android_tasks.gradle') -apply from: rootProject.file('gradle/release_bintray.gradle') - -apply from: rootProject.file('gradle/gradle_maven_push.gradle') +apply plugin: 'com.vanniktech.maven.publish' diff --git a/android/gradle/release_bintray.gradle b/android/gradle/release_bintray.gradle deleted file mode 100644 index dc2bcc34003d5..0000000000000 --- a/android/gradle/release_bintray.gradle +++ /dev/null @@ -1,32 +0,0 @@ -ext { - bintrayRepo = 'maven' - bintrayUserOrg = 'pytorch' - bintrayName = "${GROUP}:${POM_ARTIFACT_ID}" - bintrayDescription = POM_DESCRIPTION - projectUrl = POM_URL - issuesUrl = POM_ISSUES_URL - scmUrl = POM_SCM_URL - scmConnection = POM_SCM_CONNECTION - scmDeveloperConnection = POM_SCM_DEV_CONNECTION - - publishedGroupId = GROUP - libraryName = 'pytorch_android' - artifact = 'pytorch_android' - - developerId = POM_DEVELOPER_ID - developerName = POM_DEVELOPER_NAME - - versionName = VERSION_NAME - - projectLicenses = { - license = { - name = POM_LICENSE_NAME - url = POM_LICENSE_URL - distribution = POM_LICENSE_DIST - } - } -} - -apply from: rootProject.file('gradle/android_maven_install.gradle') - -apply from: rootProject.file('gradle/bintray.gradle')