diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java index 5a06d7bd93..9dd85da21f 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java @@ -37,6 +37,7 @@ import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.Sync; import org.gradle.api.tasks.TaskAction; +import org.springframework.boot.build.artifactory.ArtifactoryRepository; import org.springframework.util.StringUtils; /** @@ -149,23 +150,11 @@ class AsciidoctorConventions { Map attributes = new HashMap<>(); attributes.put("attribute-missing", "warn"); attributes.put("github-tag", determineGitHubTag(project)); - attributes.put("spring-boot-artifactory-repo", determineArtifactoryRepo(project)); + attributes.put("spring-boot-artifactory-repo", ArtifactoryRepository.forProject(project)); attributes.put("version", "{gradle-project-version}"); asciidoctorTask.attributes(attributes); } - private String determineArtifactoryRepo(Project project) { - String version = project.getVersion().toString(); - String type = version.substring(version.lastIndexOf('.') + 1); - if (type.equals("RELEASE")) { - return "release"; - } - if (type.startsWith("M") || type.startsWith("RC")) { - return "milestone"; - } - return "snapshot"; - } - private String determineGitHubTag(Project project) { String version = "v" + project.getVersion(); return (version.endsWith("-SNAPSHOT")) ? "master" : version; diff --git a/buildSrc/src/main/java/org/springframework/boot/build/artifactory/ArtifactoryRepository.java b/buildSrc/src/main/java/org/springframework/boot/build/artifactory/ArtifactoryRepository.java new file mode 100644 index 0000000000..0a985d5c27 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/artifactory/ArtifactoryRepository.java @@ -0,0 +1,59 @@ +/* + * Copyright 2012-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.build.artifactory; + +import org.gradle.api.Project; + +/** + * An Artifactory repository to which a build of Spring Boot can be published. + * + * @author Andy Wilkinson + */ +public final class ArtifactoryRepository { + + private final String name; + + private ArtifactoryRepository(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + @Override + public String toString() { + return this.name; + } + + public static ArtifactoryRepository forProject(Project project) { + return new ArtifactoryRepository(determineArtifactoryRepo(project)); + } + + private static String determineArtifactoryRepo(Project project) { + String version = project.getVersion().toString(); + String type = version.substring(version.lastIndexOf('.') + 1); + if (type.equals("RELEASE")) { + return "release"; + } + if (type.startsWith("M") || type.startsWith("RC")) { + return "milestone"; + } + return "snapshot"; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java b/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java index 048043f433..db068dc00c 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java @@ -23,13 +23,14 @@ import java.util.Map; import org.apache.commons.codec.digest.DigestUtils; import org.gradle.api.DefaultTask; -import org.gradle.api.Project; import org.gradle.api.file.RegularFile; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskExecutionException; +import org.springframework.boot.build.artifactory.ArtifactoryRepository; + /** * Base class for generating a package manager definition file such as a Scoop manifest or * a Homebrew formula. @@ -81,7 +82,7 @@ public abstract class AbstractPackageManagerDefinitionTask extends DefaultTask { copy.into(this.outputDir); Map properties = new HashMap<>(additionalProperties); properties.put("hash", sha256(this.archive.get().getAsFile())); - properties.put("repo", determineArtifactoryRepo(getProject())); + properties.put("repo", ArtifactoryRepository.forProject(getProject())); properties.put("project", getProject()); copy.expand(properties); }); @@ -97,16 +98,4 @@ public abstract class AbstractPackageManagerDefinitionTask extends DefaultTask { } } - private String determineArtifactoryRepo(Project project) { - String version = project.getVersion().toString(); - String type = version.substring(version.lastIndexOf('.')); - if (type.equals("RELEASE")) { - return "release"; - } - if (type.startsWith("M") || type.startsWith("RC")) { - return "milestone"; - } - return "snapshot"; - } - } diff --git a/buildSrc/src/test/java/org/springframework/boot/build/artifactory/ArtifactoryRepositoryTests.java b/buildSrc/src/test/java/org/springframework/boot/build/artifactory/ArtifactoryRepositoryTests.java new file mode 100644 index 0000000000..3216f9e347 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/artifactory/ArtifactoryRepositoryTests.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.build.artifactory; + +import org.gradle.api.Project; +import org.gradle.testfixtures.ProjectBuilder; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ArtifactoryRepository}. + * + * @author Andy Wilkinson + */ +public class ArtifactoryRepositoryTests { + + @Test + void whenProjectVersionIsMilestoneThenRepositoryIsMilestone() { + Project project = ProjectBuilder.builder().build(); + project.setVersion("1.2.3.M1"); + assertThat(ArtifactoryRepository.forProject(project).getName()).isEqualTo("milestone"); + } + + @Test + void whenProjectVersionIsReleaseCandidateThenRepositoryIsMilestone() { + Project project = ProjectBuilder.builder().build(); + project.setVersion("1.2.3.RC1"); + assertThat(ArtifactoryRepository.forProject(project).getName()).isEqualTo("milestone"); + } + + @Test + void whenProjectVersionIsReleaseThenRepositoryIsRelease() { + Project project = ProjectBuilder.builder().build(); + project.setVersion("1.2.3.RELEASE"); + assertThat(ArtifactoryRepository.forProject(project).getName()).isEqualTo("release"); + } + + @Test + void whenProjectVersionIsBuildSnapshotThenRepositoryIsSnapshot() { + Project project = ProjectBuilder.builder().build(); + project.setVersion("1.2.3.BUILD-SNAPSHOT"); + assertThat(ArtifactoryRepository.forProject(project).getName()).isEqualTo("snapshot"); + } + +}