feat: Allow checking out repo PRs

This commit is contained in:
Linnea Gräf
2025-03-18 19:28:15 +01:00
parent 3ca60f0daa
commit 40ce4f8567
3 changed files with 105 additions and 89 deletions

View File

@@ -1,6 +1,7 @@
package moe.nea.firmament.commands package moe.nea.firmament.commands
import com.mojang.brigadier.CommandDispatcher import com.mojang.brigadier.CommandDispatcher
import com.mojang.brigadier.arguments.IntegerArgumentType
import com.mojang.brigadier.arguments.StringArgumentType.string import com.mojang.brigadier.arguments.StringArgumentType.string
import io.ktor.client.statement.bodyAsText import io.ktor.client.statement.bodyAsText
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
@@ -130,6 +131,15 @@ fun firmamentCommand() = literal("firmament") {
} }
} }
thenLiteral("repo") { thenLiteral("repo") {
thenLiteral("checkpr") {
thenArgument("prnum", IntegerArgumentType.integer(1)) { prnum ->
thenExecute {
val prnum = this[prnum]
source.sendFeedback(tr("firmament.repo.reload.pr", "Temporarily reloading repo from PR #${prnum}."))
RepoManager.downloadOverridenBranch("refs/pull/$prnum/head")
}
}
}
thenLiteral("reload") { thenLiteral("reload") {
thenLiteral("fetch") { thenLiteral("fetch") {
thenExecute { thenExecute {

View File

@@ -1,5 +1,3 @@
package moe.nea.firmament.repo package moe.nea.firmament.repo
import io.ktor.client.call.body import io.ktor.client.call.body
@@ -55,12 +53,12 @@ object RepoDownloadManager {
@Serializable @Serializable
private class GithubCommitsResponse(val sha: String) private class GithubCommitsResponse(val sha: String)
private suspend fun requestLatestGithubSha(): String? { private suspend fun requestLatestGithubSha(branchOverride: String?): String? {
if (RepoManager.Config.branch == "prerelease") { if (RepoManager.Config.branch == "prerelease") {
RepoManager.Config.branch = "master" RepoManager.Config.branch = "master"
} }
val response = val response =
Firmament.httpClient.get("https://api.github.com/repos/${RepoManager.Config.username}/${RepoManager.Config.reponame}/commits/${RepoManager.Config.branch}") Firmament.httpClient.get("https://api.github.com/repos/${RepoManager.Config.username}/${RepoManager.Config.reponame}/commits/${branchOverride ?: RepoManager.Config.branch}")
if (response.status.value != 200) { if (response.status.value != 200) {
return null return null
} }
@@ -79,8 +77,9 @@ object RepoDownloadManager {
* Downloads the latest repository from github, setting [latestSavedVersionHash]. * Downloads the latest repository from github, setting [latestSavedVersionHash].
* @return true, if an update was performed, false, otherwise (no update needed, or wasn't able to complete update) * @return true, if an update was performed, false, otherwise (no update needed, or wasn't able to complete update)
*/ */
suspend fun downloadUpdate(force: Boolean): Boolean = withContext(CoroutineName("Repo Update Check")) { suspend fun downloadUpdate(force: Boolean, branch: String? = null): Boolean =
val latestSha = requestLatestGithubSha() withContext(CoroutineName("Repo Update Check")) {
val latestSha = requestLatestGithubSha(branch)
if (latestSha == null) { if (latestSha == null) {
logger.warn("Could not request github API to retrieve latest REPO sha.") logger.warn("Could not request github API to retrieve latest REPO sha.")
return@withContext false return@withContext false

View File

@@ -102,6 +102,13 @@ object RepoManager {
fun getNEUItem(skyblockId: SkyblockId): NEUItem? = neuRepo.items.getItemBySkyblockId(skyblockId.neuItem) fun getNEUItem(skyblockId: SkyblockId): NEUItem? = neuRepo.items.getItemBySkyblockId(skyblockId.neuItem)
fun downloadOverridenBranch(branch: String) {
Firmament.coroutineScope.launch {
RepoDownloadManager.downloadUpdate(true, branch)
reload()
}
}
fun launchAsyncUpdate(force: Boolean = false) { fun launchAsyncUpdate(force: Boolean = false) {
Firmament.coroutineScope.launch { Firmament.coroutineScope.launch {
RepoDownloadManager.downloadUpdate(force) RepoDownloadManager.downloadUpdate(force)