From 6c3f8333620e61bc8f00aca4d64b117ac7d0149b Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Sun, 6 Jul 2025 12:03:13 +0200 Subject: build: use composite builds instead of buildSrc --- build-logic/src/main/kotlin/RepoDownload.kt | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 build-logic/src/main/kotlin/RepoDownload.kt (limited to 'build-logic/src/main/kotlin/RepoDownload.kt') diff --git a/build-logic/src/main/kotlin/RepoDownload.kt b/build-logic/src/main/kotlin/RepoDownload.kt new file mode 100644 index 0000000..42a09b3 --- /dev/null +++ b/build-logic/src/main/kotlin/RepoDownload.kt @@ -0,0 +1,41 @@ +import java.net.URI +import java.util.zip.ZipInputStream +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 + +abstract class RepoDownload : DefaultTask() { + @get:Input + abstract val hash: Property + + @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) + } + } + } + } +} -- cgit