diff --git a/.gitignore b/.gitignore index af9fd801..b2e9ea93 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ build/ !**/src/main/**/build/ !**/src/test/**/build/ redicloud-version.properties +/testing/ +test-cloud/ ### IntelliJ IDEA ### .idea/ @@ -14,12 +16,6 @@ out/ !**/src/main/**/out/ !**/src/test/**/out/ -### Test Files ### -/test/**/tmp/ -/test/**/.libs/ -/test/**/storage/ -/test/**/*.jar - ### Eclipse ### .apt_generated .classpath diff --git a/apis/base-api/src/main/kotlin/dev/redicloud/api/utils/CloudFiles.kt b/apis/base-api/src/main/kotlin/dev/redicloud/api/utils/CloudFiles.kt index e299015e..20905783 100644 --- a/apis/base-api/src/main/kotlin/dev/redicloud/api/utils/CloudFiles.kt +++ b/apis/base-api/src/main/kotlin/dev/redicloud/api/utils/CloudFiles.kt @@ -19,33 +19,37 @@ val MINECRAFT_VERSIONS_FOLDER = CloudFile("versions", "storage", folder = true) val TEMPLATE_FOLDER = CloudFile("templates", "storage", folder = true) val DATABASE_JSON = CloudFile("database.json", "storage") val CONNECTORS_FOLDER = CloudFile("connectors", "storage", folder = true) -val MODULE_FOLDER = CloudFile("modules", "storage", folder = true) +val MODULES_FOLDER = CloudFile("modules", "storage", folder = true) fun toCloudFile(universalPath: String): File { return File(CLOUD_PATH, universalPath) } -fun toUniversalPath(file: File): String { +fun toUniversalPath(file: File, forceSeperator: String = File.separator): String { val path = file.absolutePath.replace(CLOUD_PATH, "") - return if (path.startsWith(File.separator)) path.replaceFirst(File.separator, "") else path + .replace(File.separator, forceSeperator) + return if (path.startsWith(forceSeperator)) { + path.replaceFirst(forceSeperator, "") + } else path } class CloudFile(val name: String, val parent: String = "", val folder: Boolean = false) { - fun getCloudPath(): String { + fun getCloudPath(cloudFolder: File? = null, separator: String = File.separator): String { + val prefixPath = cloudFolder?.absolutePath ?: CLOUD_PATH return if (parent.isEmpty()) { - CLOUD_PATH + File.separator + name + prefixPath + separator + name }else { - CLOUD_PATH + File.separator + parent + File.separator + name + prefixPath + separator + parent + separator + name } } - fun getFile(): File { - return File(getCloudPath()) + fun getFile(cloudFolder: File? = null): File { + return File(getCloudPath(cloudFolder)) } - fun createIfNotExists(): File { - val file = getFile() + fun createIfNotExists(cloudFolder: File? = null): File { + val file = getFile(cloudFolder) if (file.exists()) return file if (!file.parentFile.exists()) file.parentFile.mkdirs() if (folder) { diff --git a/build.gradle.kts b/build.gradle.kts index 76f53c4a..0ed9f66f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,6 +35,15 @@ allprojects { dependency(BuildDependencies.KHTTP) dependency(BuildDependencies.KOTLIN_REFLECT) dependency(BuildDependencies.GUICE) + + testImplementation(BuildDependencies.DOCKER_TEST_CONTAINERS) + testImplementation(BuildDependencies.GSON) + testImplementation(BuildDependencies.LOGBACK_CORE) + testImplementation(BuildDependencies.LOGBACK_CLASSIC) + testImplementation(project(":utils")) + testImplementation(project(":apis:base-api")) + testImplementation(project(":database")) + testImplementation(project(":services:node-service")) } tasks { @@ -90,18 +99,4 @@ allprojects { } } -} - -tasks.register("buildCloudAndCopy") { - project.allprojects.forEach { - if (it == it.rootProject) return@forEach - try { - val task = it.tasks.named("buildAndCopy") - dependsOn(task) - println("Project ${it.name} has ${task.name} task!") - }catch (_: UnknownDomainObjectException) { - println("Project ${it.name} has no buildAndCopy task! Use default build task instead.") - dependsOn(it.tasks.named("build")) - } - } } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/BuildDependencies.kt b/buildSrc/src/main/kotlin/BuildDependencies.kt index ec0aa2a7..7fa50fdf 100644 --- a/buildSrc/src/main/kotlin/BuildDependencies.kt +++ b/buildSrc/src/main/kotlin/BuildDependencies.kt @@ -32,6 +32,7 @@ object BuildDependencies { const val JLINE_CONSOLE = "org.jline:jline-console:3.25.1" const val JLINE_JANSI = "org.jline:jline-terminal-jansi:3.25.1" + const val DOCKER_TEST_CONTAINERS = "org.testcontainers:testcontainers:1.19.7" const val BCPROV = "org.bouncycastle:bcprov-jdk15on:1.70" const val BCPKIX = "org.bouncycastle:bcpkix-jdk15on:1.70" } diff --git a/connectors/bukkit-connector/build.gradle.kts b/connectors/bukkit-connector/build.gradle.kts index 3c0d9727..eb3501df 100644 --- a/connectors/bukkit-connector/build.gradle.kts +++ b/connectors/bukkit-connector/build.gradle.kts @@ -44,34 +44,6 @@ dependencies { shade(project(":connectors:bukkit-legacy")) } -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${original.nameWithoutExtension}-local.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/connectors") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } -} - val shadowModJar by tasks.creating(ShadowJar::class) { archiveFileName.set(Builds.getOutputFileName(project) + "-shadow.jar") diff --git a/connectors/bungeecord-connector/build.gradle.kts b/connectors/bungeecord-connector/build.gradle.kts index 3d57e334..249327ca 100644 --- a/connectors/bungeecord-connector/build.gradle.kts +++ b/connectors/bungeecord-connector/build.gradle.kts @@ -35,31 +35,3 @@ dependencies { compileOnly(BuildDependencies.BUNGEECORD_API) } - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${original.nameWithoutExtension}-local.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/connectors") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } -} \ No newline at end of file diff --git a/connectors/minestom-connector/build.gradle.kts b/connectors/minestom-connector/build.gradle.kts index 54c5797d..68f50e2d 100644 --- a/connectors/minestom-connector/build.gradle.kts +++ b/connectors/minestom-connector/build.gradle.kts @@ -46,35 +46,6 @@ dependencies { shade(project(":server-factories:remote-server-factory")) shade(project(":apis:connector-api")) shade(BuildDependencies.CLOUD_LIBLOADER_BOOTSTRAP) - compileOnly(BuildDependencies.MINESTOM_API) compileOnly(BuildDependencies.MINESTOM_EXTENSIONS) -} - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${original.nameWithoutExtension}-local.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/connectors") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } } \ No newline at end of file diff --git a/connectors/velocity-connector/build.gradle.kts b/connectors/velocity-connector/build.gradle.kts index f2c0e31f..e1bff8c1 100644 --- a/connectors/velocity-connector/build.gradle.kts +++ b/connectors/velocity-connector/build.gradle.kts @@ -40,31 +40,3 @@ dependencies { compileOnly(BuildDependencies.VELOCITY_API) kapt(BuildDependencies.VELOCITY_API) } - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${original.nameWithoutExtension}-local.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/connectors") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } -} \ No newline at end of file diff --git a/database/src/main/kotlin/dev/redicloud/database/DatabaseConnection.kt b/database/src/main/kotlin/dev/redicloud/database/DatabaseConnection.kt index 3236640a..7b1c13b2 100644 --- a/database/src/main/kotlin/dev/redicloud/database/DatabaseConnection.kt +++ b/database/src/main/kotlin/dev/redicloud/database/DatabaseConnection.kt @@ -48,12 +48,15 @@ class DatabaseConnection( .setCodec(GsonCodec) if (config.isCluster()) { val clusterConfig = redissonConfig.useClusterServers() - .setClientName(serviceId.toName()).also { - if(config.password.isNotEmpty()) it.setPassword(config.password) + .setClientName(serviceId.toName()) + .also { + if(!config.password.isNullOrEmpty()) { + it.setPassword(config.password) + } + if (!config.username.isNullOrEmpty()) { + it.setUsername(config.username) + } } - if (!config.username.isNullOrEmpty()) { - clusterConfig.setUsername(config.username) - } config.nodes.forEach { node -> clusterConfig.addNodeAddress(node.toConnectionString()) } @@ -70,8 +73,11 @@ class DatabaseConnection( .setConnectionPoolSize(connectionPoolSize) .setSubscriptionConnectionPoolSize(subscriptionConnectionPoolSize) .setConnectionMinimumIdleSize(connectionMinimumIdleSize) - .setSubscriptionConnectionMinimumIdleSize(subscriptionConnectionMinimumIdleSize).also { - if(config.password.isNotEmpty()) it.setPassword(config.password) + .setSubscriptionConnectionMinimumIdleSize(subscriptionConnectionMinimumIdleSize) + .also { + if(!config.password.isNullOrEmpty()) { + it.setPassword(config.password) + } } if (!config.username.isNullOrEmpty()) { singleConfig.setUsername(config.username) diff --git a/database/src/main/kotlin/dev/redicloud/database/config/DatabaseConfiguration.kt b/database/src/main/kotlin/dev/redicloud/database/config/DatabaseConfiguration.kt index 4422f21f..e7d0e949 100644 --- a/database/src/main/kotlin/dev/redicloud/database/config/DatabaseConfiguration.kt +++ b/database/src/main/kotlin/dev/redicloud/database/config/DatabaseConfiguration.kt @@ -5,7 +5,7 @@ import java.io.File data class DatabaseConfiguration( val username: String? = "", - val password: String = "", + val password: String? = "", val nodes: List, val databaseId: Int = 0 ) { diff --git a/examples/example-module/build.gradle.kts b/examples/example-module/build.gradle.kts index 975e6244..b64cb3a6 100644 --- a/examples/example-module/build.gradle.kts +++ b/examples/example-module/build.gradle.kts @@ -15,31 +15,3 @@ dependencies { compileOnly(BuildDependencies.SPIGOT_API) } - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${Builds.getOutputModuleFileName(project)}.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/modules") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } -} \ No newline at end of file diff --git a/examples/example-plugin/build.gradle.kts b/examples/example-plugin/build.gradle.kts index 148c0dcc..9a01dd27 100644 --- a/examples/example-plugin/build.gradle.kts +++ b/examples/example-plugin/build.gradle.kts @@ -14,32 +14,4 @@ dependencies { // compileOnly("dev.redicloud:api:") compileOnly(BuildDependencies.SPIGOT_API) -} - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${original.nameWithoutExtension}-local.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/templates/example/bukkit/plugins") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } } \ No newline at end of file diff --git a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/ModuleHandler.kt b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/ModuleHandler.kt index 96203f21..2b397e25 100644 --- a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/ModuleHandler.kt +++ b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/ModuleHandler.kt @@ -5,7 +5,7 @@ import com.google.inject.name.Named import dev.redicloud.api.modules.* import dev.redicloud.api.service.ServiceId import dev.redicloud.api.utils.CloudInjectable -import dev.redicloud.api.utils.MODULE_FOLDER +import dev.redicloud.api.utils.MODULES_FOLDER import dev.redicloud.api.utils.injector import dev.redicloud.api.version.ICloudServerVersionType import dev.redicloud.commands.api.SUGGESTERS @@ -176,7 +176,7 @@ class ModuleHandler( fun detectModules() = lock.withLock { moduleFiles.clear() - MODULE_FOLDER.getFile().listFiles()?.filter { + MODULES_FOLDER.getFile().listFiles()?.filter { it.isFile && it.extension == "jar" }?.filter { val jarFile = JarFile(it) diff --git a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/repository/ModuleWebRepository.kt b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/repository/ModuleWebRepository.kt index 450b271e..43f0f2d4 100644 --- a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/repository/ModuleWebRepository.kt +++ b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/repository/ModuleWebRepository.kt @@ -1,7 +1,7 @@ package dev.redicloud.modules.repository import com.google.gson.reflect.TypeToken -import dev.redicloud.api.utils.MODULE_FOLDER +import dev.redicloud.api.utils.MODULES_FOLDER import dev.redicloud.modules.ModuleHandler import dev.redicloud.utils.SingleCache import dev.redicloud.utils.gson.gson @@ -88,10 +88,10 @@ class ModuleWebRepository( //TODO: download console animation suspend fun download(moduleId: String, version: String): File { - MODULE_FOLDER.createIfNotExists() - val localFile = File(MODULE_FOLDER.getFile(), "$moduleId-$version.jar") + MODULES_FOLDER.createIfNotExists() + val localFile = File(MODULES_FOLDER.getFile(), "$moduleId-$version.jar") val bytes = getModuleBytes(moduleId, version) ?: throw IllegalStateException("Module not found: $moduleId-$version") - val tmpFile = File(MODULE_FOLDER.getFile(), "$moduleId-$version.jar.download") + val tmpFile = File(MODULES_FOLDER.getFile(), "$moduleId-$version.jar.download") tmpFile.createNewFile() tmpFile.writeBytes(bytes) if (localFile.exists()) localFile.delete() diff --git a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/suggesters/LoadableModulesSuggester.kt b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/suggesters/LoadableModulesSuggester.kt index fe5b9bb4..74bd87e9 100644 --- a/modules/module-handler/src/main/kotlin/dev/redicloud/modules/suggesters/LoadableModulesSuggester.kt +++ b/modules/module-handler/src/main/kotlin/dev/redicloud/modules/suggesters/LoadableModulesSuggester.kt @@ -2,7 +2,7 @@ package dev.redicloud.modules.suggesters import dev.redicloud.api.commands.AbstractCommandSuggester import dev.redicloud.api.commands.CommandContext -import dev.redicloud.api.utils.MODULE_FOLDER +import dev.redicloud.api.utils.MODULES_FOLDER import dev.redicloud.modules.ModuleHandler class LoadableModulesSuggester( @@ -15,7 +15,7 @@ class LoadableModulesSuggester( val data = moduleHandler.getModuleData(it.id) data == null || data != null && !data.loaded } - val files = MODULE_FOLDER.getFile().listFiles() + val files = MODULES_FOLDER.getFile().listFiles() ?.filter { it.exists() } ?.filter { it.isFile } ?.filter { it.extension == "jar" } diff --git a/modules/papermc-updater/build.gradle.kts b/modules/papermc-updater/build.gradle.kts index 20426965..3abc32d5 100644 --- a/modules/papermc-updater/build.gradle.kts +++ b/modules/papermc-updater/build.gradle.kts @@ -5,35 +5,6 @@ dependencies { compileOnly(project(":console")) compileOnly(project(":logging")) compileOnly(project(":utils")) - dependency(BuildDependencies.KHTTP) dependency(BuildDependencies.GSON) -} - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${Builds.getOutputModuleFileName(project)}.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/modules") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } } \ No newline at end of file diff --git a/modules/reset-module/build.gradle.kts b/modules/reset-module/build.gradle.kts index e86e0391..89ae0ca7 100644 --- a/modules/reset-module/build.gradle.kts +++ b/modules/reset-module/build.gradle.kts @@ -8,32 +8,4 @@ dependencies { compileOnly(project(":database")) dependency("io.javalin:javalin:6.1.3") -} - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - doLast { - val outputJar = Builds.getOutputFileName(project) + ".jar" - val original = File(project.buildDir.resolve("libs"), outputJar) - val outputJarFile = File(project.buildDir.resolve("libs"), "${Builds.getOutputModuleFileName(project)}.jar") - original.renameTo(outputJarFile) - if (original.exists()) { - original.delete() - } - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = File(Builds.getTestDirPath(project, "node$id"), "storage/modules") - if (!path.exists()) { - path.mkdirs() - } - val targetJar = File(path, outputJarFile.name) - if (targetJar.exists()) { - targetJar.delete() - } - project.copy { - from(outputJarFile) - into(path) - } - } - } } \ No newline at end of file diff --git a/node.json b/node.json new file mode 100644 index 00000000..5e76488f --- /dev/null +++ b/node.json @@ -0,0 +1,6 @@ +{ + "nodeName": "node-1", + "uniqueId": "57f7f4ff-bdba-db5f-0000-000000000000", + "hostAddress": "127.0.0.1", + "cachedServiceId": null +} \ No newline at end of file diff --git a/repositories/java-version-repository/src/main/kotlin/dev/redicloud/repository/java/version/JavaVersionUtils.kt b/repositories/java-version-repository/src/main/kotlin/dev/redicloud/repository/java/version/JavaVersionUtils.kt index 8a4c77e9..06e2ca0c 100644 --- a/repositories/java-version-repository/src/main/kotlin/dev/redicloud/repository/java/version/JavaVersionUtils.kt +++ b/repositories/java-version-repository/src/main/kotlin/dev/redicloud/repository/java/version/JavaVersionUtils.kt @@ -11,6 +11,10 @@ fun getJavaVersionsBetween(javaVersion1: CloudJavaVersion, javaVersion2: CloudJa fun getJavaVersion(): CloudJavaVersion { val version = System.getProperty("java.version") + if (version.contains("-") && version.split(".").size < 2) { + return JavaVersionRepository.ONLINE_VERSION_CACHE.get()!!.find { it.name == version.split("-")[0] } + ?: JavaVersionRepository.ONLINE_VERSION_CACHE.get()!!.first { it.unknown } + } val versionParts = version.split(".") val major = versionParts[0].toInt() val minor = versionParts[1].toInt() @@ -31,15 +35,19 @@ fun isJavaVersionUnsupported(version: CloudJavaVersion): Boolean { } suspend fun getVersionInfo(path: String): JavaVersionInfo? { - var end = "bin" + File.separator + (if (getOperatingSystemType() == OSType.WINDOWS) "java.exe" else "java") - if (!path.endsWith(File.separator)) end = File.separator + end - val processBuilder = ProcessBuilder(path + (end), "-version") + var suffix = "bin" + File.separator + (if (getOperatingSystemType() == OSType.WINDOWS) "java.exe" else "java") + if (!path.endsWith(File.separator)) suffix = File.separator + suffix + val processBuilder = ProcessBuilder(path + (suffix), "-version") processBuilder.redirectErrorStream(true) val process = processBuilder.start() val reader = process.inputStream.bufferedReader() val output = reader.readLines() if (output.size >= 5) return null - val versionParts = output[1].split("(build ").last().split("+").first().split(".") + val version = output[1].split("(build ").last().split("+").first() + if (version.split(".").size < 3 && version.contains("-")) { + return JavaVersionInfo(version.split("-")[0].toInt(), 0, 0, output.joinToString("\n")) + } + val versionParts = version.split(".") val major = versionParts[0] val minor = versionParts[1] val patch = versionParts[2] @@ -58,6 +66,9 @@ fun locateAllJavaVersions(): List { val homePathSplit = System.getenv("JAVA_HOME").split(File.separator) paths.add(homePathSplit.subList(0, homePathSplit.size - 2).joinToString(File.separator)) } + if (System.getenv().containsKey("JAVA_INSTALLATIONS_FOLDER")) { + paths.add(System.getenv("JAVA_INSTALLATIONS_FOLDER")) + } when (getOperatingSystemType()) { OSType.WINDOWS -> { @@ -79,9 +90,12 @@ fun locateAllJavaVersions(): List { val state = it.exists() state }.filter { it.isDirectory } - .forEach { versionFolders.addAll(it.listFiles()!!.toList()) } + .forEach { it.listFiles()?.forEach { f -> versionFolders.add(f) } } - return versionFolders + val suffix = "bin" + File.separator + (if (getOperatingSystemType() == OSType.WINDOWS) "java.exe" else "java") + return versionFolders.filter { + File(it, suffix).exists() + } } fun toVersionId(versionNumber: Int): Int { diff --git a/services/node-service/build.gradle.kts b/services/node-service/build.gradle.kts index 91c6383f..d5cea0fe 100644 --- a/services/node-service/build.gradle.kts +++ b/services/node-service/build.gradle.kts @@ -42,18 +42,3 @@ dependencies { compileOnly(BuildDependencies.JLINE_JANSI) compileOnly(BuildDependencies.JSCH) } - -tasks.register("buildAndCopy") { - dependsOn(tasks.named("build")) - val outputJar = Builds.getOutputFileName(project) + ".jar" - doLast { - for (i in 1..Builds.testNodes) { - val id = if (i in 1..9) "0$i" else i.toString() - val path = Builds.getTestDirPath(project, "node$id") - project.copy { - from(project.buildDir.resolve("libs").resolve(outputJar)) - into(path) - } - } - } -} \ No newline at end of file diff --git a/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/CloudServerVersionCommand.kt b/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/CloudServerVersionCommand.kt index f1885349..4d054946 100644 --- a/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/CloudServerVersionCommand.kt +++ b/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/CloudServerVersionCommand.kt @@ -203,7 +203,7 @@ class CloudServerVersionCommand( } @CommandSubPath("edit javaversion ") - @CommandAlias(["edit jv "]) + @CommandAlias(["edit jv ", "edit java "]) @CommandDescription("Edit the Java version of a server version") fun editJavaVersion( actor: ConsoleActor, diff --git a/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/ConfigurationTemplateCommand.kt b/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/ConfigurationTemplateCommand.kt index 3a1bdfac..aab316a6 100644 --- a/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/ConfigurationTemplateCommand.kt +++ b/services/node-service/src/main/kotlin/dev/redicloud/service/node/commands/ConfigurationTemplateCommand.kt @@ -330,7 +330,7 @@ class ConfigurationTemplateCommand( } @CommandSubPath("edit jvmargument add ") - @CommandAlias(["edit ja add "]) + @CommandAlias(["edit ja add "]) @CommandDescription("Add a JVM argument to a configuration template") fun editJvmArgumentAdd( actor: ConsoleActor, @@ -343,7 +343,7 @@ class ConfigurationTemplateCommand( } @CommandSubPath("edit jvmargument remove ") - @CommandAlias(["edit ja remove "]) + @CommandAlias(["edit ja remove "]) @CommandDescription("Remove a JVM argument from a configuration template") fun editJvmArgumentRemove( actor: ConsoleActor, @@ -396,7 +396,7 @@ class ConfigurationTemplateCommand( actor.sendMessage("The maximum memory of the configuration template ${toConsoleValue(template.name)} was updated to ${toConsoleValue(memory)}!") } - @CommandSubPath("edit filetemplate add