aboutsummaryrefslogtreecommitdiff
path: root/buildSrc
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc')
-rw-r--r--buildSrc/build.gradle.kts27
-rw-r--r--buildSrc/src/main/kotlin/FrostPlugin.kt38
-rw-r--r--buildSrc/src/main/kotlin/Versions.kt2
-rw-r--r--buildSrc/src/main/kotlin/WebGenInstallTask.groovy55
4 files changed, 120 insertions, 2 deletions
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
index 0c518118..aded2979 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -1,5 +1,9 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
plugins {
`kotlin-dsl`
+ groovy
+ idea
}
group = "com.pitchedapps"
@@ -12,13 +16,32 @@ repositories {
// Currently can't read properties from root project
// Reading it manually since it's simple
val rootProps =
- File(project.rootDir.let { if (it.name == "buildSrc") it.parent else it.absolutePath }, "gradle.properties")
+ File(
+ project.rootDir.let { if (it.name == "buildSrc") it.parent else it.absolutePath },
+ "gradle.properties"
+ )
val kau = rootProps.useLines {
it.first { s -> s.startsWith("KAU=") }
}.substring(4).trim()
println("Using kau $kau")
+sourceSets {
+ main {
+ withConvention(GroovySourceSet::class) {
+ groovy.srcDir("src/main/groovy")
+ }
+ }
+}
+
dependencies {
implementation("ca.allanwang.kau:gradle-plugin:$kau")
-} \ No newline at end of file
+ implementation("com.moowork.gradle:gradle-node-plugin:1.3.1")
+}
+
+val compileGroovy = tasks.withType<GroovyCompile>().first()
+val compileKotlin = tasks.withType<KotlinCompile>().first()
+
+compileGroovy.dependsOn.remove(compileKotlin)
+compileKotlin.dependsOn(compileGroovy)
+compileKotlin.classpath += files(compileGroovy.destinationDir)
diff --git a/buildSrc/src/main/kotlin/FrostPlugin.kt b/buildSrc/src/main/kotlin/FrostPlugin.kt
new file mode 100644
index 00000000..8e640f04
--- /dev/null
+++ b/buildSrc/src/main/kotlin/FrostPlugin.kt
@@ -0,0 +1,38 @@
+import com.moowork.gradle.node.NodeExtension
+import com.moowork.gradle.node.NodePlugin
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.apply
+import org.gradle.kotlin.dsl.create
+
+class FrostPlugin : Plugin<Project> {
+
+ companion object {
+ private const val NODE_VERSION = "12.4.0"
+ }
+
+ override fun apply(project: Project) {
+ project.plugins.withId("java-base") {
+ project.applyWebGenPlugin()
+ }
+ project.gradle.taskGraph.whenReady {
+ if (!project.plugins.hasPlugin("java-base")) {
+ throw IllegalArgumentException(
+ "Frost plugin can't be applied without Android or Java or Kotlin plugin."
+ )
+ }
+ }
+ }
+
+ private fun Project.applyWebGenPlugin() {
+ setupNode()
+// tasks.create(WebGenInstallTask.NAME, WebGenInstallTask::class)
+ }
+
+ private fun Project.setupNode() {
+ plugins.apply(NodePlugin::class)
+ val nodeConfig = extensions.findByName("node") as NodeExtension
+ nodeConfig.download = true
+ nodeConfig.version = NODE_VERSION
+ }
+} \ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 7eaa9a4a..5d93dbfa 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -34,4 +34,6 @@ object Versions {
const val scaleImageView = "3.10.0"
// https://github.com/umano/AndroidSlidingUpPanel#importing-the-library
const val slidingPanel = "3.4.0"
+ // https://github.com/srs/gradle-node-plugin/releases
+ const val nodeGradle = "1.3.1"
} \ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/WebGenInstallTask.groovy b/buildSrc/src/main/kotlin/WebGenInstallTask.groovy
new file mode 100644
index 00000000..a70effee
--- /dev/null
+++ b/buildSrc/src/main/kotlin/WebGenInstallTask.groovy
@@ -0,0 +1,55 @@
+import com.moowork.gradle.node.npm.NpmTask
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.model.ObjectFactory
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.OutputFile
+
+/**
+ * Based on https://github.com/apollographql/apollo-android/blob/master/apollo-gradle-plugin/src/main/groovy/com/apollographql/apollo/gradle/ApolloCodegenInstallTask.groovy
+ */
+class WebGenInstallTask extends NpmTask {
+
+ static final String TAG = "frost-web-gen"
+ public static final String NAME = "installWebGen"
+ static final String INSTALLATION_PATH = TAG + File.separator + "node_modules"
+ static final String PACKAGE_FILE_PATH = TAG + File.separator + "package.json"
+
+ static final String TYPESCRIPT_VERSION = "3.3.1"
+ static final String SASS_VERSION = "1.19.0"
+
+ @OutputDirectory
+ final DirectoryProperty installDir = ObjectFactory.directoryProperty()
+ @OutputFile
+ final RegularFileProperty packageFile = ObjectFactory.fileProperty()
+
+ WebGenInstallTask() {
+ setGroup("frost")
+ setDescription("Runs npm install for $TAG")
+ installDir.set(project.file(new File(project.buildDir, INSTALLATION_PATH)))
+ packageFile.set(project.file(new File(project.buildDir, PACKAGE_FILE_PATH)))
+ }
+
+ @Override
+ void exec() {
+ installDir.get().getAsFile().deleteDir()
+ writePackageFile(packageFile.get().getAsFile())
+
+ setArgs(Lists.newArrayList("install", "typescript@" + TYPESCRIPT_VERSION, "sass@" + SASS_VERSION, "--save", "--save-exact"))
+ getLogging().captureStandardOutput(LogLevel.INFO)
+
+ super.exec()
+ }
+
+ /**
+ * Generates a dummy package.json file to silence npm warnings
+ */
+ private static void writePackageFile(File apolloPackageFile) {
+ apolloPackageFile.write(
+ '''{
+ "name": "frost-web-gen"
+}
+'''
+ )
+ }
+} \ No newline at end of file