From 2a7f1615195c2dab765e02c40fee822d19e24c84 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sat, 27 Jan 2024 16:51:48 +0900 Subject: [PATCH] Improve AlwaysUpToDate --- .../plazmamc/alwaysuptodate/AlwaysUpToDate.kt | 2 + .../tasks/CheckUpstreamCommitTasks.kt | 64 +++++++++++++++++++ .../alwaysuptodate/tasks/PaperUpdateTask.kt | 16 +---- .../alwaysuptodate/tasks/PurpurUpdateTask.kt | 25 ++++---- gradle.properties | 2 +- 5 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/CheckUpstreamCommitTasks.kt diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt index 01c7174..6741e96 100644 --- a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt @@ -10,6 +10,8 @@ class AlwaysUpToDate : Plugin { target.extensions.create("alwaysUpToDate", AlwaysUpToDateExtension::class.java) target.tasks.register("updatePaper", PaperUpdateTask::class.java) target.tasks.register("updatePurpur", PurpurUpdateTask::class.java) + target.tasks.register("checkPaperCommit", CheckPaperCommitTask::class.java) + target.tasks.register("checkPurpurCommit", CheckPurpurCommitTask::class.java) } } diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/CheckUpstreamCommitTasks.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/CheckUpstreamCommitTasks.kt new file mode 100644 index 0000000..2633a53 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/CheckUpstreamCommitTasks.kt @@ -0,0 +1,64 @@ +package org.plazmamc.alwaysuptodate.tasks + +import io.papermc.paperweight.util.Git +import io.papermc.paperweight.util.fromJson +import io.papermc.paperweight.util.gson +import org.gradle.api.Project +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.get +import org.plazmamc.alwaysuptodate.AlwaysUpToDateException +import org.plazmamc.alwaysuptodate.AlwaysUpToDateExtension +import org.plazmamc.alwaysuptodate.utils.pathIO +import paper.libs.com.google.gson.JsonObject +import java.net.URI + +abstract class CheckPaperCommitTask : Task() { + + private val property = project.extensions["alwaysUpToDate"] as AlwaysUpToDateExtension + + @TaskAction + fun check() { + println(project.checkCommit(property.paperRepository.get(), property.paperBranch.get(), "paperCommit")) + } + +} + +abstract class CheckPurpurCommitTask : Task() { + + private val property = project.extensions["alwaysUpToDate"] as AlwaysUpToDateExtension + + @TaskAction + fun check() { + println(project.checkCommit(property.purpurRepository.get(), property.purpurBranch.get(), "purpurCommit")) + } + +} + +fun Project.getLatest(repository: String, branch: String) : String { + val regex = "[a-z0-9]{40}\trefs/heads/$branch".toRegex() + + return Git(project.pathIO)("ls-remote", repository).readText()?.lines() + ?.filterNot { regex.matches(it) }?.first()?.split("\t")?.first() + ?: throw AlwaysUpToDateException("Failed to get latest Purpur commit") +} + +fun Project.checkCommit(repository: String, branch: String, propertyName: String) : Boolean { + val latestCommit = project.getLatest(repository, branch) + val currentCommit = project.properties[propertyName] as String + + return currentCommit == latestCommit +} + +fun Project.createCompareComment(repository: String, branch: String, before: String, clear: Boolean = false) { + val builder = StringBuilder() + val rawRepo = URI.create(repository).path.substring(1) + + if (!clear) builder.append(project.file("compare.txt").readText()) + builder.append("\n\n[${rawRepo.split("/").last()} Changes]") + + gson.fromJson(URI.create("https://api.github.com/repos/$rawRepo/compare/$before...$branch").toURL().readText())["commits"].asJsonArray.forEach { + val commit = it.asJsonObject + builder.append("$rawRepo@${commit["sha"].asString.subSequence(0, 7)}: ${commit["commit"].asJsonObject["message"].asString.split("\n")[0]}\n") + } + project.file("compare.txt").writeText(builder.toString()) +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt index e5fd66b..9b1d941 100644 --- a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt @@ -11,25 +11,15 @@ import java.io.File abstract class PaperUpdateTask : Task() { private val property = project.extensions["alwaysUpToDate"] as AlwaysUpToDateExtension - private val regex = "[a-z0-9]{40}\trefs/heads/${property.paperBranch}".toRegex() - private val git = Git(project.pathIO) override fun init() { - outputs.upToDateWhen { check() } - } - - private fun check(): Boolean { - val latestCommit = git("ls-remote", property.paperRepository.get()).readText()?.lines() - ?.filterNot { regex.matches(it) }?.first()?.split("\t")?.first() - ?: throw AlwaysUpToDateException("Failed to get latest Paper commit") - val currentCommit = project.properties["paperCommit"] as String - - return currentCommit == latestCommit + outputs.upToDateWhen { project.checkCommit(property.paperRepository.get(), property.paperBranch.get(), "purpurCommit") } } @TaskAction fun update() { - if (check()) return + if (project.checkCommit(property.paperRepository.get(), property.paperBranch.get(), "purpurCommit")) return + project.createCompareComment(property.paperRepository.get(), property.paperBranch.get(), project.properties["paperCommit"] as String) updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), project.file("gradle.properties")) } diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt index 6d34eec..2dba931 100644 --- a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt @@ -57,24 +57,15 @@ abstract class PurpurUpdateTask : Task() { """.trimIndent() override fun init() { - outputs.upToDateWhen { check() } - } - - private fun check(): Boolean { - val regex = "[a-z0-9]{40}\trefs/heads/${property.purpurBranch}".toRegex() - val latestCommit = Git(project.pathIO)("ls-remote", property.purpurRepository.get()).readText()?.lines() - ?.filterNot { regex.matches(it) }?.first()?.split("\t")?.first() - ?: throw AlwaysUpToDateException("Failed to get latest Purpur commit") - val currentCommit = project.properties["purpurCommit"] as String - - return currentCommit == latestCommit + outputs.upToDateWhen { project.checkCommit(property.purpurRepository.get(), property.purpurBranch.get(), "purpurCommit") } } @TaskAction fun update() { - if (check()) return + if (project.checkCommit(property.purpurRepository.get(), property.purpurBranch.get(), "purpurCommit")) return Git.checkForGit() + project.createCompareComment(property.purpurRepository.get(), property.purpurBranch.get(), project.properties["paperCommit"] as String) val dir = project.layout.cache.resolve("AlwaysUpToDate/UpdatePurpur") if (dir.exists()) dir.toFile().deleteRecursively() @@ -86,7 +77,15 @@ abstract class PurpurUpdateTask : Task() { updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), pufferfish.resolve("gradle.properties").toFile(), "paperRef=") updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), purpur.resolve("gradle.properties").toFile()) - updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), project.file("gradle.properties")) + + if (!project.checkCommit(property.paperRepository.get(), property.paperBranch.get(), "paperCommit")) { + project.createCompareComment(property.paperRepository.get(), property.paperBranch.get(), project.properties["paperCommit"] as String) + updatePaperCommit( + property.paperRepository.get(), + property.paperBranch.get(), + project.file("gradle.properties") + ) + } val latestCommit = git("ls-remote", property.purpurRepository.get()).readText()?.lines() ?.filterNot { "[a-z0-9]{40}\trefs/heads/${property.purpurBranch.get()}".toRegex().matches(it) }?.first()?.split("\t")?.first() diff --git a/gradle.properties b/gradle.properties index d3bef2a..7cfafcd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ version = 1.20.4-R0.1-SNAPSHOT mcVersion = 1.20.4 -paperCommit = b03f255532bba5a1398f03207756f42e5597ccb8 +paperCommit = 1ed50dade82437bf45fe74833d7e6ac2961842a2 purpurCommit = eab2140f5e34a97dc95ae692ee71b622b848b577 group = org.plazmamc.plazma