diff --git a/build.gradle b/build.gradle index 0e0f8d3..2cbc077 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/gradle.properties b/gradle.properties index 7d04d3c..e68cc2e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -currentVersion=1.8.3 +currentVersion=1.8.4 diff --git a/src/main/groovy/com/jfrog/bintray/gradle/tasks/BintrayPublishTask.groovy b/src/main/groovy/com/jfrog/bintray/gradle/tasks/BintrayPublishTask.groovy index 13cfbce..fe3eff6 100644 --- a/src/main/groovy/com/jfrog/bintray/gradle/tasks/BintrayPublishTask.groovy +++ b/src/main/groovy/com/jfrog/bintray/gradle/tasks/BintrayPublishTask.groovy @@ -1,6 +1,9 @@ package com.jfrog.bintray.gradle.tasks import com.jfrog.bintray.gradle.Utils +import com.jfrog.bintray.gradle.tasks.entities.Repository +import com.jfrog.bintray.gradle.tasks.entities.Package +import com.jfrog.bintray.gradle.tasks.entities.Version import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.tasks.TaskAction @@ -15,6 +18,7 @@ import static groovyx.net.http.Method.POST */ class BintrayPublishTask extends DefaultTask { static final String TASK_NAME = "bintrayPublish" + private HashMap repositories = new HashMap<>() @TaskAction void taskAction() throws IOException { @@ -25,14 +29,36 @@ class BintrayPublishTask extends DefaultTask { HashSet tasks = project.getTasksByName(BintrayUploadTask.TASK_NAME, true) for (BintrayUploadTask task : tasks) { if (task.getEnabled() && task.getDidWork()) { - if (task.getSignVersion()) { - gpgSignVersion(task.repoName, task.packageName, task.versionName, task) + Package pkg = new Package(task.packageName) + Repository repository = new Repository(task.repoName) + Repository existingRepo = repositories.putIfAbsent(task.repoName, repository) + if (!existingRepo) { + existingRepo = repository } - if (task.publish) { - publishVersion(task.repoName, task.packageName, task.versionName, task) + + Package existingPackage = existingRepo.packages.putIfAbsent(task.packageName, pkg) + if (!existingPackage) { + existingPackage = pkg + } + + Version v = new Version( + task.versionName, task.signVersion, task.gpgPassphrase, task.publish, task.shouldSyncToMavenCentral()) + Version existingVersion = existingPackage.getVersionIfExists(v) + + if (existingVersion == null) { + existingPackage.addVersionIfAbsent(v) + existingVersion = new Version(v.name, false, v.gpgPassphrase, false, false) } - if (task.shouldSyncToMavenCentral()) { - mavenCentralSync(task.repoName, task.packageName, task.versionName, task) + if (existingVersion.shouldGpgSign(v.gpgSign)) { + gpgSignVersion(existingRepo.name, existingPackage.name, existingVersion.name, task) + } + + if (existingVersion.shouldPerformPublish(v.publish)) { + publishVersion(existingRepo.name, existingPackage.name, existingVersion.name, task) + } + + if (existingVersion.shouldPerformMavenSync(v.mavenCentralSync)) { + mavenCentralSync(existingRepo.name, existingPackage.name, existingVersion.name, task) } } } diff --git a/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Package.groovy b/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Package.groovy index 53ee725..2651e3b 100644 --- a/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Package.groovy +++ b/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Package.groovy @@ -27,6 +27,12 @@ class Package { return v } + // Returns the version of the Map if exists + // Null if there is no such version in the map + Version getVersionIfExists(Version v) { + return versions.get(v) + } + boolean equals(o) { if (this.is(o)) { return true diff --git a/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Version.groovy b/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Version.groovy index ed5f063..35ed9bb 100644 --- a/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Version.groovy +++ b/src/main/groovy/com/jfrog/bintray/gradle/tasks/entities/Version.groovy @@ -1,12 +1,14 @@ package com.jfrog.bintray.gradle.tasks.entities +import org.apache.commons.lang.StringUtils + class Version { private String name private boolean created private boolean gpgSign private String gpgPassphrase private boolean publish - private boolean mavenCentralSync + private boolean mavenCentralSync Version(String name, boolean gpgSign, String gpgPassphrase, boolean publish, boolean mavenCentralSync) { this.name = name @@ -49,16 +51,51 @@ class Version { } } - boolean equals(o) { - if (this.is(o)) { - return true + boolean shouldPerformPublish(boolean publish) { + // If publish already occurred for this version + // Or + // If no publish is needed + // don't perform publishing + if (this.publish || !publish) { + return false + } + this.publish = publish + return true + } + + boolean shouldPerformMavenSync(boolean mavenCentralSync) { + // If maven Central Sync already occurred for this version + // Or + // If mavenCentralSync is false + // don't perform maven central sync + if (this.mavenCentralSync || !mavenCentralSync) { + return false } - if (getClass() != o.class || name != ((Version) o).name) { + this.mavenCentralSync = mavenCentralSync + return true + } + + boolean shouldGpgSign(boolean gpgSign) { + // If signing of the version already occurred + // Or + // If no signing is required + // return false + if (this.gpgSign || !gpgSign) { return false } + this.gpgSign = gpgSign return true } + boolean equals(o) { + if (!(o instanceof String)) { + return false + } + + String name = (String) o + return StringUtils.equals(this.name, name) + } + int hashCode() { name != null ? name.hashCode() : 0 } diff --git a/src/test/resources/gradle/projects/configuration/build.gradle b/src/test/resources/gradle/projects/configuration/build.gradle index 6d231a5..1372274 100644 --- a/src/test/resources/gradle/projects/configuration/build.gradle +++ b/src/test/resources/gradle/projects/configuration/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/src/test/resources/gradle/projects/configurationWithSubModules/build.gradle b/src/test/resources/gradle/projects/configurationWithSubModules/build.gradle index 6d231a5..1372274 100644 --- a/src/test/resources/gradle/projects/configurationWithSubModules/build.gradle +++ b/src/test/resources/gradle/projects/configurationWithSubModules/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/src/test/resources/gradle/projects/fileSpec/build.gradle b/src/test/resources/gradle/projects/fileSpec/build.gradle index d350343..712469e 100644 --- a/src/test/resources/gradle/projects/fileSpec/build.gradle +++ b/src/test/resources/gradle/projects/fileSpec/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/src/test/resources/gradle/projects/publication/build.gradle b/src/test/resources/gradle/projects/publication/build.gradle index 925fd78..d4fe9f5 100644 --- a/src/test/resources/gradle/projects/publication/build.gradle +++ b/src/test/resources/gradle/projects/publication/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/src/test/resources/gradle/projects/publicationWithJavaGradlePlugin/build.gradle b/src/test/resources/gradle/projects/publicationWithJavaGradlePlugin/build.gradle index 38deab0..9b7389c 100644 --- a/src/test/resources/gradle/projects/publicationWithJavaGradlePlugin/build.gradle +++ b/src/test/resources/gradle/projects/publicationWithJavaGradlePlugin/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.3" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } }