aboutsummaryrefslogtreecommitdiff
path: root/build-src/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'build-src/src/main')
-rw-r--r--build-src/src/main/kotlin/GenerateItemIds.kt72
-rw-r--r--build-src/src/main/kotlin/RepoDownload.kt41
-rw-r--r--build-src/src/main/kotlin/helpers.kt17
-rw-r--r--build-src/src/main/kotlin/ledger-globals.gradle.kts25
-rw-r--r--build-src/src/main/kotlin/ledger-repo.gradle.kts1
-rw-r--r--build-src/src/main/kotlin/ledger-staged-proguard.gradle.kts1
6 files changed, 157 insertions, 0 deletions
diff --git a/build-src/src/main/kotlin/GenerateItemIds.kt b/build-src/src/main/kotlin/GenerateItemIds.kt
new file mode 100644
index 0000000..24f2f62
--- /dev/null
+++ b/build-src/src/main/kotlin/GenerateItemIds.kt
@@ -0,0 +1,72 @@
+import com.google.gson.Gson
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.Internal
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.TaskAction
+import java.io.File
+
+abstract class GenerateItemIds : DefaultTask() {
+ @get: OutputDirectory
+ abstract val outputDirectory: DirectoryProperty
+
+ @get: InputDirectory
+ abstract val repoFiles: DirectoryProperty
+
+ @get: Input
+ abstract val repoHash: Property<String>
+
+ @get: Input
+ abstract val packageName: Property<String>
+
+ @get:Internal
+ val outputFile get() = outputDirectory.asFile.get().resolve(packageName.get().replace(".", "/") + "/ItemIds.java")
+
+ init {
+ repoHash.convention("unknown-repo-git-hash")
+ }
+
+ @TaskAction
+ fun generateItemIds() {
+ val nonIdName = "[^A-Z0-9_]".toRegex()
+
+ data class Item(val id: String, val file: File) {
+ val javaName get() = id.replace(nonIdName, { "__" + it.value.single().code })
+ }
+
+ val items = mutableListOf<Item>()
+ for (listFile in repoFiles.asFile.get().resolve("items").listFiles() ?: emptyArray()) {
+ listFile ?: continue
+ if (listFile.extension != "json") {
+ error("Unknown file $listFile")
+ }
+ items.add(Item(listFile.nameWithoutExtension, listFile))
+ }
+ items.sortedBy { it.id }
+ outputFile.parentFile.mkdirs()
+ val writer = outputFile.writer().buffered()
+ writer.appendLine("// @generated from " + repoHash.get())
+ writer.appendLine("package " + packageName.get() + ";")
+ writer.appendLine()
+ writer.appendLine("import moe.nea.ledger.ItemId;")
+ writer.appendLine()
+ writer.appendLine("/**")
+ writer.appendLine(" * Automatically generated {@link ItemId} list.")
+ writer.appendLine(" */")
+ writer.appendLine("@org.jspecify.annotations.NullMarked")
+ writer.appendLine("public interface ItemIds {")
+ val gson = Gson()
+ for (item in items) {
+ writer.appendLine("\t/**")
+ writer.appendLine("\t * @see <a href=${gson.toJson("https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO/blob/${repoHash.get()}/items/${item.id}.json")}>JSON definition</a>")
+ writer.appendLine("\t */")
+ writer.appendLine("\tItemId ${item.javaName} =" +
+ " ItemId.forName(${gson.toJson(item.id)});")
+ }
+ writer.appendLine("}")
+ writer.close()
+ }
+}
diff --git a/build-src/src/main/kotlin/RepoDownload.kt b/build-src/src/main/kotlin/RepoDownload.kt
new file mode 100644
index 0000000..182c66f
--- /dev/null
+++ b/build-src/src/main/kotlin/RepoDownload.kt
@@ -0,0 +1,41 @@
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.TaskAction
+import java.net.URI
+import java.util.zip.ZipInputStream
+
+abstract class RepoDownload : DefaultTask() {
+ @get:Input
+ abstract val hash: Property<String>
+
+ @get:OutputDirectory
+ abstract val outputDirectory: DirectoryProperty
+
+ init {
+ outputDirectory.convention(project.layout.buildDirectory.dir("extracted-test-repo"))
+ }
+
+ @TaskAction
+ fun performDownload() {
+ val outputDir = outputDirectory.asFile.get().absoluteFile
+ outputDir.mkdirs()
+ URI("https://github.com/notEnoughUpdates/notEnoughUpdates-rEPO/archive/${hash.get()}.zip").toURL().openStream()
+ .let(::ZipInputStream)
+ .use { zipInput ->
+ while (true) {
+ val entry = zipInput.nextEntry ?: break
+ val destination = outputDir.resolve(
+ entry.name.substringAfter('/')).absoluteFile
+ require(outputDir in generateSequence(destination) { it.parentFile })
+ if (entry.isDirectory) continue
+ destination.parentFile.mkdirs()
+ destination.outputStream().use { output ->
+ zipInput.copyTo(output)
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/build-src/src/main/kotlin/helpers.kt b/build-src/src/main/kotlin/helpers.kt
new file mode 100644
index 0000000..48c230e
--- /dev/null
+++ b/build-src/src/main/kotlin/helpers.kt
@@ -0,0 +1,17 @@
+import org.gradle.api.plugins.ExtensionAware
+import org.gradle.kotlin.dsl.DependencyHandlerScope
+import org.gradle.kotlin.dsl.configure
+import org.gradle.kotlin.dsl.findByType
+
+
+inline fun <reified T : Any> ExtensionAware.configureIf(crossinline block: T.() -> Unit) {
+ if (extensions.findByType<T>() != null) {
+ extensions.configure<T> { block() }
+ }
+}
+
+val ktor_version = "3.0.3"
+
+fun DependencyHandlerScope.declareKtorVersion() {
+ "implementation"(platform("io.ktor:ktor-bom:$ktor_version"))
+}
diff --git a/build-src/src/main/kotlin/ledger-globals.gradle.kts b/build-src/src/main/kotlin/ledger-globals.gradle.kts
new file mode 100644
index 0000000..4238322
--- /dev/null
+++ b/build-src/src/main/kotlin/ledger-globals.gradle.kts
@@ -0,0 +1,25 @@
+apply(plugin = "org.gradle.base")
+
+repositories {
+ mavenCentral()
+ maven("https://repo.nea.moe/releases/")
+ maven("https://repo.spongepowered.org/maven/")
+ maven("https://maven.notenoughupdates.org/releases")
+ maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1")
+}
+
+tasks.withType<AbstractArchiveTask> {
+ this.isPreserveFileTimestamps = false
+ this.isReproducibleFileOrder = true
+ this.archiveBaseName.set("ledger-" + project.path.replace(":", "-").trim('-'))
+}
+
+tasks.withType<Test> {
+ useJUnitPlatform()
+}
+
+tasks.withType<JavaCompile> {
+ options.encoding = "UTF-8"
+}
+
+
diff --git a/build-src/src/main/kotlin/ledger-repo.gradle.kts b/build-src/src/main/kotlin/ledger-repo.gradle.kts
new file mode 100644
index 0000000..1a9be63
--- /dev/null
+++ b/build-src/src/main/kotlin/ledger-repo.gradle.kts
@@ -0,0 +1 @@
+tasks.register("downloadRepo", RepoDownload::class)
diff --git a/build-src/src/main/kotlin/ledger-staged-proguard.gradle.kts b/build-src/src/main/kotlin/ledger-staged-proguard.gradle.kts
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/build-src/src/main/kotlin/ledger-staged-proguard.gradle.kts
@@ -0,0 +1 @@
+