From a12d251bf44d9869ec314f1127f6808a82240b18 Mon Sep 17 00:00:00 2001 From: carbotaniuman <41451839+carbotaniuman@users.noreply.github.com> Date: Tue, 6 Jul 2021 12:12:37 -0500 Subject: [PATCH] Update to Gradle 7 and Kotlin 1.5.10 --- .gitattributes | 1 + build.gradle | 25 +++++---- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 58910 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 53 +++++++++++------- gradlew.bat | 22 +++++++- settings.gradle | 1 - settings.sample.yaml | 10 ++++ .../mdnet/metrics/PostTransactionLabeler.kt | 2 +- .../kotlin/mdnet/netty/ApplicationNetty.kt | 5 +- .../kotlin/mdnet/settings/ClientSettings.kt | 2 +- src/main/kotlin/mdnet/settings/PingResult.kt | 2 +- .../kotlin/mdnet/settings/SettingsRequest.kt | 2 +- .../kotlin/mdnet/cache/ImageStorageTest.kt | 6 +- 15 files changed, 93 insertions(+), 45 deletions(-) diff --git a/.gitattributes b/.gitattributes index a19ade0..d45c625 100755 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ CHANGELOG.md merge=union +* text=auto eol=lf diff --git a/build.gradle b/build.gradle index 1def174..5175b98 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,12 @@ plugins { id "jacoco" id "java" - id "org.jetbrains.kotlin.jvm" version "1.4.30" - id "org.jetbrains.kotlin.kapt" version "1.4.0" + id "org.jetbrains.kotlin.jvm" version "1.5.10" + id "org.jetbrains.kotlin.kapt" version "1.5.10" id "application" id "com.github.johnrengelman.shadow" version "5.2.0" id "com.diffplug.spotless" version "5.8.2" - id "dev.afanasev.sekret" version "0.0.7" + id "net.afanasev.sekret" version "0.1.0" } group = "com.mangadex" @@ -15,7 +15,6 @@ mainClassName = "mdnet.MainKt" repositories { mavenCentral() - jcenter() } configurations { @@ -23,7 +22,9 @@ configurations { } dependencies { - compileOnly group: "dev.afanasev", name: "sekret-annotation", version: "0.0.7" + implementation "org.jetbrains.kotlin:kotlin-reflect" + + compileOnly group: "net.afanasev", name: "sekret-annotation", version: "0.1.0" implementation group: "commons-io", name: "commons-io", version: "2.8.0" implementation group: "org.apache.commons", name: "commons-compress", version: "1.20" @@ -63,11 +64,13 @@ dependencies { testImplementation "io.mockk:mockk:1.10.4" } -test { +tasks.withType(Test) { useJUnitPlatform() + javaLauncher = javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(8) + } } - -task testDev(type: Test) { +tasks.register("testDev", Test) { group = "verification" useJUnitPlatform() filter { @@ -116,9 +119,11 @@ tasks.register("generateVersion", Copy) { into "$buildDir/generated/java" expand templateContext } +//tasks.named(":kaptKotlin").dependsOn generateVersion +compileJava.dependsOn generateVersion +sourceSets.main.java.srcDir generateVersion -sourceSets.main.java.srcDir generateVersion.outputs.files - +// https://gist.github.com/medvedev/968119d7786966d9ed4442ae17aca279 tasks.register("depsize") { description = 'Prints dependencies for "default" configuration' doLast() { diff --git a/gradle.properties b/gradle.properties index e5e8f9a..a896030 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ http_4k_version=4.3.0.0 -kotest_version=4.4.1 +kotest_version=4.6.0 ktorm_version=3.3.0 picocli_version=4.6.1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..62d4c053550b91381bbd28b1afc82d634bf73a8a 100644 GIT binary patch delta 25879 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 Nq$R_^uaqX; diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fc72034..05679dc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Thu Jul 02 11:52:16 CDT 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index af6708f..fbd7c51 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 6d57edc..5093609 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -65,6 +84,7 @@ set CMD_LINE_ARGS=%* set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% diff --git a/settings.gradle b/settings.gradle index 6d9ad4a..935730c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,7 +1,6 @@ pluginManagement { repositories { gradlePluginPortal() - jcenter() google() } resolutionStrategy { diff --git a/settings.sample.yaml b/settings.sample.yaml index c0abf59..454d877 100644 --- a/settings.sample.yaml +++ b/settings.sample.yaml @@ -80,3 +80,13 @@ server_settings: # 0 defaults to (2 * your available processors) # https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runtime.html#availableProcessors() threads: 0 + + +# Settings intended for advanced use cases or tinkering +dev_settings: + # The url to override the MD@H backend with + dev_url: ~ + # Whether to disable the sni check for mangadex.network and localhost + disable_sni_check: false + # Whether to send the server header or not, defaults to false + send_server_header: false \ No newline at end of file diff --git a/src/main/kotlin/mdnet/metrics/PostTransactionLabeler.kt b/src/main/kotlin/mdnet/metrics/PostTransactionLabeler.kt index 81b1515..d8d16fe 100644 --- a/src/main/kotlin/mdnet/metrics/PostTransactionLabeler.kt +++ b/src/main/kotlin/mdnet/metrics/PostTransactionLabeler.kt @@ -28,7 +28,7 @@ class PostTransactionLabeler : HttpTransactionLabeler { "method" to transaction.request.method.toString(), "status" to transaction.response.status.code.toString(), "path" to transaction.routingGroup, - "cache" to (transaction.response.header("X-Cache") ?: "MISS").toUpperCase() + "cache" to (transaction.response.header("X-Cache") ?: "MISS").uppercase() ) ) } diff --git a/src/main/kotlin/mdnet/netty/ApplicationNetty.kt b/src/main/kotlin/mdnet/netty/ApplicationNetty.kt index 016084e..7a4da2d 100644 --- a/src/main/kotlin/mdnet/netty/ApplicationNetty.kt +++ b/src/main/kotlin/mdnet/netty/ApplicationNetty.kt @@ -104,7 +104,7 @@ sealed class NettyTransport(threads: Int) { private fun defaultNumThreads() = Runtime.getRuntime().availableProcessors() * 2 fun bestForPlatform(threads: Int): NettyTransport { - val name = SystemPropertyUtil.get("os.name").toLowerCase(Locale.UK).trim { it <= ' ' } + val name = SystemPropertyUtil.get("os.name").lowercase(Locale.US).trim { it <= ' ' } val threadsToUse = if (threads == 0) defaultNumThreads() else threads LOGGER.info { "Choosing a transport with $threadsToUse threads" } @@ -188,7 +188,8 @@ class Netty( override fun userEventTriggered(ctx: ChannelHandlerContext, evt: Any) { if (evt is SniCompletionEvent) { if (!devSettings.disableSniCheck) { - if (!evt.hostname().endsWith(hostToTest) && + if (evt.hostname() != null && + !evt.hostname().endsWith(hostToTest) && !evt.hostname().endsWith("localhost") ) { ctx.close() diff --git a/src/main/kotlin/mdnet/settings/ClientSettings.kt b/src/main/kotlin/mdnet/settings/ClientSettings.kt index e8a52d5..d3fbbab 100644 --- a/src/main/kotlin/mdnet/settings/ClientSettings.kt +++ b/src/main/kotlin/mdnet/settings/ClientSettings.kt @@ -20,7 +20,7 @@ package mdnet.settings import com.fasterxml.jackson.databind.PropertyNamingStrategies import com.fasterxml.jackson.databind.annotation.JsonNaming -import dev.afanasev.sekret.Secret +import net.afanasev.sekret.Secret @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class) data class ClientSettings( diff --git a/src/main/kotlin/mdnet/settings/PingResult.kt b/src/main/kotlin/mdnet/settings/PingResult.kt index 68ced00..1ccd86f 100644 --- a/src/main/kotlin/mdnet/settings/PingResult.kt +++ b/src/main/kotlin/mdnet/settings/PingResult.kt @@ -20,7 +20,7 @@ package mdnet.settings import com.fasterxml.jackson.databind.PropertyNamingStrategies import com.fasterxml.jackson.databind.annotation.JsonNaming -import dev.afanasev.sekret.Secret +import net.afanasev.sekret.Secret import org.http4k.core.Uri sealed class PingResult diff --git a/src/main/kotlin/mdnet/settings/SettingsRequest.kt b/src/main/kotlin/mdnet/settings/SettingsRequest.kt index 9a88046..974ec28 100644 --- a/src/main/kotlin/mdnet/settings/SettingsRequest.kt +++ b/src/main/kotlin/mdnet/settings/SettingsRequest.kt @@ -20,7 +20,7 @@ package mdnet.settings import com.fasterxml.jackson.databind.PropertyNamingStrategies import com.fasterxml.jackson.databind.annotation.JsonNaming -import dev.afanasev.sekret.Secret +import net.afanasev.sekret.Secret @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class) data class SettingsRequest( diff --git a/src/test/kotlin/mdnet/cache/ImageStorageTest.kt b/src/test/kotlin/mdnet/cache/ImageStorageTest.kt index a33d666..67db2eb 100644 --- a/src/test/kotlin/mdnet/cache/ImageStorageTest.kt +++ b/src/test/kotlin/mdnet/cache/ImageStorageTest.kt @@ -32,8 +32,8 @@ import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import org.apache.commons.io.IOUtils import org.ktorm.database.Database +import kotlin.time.Duration import kotlin.time.ExperimentalTime -import kotlin.time.minutes class ImageStorageTest : FreeSpec() { override fun isolationMode() = IsolationMode.InstancePerTest @@ -171,7 +171,7 @@ class ImageStorageSlowTest : FreeSpec() { writer.stream.write(ByteArray(4096)) writer.commit(4096).shouldBeTrue() - eventually(5.minutes) { + eventually(Duration.minutes(5)) { imageStorage.size.shouldBeGreaterThan(0) } } @@ -185,7 +185,7 @@ class ImageStorageSlowTest : FreeSpec() { writer.stream.write(ByteArray(8192)) writer.commit(8192).shouldBeTrue() - eventually(5.minutes) { + eventually(Duration.minutes(5)) { imageStorage.size.shouldBeZero() } }