mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
Don't build Suwayomi-Server, just download it
This commit is contained in:
@@ -5,9 +5,8 @@ import Config.tachideskVersion
|
|||||||
import de.undercouch.gradle.tasks.download.Download
|
import de.undercouch.gradle.tasks.download.Download
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.tasks.Copy
|
|
||||||
import org.gradle.api.tasks.Delete
|
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.TaskContainerScope
|
||||||
import org.gradle.kotlin.dsl.register
|
import org.gradle.kotlin.dsl.register
|
||||||
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||||
@@ -22,11 +21,8 @@ import kotlin.streams.asSequence
|
|||||||
|
|
||||||
private const val tachideskGroup = "tachidesk"
|
private const val tachideskGroup = "tachidesk"
|
||||||
private const val deleteOldTachideskTask = "deleteOldTachidesk"
|
private const val deleteOldTachideskTask = "deleteOldTachidesk"
|
||||||
private const val downloadTask = "downloadTar"
|
private const val downloadApiTask = "downloadApiJson"
|
||||||
private const val extractTask = "extractTar"
|
private const val downloadTachidesk = "downloadTachidesk"
|
||||||
private const val setupCITask = "setupServerCI"
|
|
||||||
private const val buildTachideskTask = "buildTachidesk"
|
|
||||||
private const val copyTachideskJarTask = "copyTachidesk"
|
|
||||||
private const val signTachideskJar = "signJar"
|
private const val signTachideskJar = "signJar"
|
||||||
private const val modifyTachideskJarManifest = "modifyManifest"
|
private const val modifyTachideskJarManifest = "modifyManifest"
|
||||||
private const val deleteTmpFolderTask = "deleteTmp"
|
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 fun isSigning(properties: Map<String, Any?>) = properties["compose.desktop.mac.sign"].toString() == "true"
|
||||||
|
|
||||||
private const val tmpPath = "tmp"
|
private const val tmpPath = "tmp"
|
||||||
private val tarUrl = if (preview) {
|
private val apiUrl = if (preview) {
|
||||||
"https://github.com/Suwayomi/Suwayomi-Server/archive/$previewCommit.tar.gz"
|
"https://api.github.com/repos/Suwayomi/Suwayomi-Server-preview/releases/tags/$previewCommit"
|
||||||
} else {
|
} 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) {
|
private val fileSuffix get() = if (preview) {
|
||||||
previewCommit
|
previewCommit
|
||||||
} else {
|
} else {
|
||||||
@@ -77,6 +73,15 @@ private const val macosJarFolder = "$tmpPath/macos/jar/"
|
|||||||
private const val destination = "src/main/resources/"
|
private const val destination = "src/main/resources/"
|
||||||
private const val finalJar = "src/main/resources/Tachidesk.jar"
|
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) {
|
fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||||
with(project) {
|
with(project) {
|
||||||
register<Delete>(deleteOldTachideskTask) {
|
register<Delete>(deleteOldTachideskTask) {
|
||||||
@@ -84,73 +89,41 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
val tachideskJar = file(finalJar)
|
val tachideskJar = file(finalJar)
|
||||||
onlyIf {
|
onlyIf {
|
||||||
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
|
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)
|
delete(tachideskJar)
|
||||||
}
|
}
|
||||||
|
|
||||||
register<Download>(downloadTask) {
|
register<Download>(downloadApiTask) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(deleteOldTachideskTask)
|
mustRunAfter(deleteOldTachideskTask)
|
||||||
onlyIf { !tachideskExists(projectDir) && !file(tmpTar).exists() }
|
onlyIf { !tachideskExists(projectDir) && !file(finalJar).exists() }
|
||||||
|
|
||||||
onlyIfTachideskDoesntExist(projectDir)
|
onlyIfTachideskDoesntExist(projectDir)
|
||||||
|
|
||||||
src(tarUrl)
|
src(apiUrl)
|
||||||
dest(tmpTar)
|
dest(tmpJson)
|
||||||
}
|
}
|
||||||
register<Copy>(extractTask) {
|
register<Download>(downloadTachidesk) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(downloadTask)
|
mustRunAfter(downloadApiTask)
|
||||||
onlyIf { !tachideskExists(projectDir) && !file(tmpServerFolder).exists() }
|
onlyIf { !tachideskExists(projectDir) && !file(finalJar).exists() }
|
||||||
|
|
||||||
onlyIfTachideskDoesntExist(projectDir)
|
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 {
|
doFirst {
|
||||||
file("${tmpServerFolder}server/build/").listFiles()
|
val gson = Gson()
|
||||||
.orEmpty()
|
val jar = gson.fromJson(file(tmpJson).reader(), Release::class.java)
|
||||||
.find {
|
.assets
|
||||||
it.nameWithoutExtension.startsWith("Suwayomi-Server-$tachideskVersion-r") &&
|
.find { it.name.endsWith("jar") }
|
||||||
it.extension == "jar"
|
src(jar?.browser_download_url)
|
||||||
}
|
dest(finalJar)
|
||||||
?.copyTo(file("${destination}Tachidesk.jar"))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
register(signTachideskJar) {
|
register(signTachideskJar) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(copyTachideskJarTask)
|
mustRunAfter(downloadTachidesk)
|
||||||
onlyIfSigning(project)
|
onlyIfSigning(project)
|
||||||
|
|
||||||
doFirst {
|
doFirst {
|
||||||
@@ -175,7 +148,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
"--force",
|
"--force",
|
||||||
"--prefix", "ca.gosyer.",
|
"--prefix", "ca.gosyer.",
|
||||||
"--sign", "Developer ID Application: ${getSigningIdentity()}",
|
"--sign", "Developer ID Application: ${getSigningIdentity()}",
|
||||||
tmpFile.toAbsolutePath().toString()
|
tmpFile.toAbsolutePath().toString(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +166,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
val tachideskJar = file(finalJar)
|
val tachideskJar = file(finalJar)
|
||||||
onlyIf {
|
onlyIf {
|
||||||
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
|
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 ->
|
val manifest = JarFile(tachideskJar).use { jar ->
|
||||||
Manifest(jar.manifest)
|
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 ->
|
FileSystems.newFileSystem(tachideskJar.toPath()).use { fs ->
|
||||||
val manifestFile = fs.getPath("META-INF/MANIFEST.MF")
|
val manifestFile = fs.getPath("META-INF/MANIFEST.MF")
|
||||||
val manifestBak = fs.getPath("META-INF/MANIFEST.MF" + ".bak")
|
val manifestBak = fs.getPath("META-INF/MANIFEST.MF" + ".bak")
|
||||||
@@ -227,14 +200,11 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
|
|
||||||
dependsOn(
|
dependsOn(
|
||||||
deleteOldTachideskTask,
|
deleteOldTachideskTask,
|
||||||
downloadTask,
|
downloadApiTask,
|
||||||
extractTask,
|
downloadTachidesk,
|
||||||
setupCITask,
|
|
||||||
buildTachideskTask,
|
|
||||||
copyTachideskJarTask,
|
|
||||||
signTachideskJar,
|
signTachideskJar,
|
||||||
modifyTachideskJarManifest,
|
modifyTachideskJarManifest,
|
||||||
deleteTmpFolderTask
|
deleteTmpFolderTask,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import org.lighthousegames.logging.logging
|
|||||||
import java.io.File.pathSeparatorChar
|
import java.io.File.pathSeparatorChar
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.Reader
|
import java.io.Reader
|
||||||
import java.util.jar.Attributes
|
|
||||||
import java.util.jar.JarInputStream
|
import java.util.jar.JarInputStream
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
import kotlin.io.path.absolutePathString
|
import kotlin.io.path.absolutePathString
|
||||||
@@ -100,7 +99,9 @@ class ServerService
|
|||||||
|
|
||||||
private suspend fun runService() {
|
private suspend fun runService() {
|
||||||
process?.destroy()
|
process?.destroy()
|
||||||
process?.waitFor()
|
withIOContext {
|
||||||
|
process?.waitFor()
|
||||||
|
}
|
||||||
_initialized.value = if (host.value) {
|
_initialized.value = if (host.value) {
|
||||||
ServerResult.STARTING
|
ServerResult.STARTING
|
||||||
} else {
|
} else {
|
||||||
@@ -116,7 +117,7 @@ class ServerService
|
|||||||
try {
|
try {
|
||||||
val jarVersion = withIOContext {
|
val jarVersion = withIOContext {
|
||||||
JarInputStream(FileSystem.SYSTEM.source(jarFile).buffer().inputStream()).use { jar ->
|
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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user