Don't build Suwayomi-Server, just download it

This commit is contained in:
Syer10
2024-03-29 16:11:49 -04:00
parent 4e4d0bfa9d
commit 5aedfea67f
2 changed files with 41 additions and 70 deletions

View File

@@ -5,9 +5,8 @@ import Config.tachideskVersion
import de.undercouch.gradle.tasks.download.Download
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.Exec
import org.gradle.internal.impldep.com.google.gson.Gson
import org.gradle.kotlin.dsl.TaskContainerScope
import org.gradle.kotlin.dsl.register
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
@@ -22,11 +21,8 @@ import kotlin.streams.asSequence
private const val tachideskGroup = "tachidesk"
private const val deleteOldTachideskTask = "deleteOldTachidesk"
private const val downloadTask = "downloadTar"
private const val extractTask = "extractTar"
private const val setupCITask = "setupServerCI"
private const val buildTachideskTask = "buildTachidesk"
private const val copyTachideskJarTask = "copyTachidesk"
private const val downloadApiTask = "downloadApiJson"
private const val downloadTachidesk = "downloadTachidesk"
private const val signTachideskJar = "signJar"
private const val modifyTachideskJarManifest = "modifyManifest"
private const val deleteTmpFolderTask = "deleteTmp"
@@ -60,12 +56,12 @@ private fun Project.getSigningIdentity() = "${properties["compose.desktop.mac.si
private fun isSigning(properties: Map<String, Any?>) = properties["compose.desktop.mac.sign"].toString() == "true"
private const val tmpPath = "tmp"
private val tarUrl = if (preview) {
"https://github.com/Suwayomi/Suwayomi-Server/archive/$previewCommit.tar.gz"
private val apiUrl = if (preview) {
"https://api.github.com/repos/Suwayomi/Suwayomi-Server-preview/releases/tags/$previewCommit"
} else {
"https://github.com/Suwayomi/Suwayomi-Server/archive/refs/tags/$tachideskVersion.tar.gz"
"https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/tags/$tachideskVersion"
}
private const val tmpTar = "$tmpPath/Suwayomi-Server.tar.gz"
private const val tmpJson = "$tmpPath/Suwayomi-Server.json"
private val fileSuffix get() = if (preview) {
previewCommit
} else {
@@ -77,6 +73,15 @@ private const val macosJarFolder = "$tmpPath/macos/jar/"
private const val destination = "src/main/resources/"
private const val finalJar = "src/main/resources/Tachidesk.jar"
internal class Asset(
val name: String,
val browser_download_url: String,
)
internal class Release(
val assets: Array<Asset>
)
fun TaskContainerScope.registerTachideskTasks(project: Project) {
with(project) {
register<Delete>(deleteOldTachideskTask) {
@@ -84,73 +89,41 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
val tachideskJar = file(finalJar)
onlyIf {
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull() != serverCode
jar.manifest?.mainAttributes?.getValue("JUI-KEY")?.toIntOrNull() != serverCode
}
}
delete(tachideskJar)
}
register<Download>(downloadTask) {
register<Download>(downloadApiTask) {
group = tachideskGroup
mustRunAfter(deleteOldTachideskTask)
onlyIf { !tachideskExists(projectDir) && !file(tmpTar).exists() }
onlyIf { !tachideskExists(projectDir) && !file(finalJar).exists() }
onlyIfTachideskDoesntExist(projectDir)
src(tarUrl)
dest(tmpTar)
src(apiUrl)
dest(tmpJson)
}
register<Copy>(extractTask) {
register<Download>(downloadTachidesk) {
group = tachideskGroup
mustRunAfter(downloadTask)
onlyIf { !tachideskExists(projectDir) && !file(tmpServerFolder).exists() }
mustRunAfter(downloadApiTask)
onlyIf { !tachideskExists(projectDir) && !file(finalJar).exists() }
onlyIfTachideskDoesntExist(projectDir)
from(tarTree(tmpTar))
into(tmpPath)
}
register<Copy>(setupCITask) {
group = tachideskGroup
mustRunAfter(extractTask)
onlyIfTachideskDoesntExist(projectDir)
from(file("$tmpServerFolder.github/runner-files/ci-gradle.properties"))
into(file("$tmpServerFolder.gradle/"))
rename {
it.replace("ci-", "")
}
}
register<Exec>(buildTachideskTask) {
group = tachideskGroup
mustRunAfter(setupCITask)
onlyIfTachideskDoesntExist(projectDir)
workingDir(tmpServerFolder)
val os = DefaultNativePlatform.getCurrentOperatingSystem()
when {
os.isWindows -> commandLine("cmd", "/c", "gradlew", ":server:shadowJar", "--no-daemon", "-x", "ktlintFormat")
os.isLinux || os.isMacOsX -> commandLine("./gradlew", ":server:shadowJar", "--no-daemon", "-x", "ktlintFormat")
}
}
register(copyTachideskJarTask) {
group = tachideskGroup
mustRunAfter(buildTachideskTask)
onlyIfTachideskDoesntExist(projectDir)
doFirst {
file("${tmpServerFolder}server/build/").listFiles()
.orEmpty()
.find {
it.nameWithoutExtension.startsWith("Suwayomi-Server-$tachideskVersion-r") &&
it.extension == "jar"
}
?.copyTo(file("${destination}Tachidesk.jar"))
val gson = Gson()
val jar = gson.fromJson(file(tmpJson).reader(), Release::class.java)
.assets
.find { it.name.endsWith("jar") }
src(jar?.browser_download_url)
dest(finalJar)
}
}
register(signTachideskJar) {
group = tachideskGroup
mustRunAfter(copyTachideskJarTask)
mustRunAfter(downloadTachidesk)
onlyIfSigning(project)
doFirst {
@@ -175,7 +148,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
"--force",
"--prefix", "ca.gosyer.",
"--sign", "Developer ID Application: ${getSigningIdentity()}",
tmpFile.toAbsolutePath().toString()
tmpFile.toAbsolutePath().toString(),
)
}
@@ -193,7 +166,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
val tachideskJar = file(finalJar)
onlyIf {
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull() != serverCode
jar.manifest?.mainAttributes?.getValue("JUI-KEY")?.toIntOrNull() != serverCode
}
}
@@ -201,7 +174,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
val manifest = JarFile(tachideskJar).use { jar ->
Manifest(jar.manifest)
}
manifest.mainAttributes[Attributes.Name.IMPLEMENTATION_VERSION] = serverCode.toString()
manifest.mainAttributes[Attributes.Name("JUI-KEY")] = serverCode.toString()
FileSystems.newFileSystem(tachideskJar.toPath()).use { fs ->
val manifestFile = fs.getPath("META-INF/MANIFEST.MF")
val manifestBak = fs.getPath("META-INF/MANIFEST.MF" + ".bak")
@@ -227,14 +200,11 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
dependsOn(
deleteOldTachideskTask,
downloadTask,
extractTask,
setupCITask,
buildTachideskTask,
copyTachideskJarTask,
downloadApiTask,
downloadTachidesk,
signTachideskJar,
modifyTachideskJarManifest,
deleteTmpFolderTask
deleteTmpFolderTask,
)
}
}

View File

@@ -31,7 +31,6 @@ import org.lighthousegames.logging.logging
import java.io.File.pathSeparatorChar
import java.io.IOException
import java.io.Reader
import java.util.jar.Attributes
import java.util.jar.JarInputStream
import kotlin.concurrent.thread
import kotlin.io.path.absolutePathString
@@ -100,7 +99,9 @@ class ServerService
private suspend fun runService() {
process?.destroy()
withIOContext {
process?.waitFor()
}
_initialized.value = if (host.value) {
ServerResult.STARTING
} else {
@@ -116,7 +117,7 @@ class ServerService
try {
val jarVersion = withIOContext {
JarInputStream(FileSystem.SYSTEM.source(jarFile).buffer().inputStream()).use { jar ->
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull()
jar.manifest?.mainAttributes?.getValue("JUI-KEY")?.toIntOrNull()
}
}