mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 05:33:00 +00:00 
			
		
		
		
	Convert build script to Kotlin
- Add a new Node plugin. This automatically installs npm dependencies and provides a "NpxExecToDir" to dir task. This allows us to make the doc website task dependencies a little nicer, by simply chaining tasks together, rather than doing dependsOn + `input.files(the other task output)`. - Switch over to CurseForgeGradle from CurseGradle. The latter is super clunky to use in non-Groovy languages. - Copy our Modrinth description body to our repo, and add support for syncing it. We'll still have to do CF manually I think.
This commit is contained in:
		
							
								
								
									
										60
									
								
								buildSrc/src/main/kotlin/cc/tweaked/gradle/Node.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								buildSrc/src/main/kotlin/cc/tweaked/gradle/Node.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| package cc.tweaked.gradle | ||||
| 
 | ||||
| import org.gradle.api.DefaultTask | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.file.Directory | ||||
| import org.gradle.api.file.DirectoryProperty | ||||
| import org.gradle.api.provider.Provider | ||||
| import org.gradle.api.tasks.* | ||||
| import java.io.File | ||||
| 
 | ||||
| class NodePlugin : Plugin<Project> { | ||||
|     override fun apply(project: Project) { | ||||
|         val extension = project.extensions.create("node", NodeExtension::class.java) | ||||
|         project.tasks.register(NpmInstall.TASK_NAME, NpmInstall::class.java) { | ||||
|             projectRoot.convention(extension.projectRoot) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| abstract class NodeExtension(project: Project) { | ||||
|     /** The directory containing `package-lock.json` and `node_modules/`. */ | ||||
|     abstract val projectRoot: DirectoryProperty | ||||
| 
 | ||||
|     init { | ||||
|         projectRoot.convention(project.layout.projectDirectory) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /** Installs node modules as dependencies. */ | ||||
| abstract class NpmInstall : DefaultTask() { | ||||
|     @get:Internal | ||||
|     abstract val projectRoot: DirectoryProperty | ||||
| 
 | ||||
|     @get:InputFile | ||||
|     @get:PathSensitive(PathSensitivity.NONE) | ||||
|     val packageLock: Provider<File> = projectRoot.file("package-lock.json").map { it.asFile } | ||||
| 
 | ||||
|     @get:OutputDirectory | ||||
|     val nodeModules: Provider<Directory> = projectRoot.dir("node_modules") | ||||
| 
 | ||||
|     @TaskAction | ||||
|     fun install() { | ||||
|         project.exec { | ||||
|             commandLine("npm", "ci") | ||||
|             workingDir = projectRoot.get().asFile | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     companion object { | ||||
|         internal const val TASK_NAME: String = "npmInstall" | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| abstract class NpxExecToDir : ExecToDir() { | ||||
|     init { | ||||
|         dependsOn(NpmInstall.TASK_NAME) | ||||
|         executable = "npx" | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates