From 630e2d0b41f5779ed9f3bfcc9bb9680224c0651a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 11 Sep 2018 20:09:20 +0100 Subject: [PATCH 1/2] Correct the permissions of scripts in archives of boot distribution Closes gh-14158 --- .../plugin/ApplicationPluginAction.java | 2 +- ...plicationPluginActionIntegrationTests.java | 32 +++++++++++++++++++ ...Tests-scriptsHaveCorrectPermissions.gradle | 13 ++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java index 0a9b8398964..fb4345321b3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java @@ -80,7 +80,7 @@ final class ApplicationPluginAction implements PluginApplicationAction { bootStartScripts.getConventionMapping().map("defaultJvmOpts", applicationConvention::getApplicationDefaultJvmArgs); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); - binCopySpec.setFileMode(0x755); + binCopySpec.setFileMode(0755); distribution.getContents().with(binCopySpec); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java index 9fc22f37e59..a8dfbb3c5b0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; +import java.util.function.Consumer; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -156,6 +157,26 @@ public class ApplicationPluginActionIntegrationTests { "custom-boot/bin/custom.bat"); } + @Test + public void scriptsHaveCorrectPermissions() throws IOException { + assertThat( + this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) + .isEqualTo(TaskOutcome.SUCCESS); + String name = this.gradleBuild.getProjectDir().getName(); + File distribution = new File(this.gradleBuild.getProjectDir(), + "build/distributions/" + name + "-boot.tar"); + assertThat(distribution).isFile(); + tarEntries(distribution, (entry) -> { + int filePermissions = entry.getMode() & 0777; + if (entry.isFile() && !entry.getName().startsWith(name + "-boot/bin/")) { + assertThat(filePermissions).isEqualTo(0644); + } + else { + assertThat(filePermissions).isEqualTo(0755); + } + }); + } + private List zipEntryNames(File distribution) throws IOException { List entryNames = new ArrayList<>(); try (ZipFile zipFile = new ZipFile(distribution)) { @@ -179,4 +200,15 @@ public class ApplicationPluginActionIntegrationTests { return entryNames; } + private void tarEntries(File distribution, Consumer consumer) + throws IOException { + try (TarArchiveInputStream input = new TarArchiveInputStream( + new FileInputStream(distribution))) { + TarArchiveEntry entry; + while ((entry = input.getNextTarEntry()) != null) { + consumer.accept(entry); + } + } + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle new file mode 100644 index 00000000000..3f06faff0e9 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle @@ -0,0 +1,13 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'org.springframework.boot' +apply plugin: 'application' +apply plugin: 'java' + +bootJar { + mainClassName = 'com.example.ExampleApplication' +} From ae4e1d037234bbda99fe6a807d20fb0a329dbdfd Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 11 Sep 2018 20:31:12 +0100 Subject: [PATCH 2/2] Test the Gradle plugin against Gradle 4.10 Closes gh-14417 --- .../boot/gradle/junit/GradleCompatibilitySuite.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilitySuite.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilitySuite.java index a51778ef4e8..c25211041dc 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilitySuite.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilitySuite.java @@ -39,7 +39,7 @@ import org.springframework.boot.gradle.testkit.GradleBuild; public final class GradleCompatibilitySuite extends Suite { private static final List GRADLE_VERSIONS = Arrays.asList("default", "4.1", - "4.2", "4.3", "4.4.1", "4.5.1", "4.6", "4.7", "4.8.1", "4.9"); + "4.2", "4.3", "4.4.1", "4.5.1", "4.6", "4.7", "4.8.1", "4.9", "4.10"); public GradleCompatibilitySuite(Class clazz) throws InitializationError { super(clazz, createRunners(clazz));