Improve AlwaysUpToDate

This commit is contained in:
AlphaKR93
2024-01-27 16:51:48 +09:00
parent 1338975cb7
commit 2a7f161519
5 changed files with 82 additions and 27 deletions

View File

@@ -10,6 +10,8 @@ class AlwaysUpToDate : Plugin<Project> {
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)
}
}

View File

@@ -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<JsonObject>(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())
}

View File

@@ -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"))
}

View File

@@ -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()

View File

@@ -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