From b254cd15eda784507b59a79a72371d8bf6c8d973 Mon Sep 17 00:00:00 2001 From: Sergey Morgunov Date: Mon, 28 Aug 2023 16:15:34 +0300 Subject: [PATCH] Create custom Twirl configuration for Gradle Plugin --- .github/workflows/build-test.yml | 2 +- gradle-twirl/build.gradle.kts | 12 +++++++- .../java/play/twirl/gradle/TwirlPlugin.java | 30 +++++++++++++++++-- scripts/test-code.sh | 2 +- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index ad3b538e..693899b7 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -27,7 +27,7 @@ jobs: gradle-build-root: gradle-twirl cmd: | sbt validateCode - sbt compiler/publishM2 + sbt +compiler/publishM2 cd gradle-twirl && ./gradlew clean spotlessCheck --no-daemon check-binary-compatibility: diff --git a/gradle-twirl/build.gradle.kts b/gradle-twirl/build.gradle.kts index 5132ca5e..0ded2999 100644 --- a/gradle-twirl/build.gradle.kts +++ b/gradle-twirl/build.gradle.kts @@ -17,7 +17,7 @@ plugins { val compilerVersion: String = Properties().apply { val file = file("$projectDir/../compiler/version.properties") - if (!file.exists()) throw GradleException("Install Twirl Compiler to local Maven repository by `sbt compiler/publishM2` command") + if (!file.exists()) throw GradleException("Install Twirl Compiler to local Maven repository by `sbt +compiler/publishM2` command") file.inputStream().use { load(it) } if (this.getProperty("twirl.compiler.version").isNullOrEmpty()) throw GradleException("`twirl.compiler.version` key didn't find in ${file.absolutePath}") }.getProperty("twirl.compiler.version") @@ -32,6 +32,16 @@ repositories { mavenLocal() } +dependencies { + compileOnly("com.typesafe.play:twirl-compiler_2.13:$compilerVersion") +} + +tasks.jar { + manifest { + attributes("Implementation-Version" to version) + } +} + testing { suites { // Configure the built-in test suite diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java index 0629fc88..9ccee52d 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java @@ -6,6 +6,8 @@ import javax.inject.Inject; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.DirectoryProperty; import org.gradle.api.internal.lambdas.SerializableLambdas; import org.gradle.api.internal.tasks.DefaultSourceSet; import org.gradle.api.model.ObjectFactory; @@ -30,9 +32,27 @@ public TwirlPlugin(ObjectFactory objectFactory) { public void apply(final Project project) { project.getPluginManager().apply(ScalaBasePlugin.class); + Configuration twirlConfiguration = createDefaultTwirlConfiguration(project); + configureSourceSetDefaults(project); } + private Configuration createDefaultTwirlConfiguration(Project project) { + // Get Twirl version from Gradle Plugin MANIFEST.MF + String twirlVersion = getClass().getPackage().getImplementationVersion(); + Configuration conf = project.getConfigurations().create("twirl"); + conf.setDescription("The Twirl compiler library."); + conf.setVisible(false); + conf.setTransitive(true); + conf.defaultDependencies( + dependencies -> + dependencies.add( + project + .getDependencies() + .create("com.typesafe.play:twirl-compiler_2.13:" + twirlVersion))); + return conf; + } + private void configureSourceSetDefaults(final Project project) { javaPluginExtension(project) .getSourceSets() @@ -64,11 +84,15 @@ private void createTwirlCompileTask( twirlCompile -> { twirlCompile.setDescription("Compiles the " + twirlSource + "."); twirlCompile.setSource(twirlSource); + DirectoryProperty buildDirectory = project.getLayout().getBuildDirectory(); twirlCompile .getDestinationDirectory() - .convention(project.getLayout().getBuildDirectory()) - .dir( - "generated/sources/" + twirlSource.getName() + "/" + sourceSet.getName()); + .convention( + buildDirectory.dir( + "generated/sources/" + + twirlSource.getName() + + "/" + + sourceSet.getName())); }); } diff --git a/scripts/test-code.sh b/scripts/test-code.sh index 5e2f1d51..584524a5 100755 --- a/scripts/test-code.sh +++ b/scripts/test-code.sh @@ -3,5 +3,5 @@ # Copyright (C) from 2022 The Play Framework Contributors , 2011-2021 Lightbend Inc. sbt "++$MATRIX_SCALA test" || exit 1 -sbt +publishLocal plugin/test plugin/scripted || exit 1 +sbt +publishLocal +compiler/publishM2 plugin/test plugin/scripted || exit 1 (cd gradle-twirl && ./gradlew clean check -x spotlessCheck --no-daemon) || exit 1