fabric/gradle/module-validation.gradle
Jason Penilla 679aae3c9a
add fabric-api-bom and fabric-api-catalog (#3487)
* feat: add fabric-api-bom and fabric-api-catalog

* spotlessApply

* Apply suggestions from code review

Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com>

---------

Co-authored-by: modmuss <modmuss50@gmail.com>
Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com>
2024-01-11 15:45:18 +00:00

85 lines
2.5 KiB
Groovy

import groovy.json.JsonSlurper
/*
* This buildscript contains tasks related to the validation of each module in fabric api.
*
* Right now this task verifies each Fabric API module has a module lifecycle specified.
* More functionality will probably be added in the future.
*/
subprojects {
if (it.name == "deprecated" || it.name == "fabric-api-bom" || it.name == "fabric-api-catalog") {
return
}
// Create the task
task validateModules(type: ValidateModuleTask)
}
/**
* Verifies that each module has the required custom values for module lifecycle in it's FMJ.
*
* <p>Example:
* <pre>{@code
* "custom": {
* "fabric-api:module-lifecycle": "stable"
* }
* }</pre>
*/
class ValidateModuleTask extends DefaultTask {
ValidateModuleTask() {
group = "verification"
// Hook up validation to check task
project.tasks.check.dependsOn(this)
}
@TaskAction
void validate() {
def clientOnlyMod = false
def file = (project.file("src/main/resources/fabric.mod.json") as File)
if (!file.exists()) {
file = (project.file("src/client/resources/fabric.mod.json") as File)
clientOnlyMod = true
}
def json = new JsonSlurper().parse(file)
if (json.custom == null) {
throw new GradleException("Module ${project} does not have a custom value containing module lifecycle!")
}
def moduleLifecycle = json.custom.get("fabric-api:module-lifecycle")
if (moduleLifecycle == null) {
throw new GradleException("Module ${project} does not have module lifecycle in custom values!")
}
if (!moduleLifecycle instanceof String) {
throw new GradleException("Module ${project} has an invalid module lifecycle value. The value must be a string but read a ${moduleLifecycle.class}")
}
// Validate the lifecycle value
switch (moduleLifecycle) {
case "stable":
case "experimental":
break
case "deprecated":
if (!project.path.startsWith(":deprecated")) {
throw new GradleException("Deprecated module ${project} must be in the deprecated sub directory.")
}
break
default:
throw new GradleException("Module ${project} has an invalid module lifecycle ${json.custom.get('fabric-api:module-lifecycle')}")
}
if (json.depends == null) {
throw new GradleException("Module ${project} does not have a depends value!")
}
if (json.depends.fabricloader != ">=${project.loader_version}") {
throw new GradleException("Module ${project} does not have a valid fabricloader value! Got \"${json.depends.fabricloader}\" but expected \">=${project.loader_version}\"")
}
}
}