Merge branch '2.5.x'

Closes gh-27083
pull/27089/head
Andy Wilkinson 3 years ago
commit bd192238ef

@ -72,8 +72,9 @@ public class PublishToCentralCommand implements Command {
byte[] content = Files.readAllBytes(new File(buildInfoLocation).toPath());
BuildInfoResponse buildInfoResponse = this.objectMapper.readValue(content, BuildInfoResponse.class);
BuildInfo buildInfo = buildInfoResponse.getBuildInfo();
ReleaseInfo releaseInfo = ReleaseInfo.from(buildInfo);
String artifactsLocation = nonOptionArgs.get(3);
this.sonatype.publish(ReleaseInfo.from(buildInfo), new File(artifactsLocation).toPath());
this.sonatype.publish(releaseInfo, new File(artifactsLocation).toPath());
}
}

@ -88,27 +88,6 @@ public class SonatypeService {
this.artifactCollector = new ArtifactCollector(sonatypeProperties.getExclude());
}
/**
* Checks if artifacts are already published to Maven Central.
* @return true if artifacts are published
* @param releaseInfo the release information
*/
public boolean artifactsPublished(ReleaseInfo releaseInfo) {
try {
ResponseEntity<?> entity = this.restTemplate
.getForEntity(String.format(NEXUS_REPOSITORY_PATH + "%s/spring-boot-%s.jar.sha1",
releaseInfo.getVersion(), releaseInfo.getVersion()), byte[].class);
if (HttpStatus.OK.equals(entity.getStatusCode())) {
logger.info("Already published to Sonatype.");
return true;
}
}
catch (HttpClientErrorException ex) {
}
return false;
}
/**
* Publishes the release by creating a staging repository and deploying to it the
* artifacts at the given {@code artifactsRoot}. The repository is then closed and,
@ -117,6 +96,9 @@ public class SonatypeService {
* @param artifactsRoot the root directory of the artifacts to stage
*/
public void publish(ReleaseInfo releaseInfo, Path artifactsRoot) {
if (artifactsPublished(releaseInfo)) {
return;
}
logger.info("Creating staging repository");
String buildId = releaseInfo.getBuildNumber();
String repositoryId = createStagingRepository(buildId);
@ -130,6 +112,22 @@ public class SonatypeService {
logger.info("Staging repository released");
}
private boolean artifactsPublished(ReleaseInfo releaseInfo) {
try {
ResponseEntity<?> entity = this.restTemplate
.getForEntity(String.format(NEXUS_REPOSITORY_PATH + "%s/spring-boot-%s.jar.sha1",
releaseInfo.getVersion(), releaseInfo.getVersion()), byte[].class);
if (HttpStatus.OK.equals(entity.getStatusCode())) {
logger.info("Already published to Sonatype.");
return true;
}
}
catch (HttpClientErrorException ex) {
}
return false;
}
private String createStagingRepository(String buildId) {
Map<String, Object> body = new HashMap<>();
body.put("data", Collections.singletonMap("description", buildId));

@ -74,29 +74,23 @@ class SonatypeServiceTests {
}
@Test
void artifactsPublishedWhenPublishedShouldReturnTrue() {
void publishWhenAlreadyPublishedShouldNotPublish() {
this.server.expect(requestTo(String.format(
"/service/local/repositories/releases/content/org/springframework/boot/spring-boot/%s/spring-boot-%s.jar.sha1",
"1.1.0.RELEASE", "1.1.0.RELEASE"))).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess().body("ce8d8b6838ecceb68962b9150b18682f4237ccf71".getBytes()));
boolean published = this.service.artifactsPublished(getReleaseInfo());
assertThat(published).isTrue();
Path artifactsRoot = new File("src/test/resources/io/spring/concourse/releasescripts/sonatype/artifactory-repo")
.toPath();
this.service.publish(getReleaseInfo(), artifactsRoot);
this.server.verify();
}
@Test
void artifactsPublishedWhenNotPublishedShouldReturnFalse() {
void publishWithSuccessfulClose() throws IOException {
this.server.expect(requestTo(String.format(
"/service/local/repositories/releases/content/org/springframework/boot/spring-boot/%s/spring-boot-%s.jar.sha1",
"1.1.0.RELEASE", "1.1.0.RELEASE"))).andExpect(method(HttpMethod.GET))
.andRespond(withStatus(HttpStatus.NOT_FOUND));
boolean published = this.service.artifactsPublished(getReleaseInfo());
assertThat(published).isFalse();
this.server.verify();
}
@Test
void publishWithSuccessfulClose() throws IOException {
this.server.expect(requestTo("/service/local/staging/profiles/1a2b3c4d/start"))
.andExpect(method(HttpMethod.POST)).andExpect(header("Content-Type", "application/json"))
.andExpect(header("Accept", "application/json, application/*+json"))
@ -145,6 +139,10 @@ class SonatypeServiceTests {
@Test
void publishWithCloseFailureDueToRuleViolations() throws IOException {
this.server.expect(requestTo(String.format(
"/service/local/repositories/releases/content/org/springframework/boot/spring-boot/%s/spring-boot-%s.jar.sha1",
"1.1.0.RELEASE", "1.1.0.RELEASE"))).andExpect(method(HttpMethod.GET))
.andRespond(withStatus(HttpStatus.NOT_FOUND));
this.server.expect(requestTo("/service/local/staging/profiles/1a2b3c4d/start"))
.andExpect(method(HttpMethod.POST)).andExpect(header("Content-Type", "application/json"))
.andExpect(header("Accept", "application/json, application/*+json"))

Loading…
Cancel
Save