diff --git a/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java b/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java index ddc529f3..26681bb1 100644 --- a/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java +++ b/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java @@ -135,9 +135,26 @@ public class ReleaseBundleCreator { objectMapper.writeValueAsString(createDistributionJson())); } + public boolean getDistributedReleaseBundleStatus(String releaseBundleName, String version) throws IOException { + ArtifactoryRequest request = new ArtifactoryRequestImpl().method(ArtifactoryRequest.Method.GET) + .apiUrl("lifecycle/api/v2/distribution/export/status/" + releaseBundleName + "/" + version) + .addQueryParam("project", "spring").responseType(ArtifactoryRequest.ContentType.JSON); + return makeArtifactoryRequest(request); + } + public boolean distributeReleaseBundle(String releaseBundleName, String version, String json) throws IOException { log.info("Distributing release bundle with name [{}] and version[{}] and JSON data [{}]", releaseBundleName, version, json); + if (getDistributedReleaseBundleStatus(releaseBundleName, version)) { + log.info("Release bundle with name [{}] and version[{}] already distributed, deleting distributed release bundle", releaseBundleName, version); + if (deleteDistributedReleaseBundle(releaseBundleName, version)) { + log.info("Deleted distributed release bundle with name [{}] and version[{}]", releaseBundleName, version); + } + else { + log.error("Error deleting distributed release bundle with name [{}] and version[{}]", releaseBundleName, version); + return false; + } + } ArtifactoryRequest request = new ArtifactoryRequestImpl().method(ArtifactoryRequest.Method.POST) .apiUrl("lifecycle/api/v2/distribution/distribute/" + releaseBundleName + "/" + version) .addQueryParam("project", "spring").requestType(ArtifactoryRequest.ContentType.JSON) @@ -145,6 +162,21 @@ public class ReleaseBundleCreator { return makeArtifactoryRequest(request); } + public boolean deleteDistributedReleaseBundle(String releaseBundleName, String version) { + log.info("Deleting distributed release bundle with name [{}] and version[{}]", releaseBundleName, version); + ArtifactoryRequest request = new ArtifactoryRequestImpl().method(ArtifactoryRequest.Method.POST) + .apiUrl("lifecycle/api/v2/distribution/remote_delete/" + releaseBundleName + "/" + version) + .addQueryParam("project", "spring").requestType(ArtifactoryRequest.ContentType.JSON) + .responseType(ArtifactoryRequest.ContentType.JSON).requestBody(createDistributionJson()); + try { + return makeArtifactoryRequest(request); + } + catch (IOException e) { + log.error("Error deleting distributed release bundle with name [{}] and version[{}]", releaseBundleName, version, e); + return false; + } + } + private boolean makeArtifactoryRequest(ArtifactoryRequest request) throws IOException { ArtifactoryResponse response = artifactory.restCall(request); if (!response.isSuccessResponse()) {