aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java15
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java4
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java48
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java22
4 files changed, 53 insertions, 36 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
index 5e8834d..8a6d175 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
@@ -2,32 +2,25 @@ package ch.fhnw.thga.gradleplugins;
import javax.inject.Inject;
+import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.ProjectLayout;
-import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
-import org.gradle.api.provider.Provider;
-import groovy.transform.Internal;
public abstract class FregeExtension {
public static final String DEFAULT_FREGE_EXTENSION_NAMESPACE = "frege";
public static final String FREGE_VERSION_BUILD_FILE_KEY = "fregeVersion";
public static final String FREGE_RELEASE_BUILD_FILE_KEY = "fregeRelease";
- public static final String FREGE_COMPILER_BUILD_FILE_KEY = "fregeCompilerPath";
+ public static final String FREGE_COMPILER_OUTPUT_DIRECTORY_KEY = "fregeCompilerOutputDirectory";
public abstract Property<String> getFregeVersion();
public abstract Property<String> getFregeRelease();
- public abstract RegularFileProperty getFregeCompilerPath();
-
- @Internal
- public Provider<String> getDefaultJarName() {
- return getFregeVersion().map(version -> version + ".jar");
- }
+ public abstract DirectoryProperty getFregeCompilerOutputDirectory();
@Inject
public FregeExtension(ProjectLayout projectLayout) {
- getFregeCompilerPath().set(projectLayout.getProjectDirectory().file("lib/frege" + getDefaultJarName()));
+ getFregeCompilerOutputDirectory().convention(projectLayout.getProjectDirectory().dir("lib"));
}
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index ffa788f..709552c 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -2,8 +2,6 @@ package ch.fhnw.thga.gradleplugins;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
-import org.gradle.api.file.RegularFile;
-import org.gradle.api.provider.Property;
public class FregePlugin implements Plugin<Project> {
public static final String SETUP_FREGE_COMPILER_TASK_NAME = "setupFregeCompiler";
@@ -16,7 +14,7 @@ public class FregePlugin implements Plugin<Project> {
project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> {
task.getFregeVersion().set(extension.getFregeVersion());
task.getFregeRelease().set(extension.getFregeRelease());
- task.getFregeCompilerPath().set(extension.getFregeCompilerPath());
+ task.getFregeCompilerOutputDirectory().set(extension.getFregeCompilerOutputDirectory());
});
//Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> {
// c.setVisible(false);
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java
index a7f48ba..b3d08a1 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java
@@ -9,13 +9,21 @@ import java.nio.channels.ReadableByteChannel;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
-import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.file.DirectoryProperty;
+import org.gradle.api.file.RegularFile;
+import org.gradle.api.logging.Logger;
+import org.gradle.api.logging.Logging;
import org.gradle.api.provider.Property;
+import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;
public abstract class SetupFregeCompilerTask extends DefaultTask {
+ public static final Logger LOGGER = Logging.getLogger(SetupFregeCompilerTask.class);
+
+ private static final String FREGE_GITHUB_URL_PREFIX = "https://github.com/Frege/frege/releases/download";
@Input
public abstract Property<String> getFregeVersion();
@@ -23,21 +31,35 @@ public abstract class SetupFregeCompilerTask extends DefaultTask {
@Input
public abstract Property<String> getFregeRelease();
+ @Internal
+ public abstract DirectoryProperty getFregeCompilerOutputDirectory();
+
+ @Internal
+ public Provider<String> getFregeVersionJarName() {
+ return getFregeVersion().map(version -> "frege" + version + ".jar");
+ }
+
+ @Internal
+ public Provider<String> getDownloadUrl() {
+ return getFregeVersionJarName()
+ .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getFregeRelease().get(), name));
+ }
+
@OutputFile
- public abstract RegularFileProperty getFregeCompilerPath();
+ public Provider<RegularFile> getFregeCompilerOutputPath() {
+ return getFregeCompilerOutputDirectory().file(getFregeVersionJarName());
+ }
@TaskAction
public void downloadFregeCompiler() {
- try {
- ReadableByteChannel readChannel = Channels.newChannel(
- new URL("https://github.com/Frege/frege/releases/download/" +
- getFregeRelease().get() + "/frege" + getFregeVersion().get() + ".jar").openStream());
- FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerPath().get().getAsFile().getAbsolutePath());
- FileChannel writeChannel = fregeCompilerDestinationPath.getChannel();
- writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE);
- System.out.println("Successfully downloaded compiler to" + getFregeCompilerPath().get());
- } catch (IOException e) {
- throw new GradleException(e.getMessage());
- }
+ String fregeCompilerOutputPath = getFregeCompilerOutputPath().get().getAsFile().getAbsolutePath();
+ try (ReadableByteChannel readChannel = Channels.newChannel(new URL(getDownloadUrl().get()).openStream());
+ FileOutputStream fregeCompilerOutputStream = new FileOutputStream(fregeCompilerOutputPath);) {
+ FileChannel writeChannel = fregeCompilerOutputStream.getChannel();
+ writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE);
+ LOGGER.lifecycle(String.format("Successfully downloaded %s to: %s", getFregeVersionJarName().get(), fregeCompilerOutputPath));
+ } catch (IOException e) {
+ throw new GradleException(e.getMessage());
+ }
}
}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index 672b065..4f22bc2 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
@@ -1,6 +1,6 @@
package ch.fhnw.thga.gradleplugins;
-import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_COMPILER_BUILD_FILE_KEY;
+import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_COMPILER_OUTPUT_DIRECTORY_KEY;
import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_RELEASE_BUILD_FILE_KEY;
import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_VERSION_BUILD_FILE_KEY;
import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_EXTENSION_NAME;
@@ -58,7 +58,7 @@ public class FregePluginFunctionalTest {
private static String buildFileFregeExtension(String fregeVersion, String fregeRelease,
Optional<String> compilerPath) {
- String optionalCompilerPathLine = compilerPath.isPresent() ? String.format(" %s = %s\n", FREGE_COMPILER_BUILD_FILE_KEY, compilerPath.get()) : "";
+ String optionalCompilerPathLine = compilerPath.isPresent() ? String.format(" %s = %s\n", FREGE_COMPILER_OUTPUT_DIRECTORY_KEY, compilerPath.get()) : "";
return String.format("%s {\n %s = %s\n %s = %s\n%s}\n", FREGE_EXTENSION_NAME, FREGE_VERSION_BUILD_FILE_KEY,
fregeVersion, FREGE_RELEASE_BUILD_FILE_KEY, fregeRelease, optionalCompilerPathLine);
}
@@ -74,6 +74,7 @@ public class FregePluginFunctionalTest {
assertTrue(project.getTasks().getByName(SETUP_FREGE_COMPILER_TASK_NAME) instanceof SetupFregeCompilerTask);
BuildResult result = GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath()
.withArguments(SETUP_FREGE_COMPILER_TASK_NAME).build();
+ System.out.println(result.getOutput());
assertEquals(SUCCESS, result.task(":" + SETUP_FREGE_COMPILER_TASK_NAME).getOutcome());
}
@@ -130,7 +131,7 @@ public class FregePluginFunctionalTest {
String expectedFregeConfig =
FREGE_EXTENSION_NAME + " {\n" + " fregeVersion = " + fregeVersion + "\n"
+ " fregeRelease = " + fregeRelease + "\n"
- + " fregeCompilerPath = " + fregeCompilerPath + "\n" + "}\n";
+ + " fregeCompilerOutputDirectory = " + fregeCompilerPath + "\n" + "}\n";
assertEquals(expectedFregeConfig, buildFileFregeExtension(fregeVersion, fregeRelease, Optional.of(fregeCompilerPath)));
}
@@ -139,12 +140,15 @@ public class FregePluginFunctionalTest {
throws Exception {
String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.empty());
assertSetupFregeCompilerTask(fregeConfig);
- }
+ assertTrue(new File(testProjectDir.getAbsolutePath() + "/lib/frege3.25.84.jar").exists());
- @Test
- void given_frege_compiler_version_3_25_84_when_running_the_setup_frege_compiler_task_then_the_frege_compiler_is_correctly_setup()
- throws Exception {
- String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.of("layout.projectDirectory.file('lib/frege3.25.84')"));
- assertSetupFregeCompilerTask(fregeConfig);
}
+
+ @Test
+ void given_frege_compiler_version_3_25_84_when_running_the_setup_frege_compiler_task_then_the_frege_compiler_is_correctly_setup()
+ throws Exception {
+ String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.of("layout.buildDirectory.dir('dist')"));
+ assertSetupFregeCompilerTask(fregeConfig);
+ assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/dist/frege3.25.84.jar").exists());
+ }
} \ No newline at end of file