Rework BuildInfo to separate task and build info properties
Previously, the properties that applied to the BuildInfo task itself and those that would be written into the build-info.properties file were all configured on BuildInfo directly. This lack of separation could be confusing. This commit rework BuildInfo to separate the task's own properties from those that are written into the build-info.properties file. The task has also been updated so that changes to a project's properties made after the task has been configured are reflected in the build info properties.
This commit is contained in:
@@ -16,6 +16,11 @@
|
||||
|
||||
package org.springframework.boot.gradle.tasks.buildinfo;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.gradle.testkit.runner.TaskOutcome;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -34,10 +39,30 @@ public class BuildInfoIntegrationTests {
|
||||
@Rule
|
||||
public final GradleBuild gradleBuild = new GradleBuild();
|
||||
|
||||
@Test
|
||||
public void defaultValues() {
|
||||
assertThat(this.gradleBuild.build("buildInfo").task(":buildInfo").getOutcome())
|
||||
.isEqualTo(TaskOutcome.SUCCESS);
|
||||
Properties buildInfoProperties = buildInfoProperties();
|
||||
assertThat(buildInfoProperties).containsKey("build.time");
|
||||
assertThat(buildInfoProperties).containsEntry("build.artifact", "unspecified");
|
||||
assertThat(buildInfoProperties).containsEntry("build.group", "");
|
||||
assertThat(buildInfoProperties).containsEntry("build.name",
|
||||
this.gradleBuild.getProjectDir().getName());
|
||||
assertThat(buildInfoProperties).containsEntry("build.version", "unspecified");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void basicExecution() {
|
||||
assertThat(this.gradleBuild.build("buildInfo").task(":buildInfo").getOutcome())
|
||||
.isEqualTo(TaskOutcome.SUCCESS);
|
||||
Properties buildInfoProperties = buildInfoProperties();
|
||||
assertThat(buildInfoProperties).containsKey("build.time");
|
||||
assertThat(buildInfoProperties).containsEntry("build.artifact", "foo");
|
||||
assertThat(buildInfoProperties).containsEntry("build.group", "foo");
|
||||
assertThat(buildInfoProperties).containsEntry("build.additional", "foo");
|
||||
assertThat(buildInfoProperties).containsEntry("build.name", "foo");
|
||||
assertThat(buildInfoProperties).containsEntry("build.version", "1.0");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -55,34 +80,48 @@ public class BuildInfoIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void notUpToDateWhenProjectArtifactChanges() {
|
||||
notUpToDateWithChangeToProperty("buildInfoProjectArtifact");
|
||||
notUpToDateWithChangeToProperty("buildInfoArtifact");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notUpToDateWhenProjectGroupChanges() {
|
||||
notUpToDateWithChangeToProperty("buildInfoProjectGroup");
|
||||
notUpToDateWithChangeToProperty("buildInfoGroup");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notUpToDateWhenProjectVersionChanges() {
|
||||
notUpToDateWithChangeToProperty("buildInfoProjectVersion");
|
||||
notUpToDateWithChangeToProperty("buildInfoVersion");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notUpToDateWhenProjectNameChanges() {
|
||||
notUpToDateWithChangeToProperty("buildInfoProjectName");
|
||||
notUpToDateWithChangeToProperty("buildInfoName");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notUpToDateWhenAdditionalPropertyChanges() {
|
||||
notUpToDateWithChangeToProperty("buildInfoAdditionalProperty");
|
||||
notUpToDateWithChangeToProperty("buildInfoAdditional");
|
||||
}
|
||||
|
||||
private void notUpToDateWithChangeToProperty(String name) {
|
||||
assertThat(this.gradleBuild.build("buildInfo").task(":buildInfo").getOutcome())
|
||||
.isEqualTo(TaskOutcome.SUCCESS);
|
||||
assertThat(this.gradleBuild.build("buildInfo", "--stacktrace").task(":buildInfo")
|
||||
.getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||
assertThat(this.gradleBuild.build("buildInfo", "-P" + name + "=changed")
|
||||
.task(":buildInfo").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||
}
|
||||
|
||||
private Properties buildInfoProperties() {
|
||||
File file = new File(this.gradleBuild.getProjectDir(),
|
||||
"build/build-info.properties");
|
||||
assertThat(file).isFile();
|
||||
Properties properties = new Properties();
|
||||
try (FileReader reader = new FileReader(file)) {
|
||||
properties.load(reader);
|
||||
return properties;
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright 2012-2017 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
|
||||
*
|
||||
* http://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.gradle.tasks.buildinfo;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.testfixtures.ProjectBuilder;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link BuildInfo}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public class BuildInfoTests {
|
||||
|
||||
@Rule
|
||||
public TemporaryFolder temp = new TemporaryFolder();
|
||||
|
||||
@Test
|
||||
public void basicExecution() {
|
||||
Properties properties = buildInfoProperties(createTask(createProject("test")));
|
||||
assertThat(properties).containsKey("build.time");
|
||||
assertThat(properties).containsEntry("build.artifact", "unspecified");
|
||||
assertThat(properties).containsEntry("build.group", "");
|
||||
assertThat(properties).containsEntry("build.name", "test");
|
||||
assertThat(properties).containsEntry("build.version", "unspecified");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customArtifactIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProperties().setArtifact("custom");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.artifact", "custom");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void projectGroupIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProject().setGroup("com.example");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.group", "com.example");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customGroupIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProperties().setGroup("com.example");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.group", "com.example");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customNameIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProperties().setName("Example");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.name", "Example");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void projectVersionIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProject().setVersion("1.2.3");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.version", "1.2.3");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customVersionIsReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProperties().setVersion("2.3.4");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.version", "2.3.4");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void additionalPropertiesAreReflectedInProperties() {
|
||||
BuildInfo task = createTask(createProject("test"));
|
||||
task.getProperties().getAdditional().put("a", "alpha");
|
||||
task.getProperties().getAdditional().put("b", "bravo");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.a", "alpha");
|
||||
assertThat(buildInfoProperties(task)).containsEntry("build.b", "bravo");
|
||||
}
|
||||
|
||||
private Project createProject(String projectName) {
|
||||
try {
|
||||
File projectDir = this.temp.newFolder(projectName);
|
||||
return ProjectBuilder.builder().withProjectDir(projectDir)
|
||||
.withName(projectName).build();
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private BuildInfo createTask(Project project) {
|
||||
return project.getTasks().create("testBuildInfo", BuildInfo.class);
|
||||
}
|
||||
|
||||
private Properties buildInfoProperties(BuildInfo task) {
|
||||
task.generateBuildProperties();
|
||||
return buildInfoProperties(
|
||||
new File(task.getDestinationDir(), "build-info.properties"));
|
||||
}
|
||||
|
||||
private Properties buildInfoProperties(File file) {
|
||||
assertThat(file).isFile();
|
||||
Properties properties = new Properties();
|
||||
try (FileReader reader = new FileReader(file)) {
|
||||
properties.load(reader);
|
||||
return properties;
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user