aboutsummaryrefslogtreecommitdiff
path: root/buildSrc/src/main/kotlin/WebGenInstallTask.kt
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc/src/main/kotlin/WebGenInstallTask.kt')
-rw-r--r--buildSrc/src/main/kotlin/WebGenInstallTask.kt68
1 files changed, 68 insertions, 0 deletions
diff --git a/buildSrc/src/main/kotlin/WebGenInstallTask.kt b/buildSrc/src/main/kotlin/WebGenInstallTask.kt
new file mode 100644
index 00000000..2076ee84
--- /dev/null
+++ b/buildSrc/src/main/kotlin/WebGenInstallTask.kt
@@ -0,0 +1,68 @@
+import com.moowork.gradle.node.npm.NpmTask
+import org.gradle.api.DefaultTask
+import org.gradle.api.logging.LogLevel
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+import java.io.File
+
+/**
+ * Based on https://github.com/apollographql/apollo-android/blob/master/apollo-gradle-plugin/src/main/groovy/com/apollographql/apollo/gradle/ApolloCodegenInstallTask.groovy
+ */
+class WebGenInstallTask : DefaultTask() {
+
+ companion object {
+ const val TAG = "frost-web-gen"
+ const val NAME = "installWebGen"
+ val INSTALLATION_PATH = TAG + File.separator + "node_modules"
+ val PACKAGE_FILE_PATH = TAG + File.separator + "package.json"
+
+ const val TYPESCRIPT_VERSION = "3.3.1"
+ const val SASS_VERSION = "1.19.0"
+ }
+
+ @OutputDirectory
+ val installDir = project.layout.directoryProperty()
+ @OutputFile
+ val packageFile = project.layout.fileProperty()
+
+ val npmTask = NpmTask()
+
+ init {
+ group = "frost"
+ description = "Runs npm install for $TAG"
+
+ installDir.set(project.file(File(project.buildDir, INSTALLATION_PATH)))
+ packageFile.set(project.file(File(project.buildDir, PACKAGE_FILE_PATH)))
+
+ npmTask.setWorkingDir(File(project.buildDir, TAG))
+ }
+
+ @TaskAction
+ fun exec() {
+ installDir.get().asFile.takeIf { it.isDirectory }?.deleteRecursively()
+ writePackageFile(packageFile.get().asFile)
+ npmTask.setArgs(
+ listOf(
+ "install",
+ "typescript@$TYPESCRIPT_VERSION",
+ "sass@$SASS_VERSION",
+ "--save",
+ "--save-exact"
+ )
+ )
+ npmTask.logging.captureStandardOutput(LogLevel.INFO)
+ npmTask.exec()
+ }
+
+ private fun writePackageFile(packageFile: File) {
+ packageFile.writeText(
+ """
+ {
+ "name": "$TAG",
+ "version": "1.0"
+ }
+ """.trimIndent()
+ )
+ }
+} \ No newline at end of file