mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-22 17:37:38 +00:00

- 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.
61 lines
1.6 KiB
Kotlin
61 lines
1.6 KiB
Kotlin
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"
|
|
}
|
|
}
|