Skip to content

Commit afca936

Browse files
authored
Merge branch 'main' into jetbrains-junie/issue-KTOR-8523-run-1d200765-01c9-481c-865a-a1f63e217d3a
2 parents 5f0f691 + 03576de commit afca936

File tree

158 files changed

+4355
-2422
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+4355
-2422
lines changed

CHANGELOG.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
# 3.2.0
2+
> Published 12 June 2025
3+
4+
### Features
5+
* Dependency injection Ktor extension ([KTOR-8267](https://youtrack.jetbrains.com/issue/KTOR-8267))
6+
* Support Version Catalog ([KTOR-8162](https://youtrack.jetbrains.com/issue/KTOR-8162))
7+
* Unix domain socket support at the Ktor Engine level ([KTOR-4766](https://youtrack.jetbrains.com/issue/KTOR-4766))
8+
* Allow suspend Ktor modules ([KTOR-8005](https://youtrack.jetbrains.com/issue/KTOR-8005))
9+
* Ability to use browser cookie storage ([KTOR-539](https://youtrack.jetbrains.com/issue/KTOR-539))
10+
* Configuration file deserialization ([KTOR-7874](https://youtrack.jetbrains.com/issue/KTOR-7874))
11+
* HttpCache: Support evicting/clearing cache ([KTOR-6653](https://youtrack.jetbrains.com/issue/KTOR-6653))
12+
* File configuration for dependencies ([KTOR-8304](https://youtrack.jetbrains.com/issue/KTOR-8304))
13+
14+
### Improvements
15+
* Excessive allocation of ApplicationConfig when loading multiple files from CLI ([KTOR-8563](https://youtrack.jetbrains.com/issue/KTOR-8563))
16+
* Linux curl engine doesn't work for simultaneous websocket and http request ([KTOR-8259](https://youtrack.jetbrains.com/issue/KTOR-8259))
17+
* ktor-network produces ProGuard warning ([KTOR-8525](https://youtrack.jetbrains.com/issue/KTOR-8525))
18+
* More overloads for StringValuesBuilder.appendAll ([KTOR-8573](https://youtrack.jetbrains.com/issue/KTOR-8573))
19+
* HttpClientCall: Deprecate `wrapWithContent` and `wrap` ([KTOR-8378](https://youtrack.jetbrains.com/issue/KTOR-8378))
20+
* Add a way to create an `ApplicationCall` for testing ([KTOR-7607](https://youtrack.jetbrains.com/issue/KTOR-7607))
21+
* Configuration access API improvements ([KTOR-8185](https://youtrack.jetbrains.com/issue/KTOR-8185))
22+
* Application instance access in testApplication ([KTOR-8215](https://youtrack.jetbrains.com/issue/KTOR-8215))
23+
* The TestApplication client should be configurable and mutable ([KTOR-8465](https://youtrack.jetbrains.com/issue/KTOR-8465))
24+
* Support accessing resolved IP address on an instance of `io.ktor.network.sockets.InetSocketAddress` ([KTOR-8490](https://youtrack.jetbrains.com/issue/KTOR-8490))
25+
* Deprecate SaveBodyPlugin in favor of HttpClientCall.save ([KTOR-8367](https://youtrack.jetbrains.com/issue/KTOR-8367))
26+
* Obscure log message on server startup ([KTOR-8519](https://youtrack.jetbrains.com/issue/KTOR-8519))
27+
* Routing: `accept` should return 406 if the `Accept` header isn't matched ([KTOR-8416](https://youtrack.jetbrains.com/issue/KTOR-8416))
28+
* MicrometerMetrics: the `route` label can exceed length limit ([KTOR-7274](https://youtrack.jetbrains.com/issue/KTOR-7274))
29+
* Micrometer: Make route label configurable ([KTOR-8183](https://youtrack.jetbrains.com/issue/KTOR-8183))
30+
* Add more common ContentType values ([KTOR-7108](https://youtrack.jetbrains.com/issue/KTOR-7108))
31+
32+
### Bugfixes
33+
* Logging/Darwin: IOException is thrown when detecting if body is a binary ([KTOR-8581](https://youtrack.jetbrains.com/issue/KTOR-8581))
34+
* Netty: NoSuchElementException or empty headers when responding with 204 ([KTOR-8528](https://youtrack.jetbrains.com/issue/KTOR-8528))
35+
* YAML configuration: NoSuchElementException when parameter is expanded with curly braces ([KTOR-8575](https://youtrack.jetbrains.com/issue/KTOR-8575))
36+
* ApplicationConfig: Most of the content is absent after merging configs ([KTOR-8565](https://youtrack.jetbrains.com/issue/KTOR-8565))
37+
* Android: "ProtocolException: TRACE does not support writing" when sending TRACE request ([KTOR-8352](https://youtrack.jetbrains.com/issue/KTOR-8352))
38+
* The "Content-Length: 0" header is added for GET requests sent to some servers ([KTOR-6508](https://youtrack.jetbrains.com/issue/KTOR-6508))
39+
* HttpRequestRetry: requests with some IOException's thrown by Java engine aren't retried ([KTOR-6770](https://youtrack.jetbrains.com/issue/KTOR-6770))
40+
* HttpCookies: Encoding of request cookies is not preserved in CookiesStorage ([KTOR-8343](https://youtrack.jetbrains.com/issue/KTOR-8343))
41+
* Url class mangles data URLs ([KTOR-5708](https://youtrack.jetbrains.com/issue/KTOR-5708))
42+
* SaveBodyPlugin: Logging plugin consumes response body ([KTOR-6474](https://youtrack.jetbrains.com/issue/KTOR-6474))
43+
* Config deserialization does not respect `testApplication` environment ([KTOR-8436](https://youtrack.jetbrains.com/issue/KTOR-8436))
44+
* Resources: Exclude a parent from query params when it is an object ([KTOR-8507](https://youtrack.jetbrains.com/issue/KTOR-8507))
45+
* BearerAuthProvider does not clear token if refreshTokens returns null ([KTOR-8470](https://youtrack.jetbrains.com/issue/KTOR-8470))
46+
* Coroutines launched from RoutingContext are not cancelled upon server shutdown ([KTOR-8338](https://youtrack.jetbrains.com/issue/KTOR-8338))
47+
* Application job is not joined during shutdown ([KTOR-8291](https://youtrack.jetbrains.com/issue/KTOR-8291))
48+
* HttpCache: InvalidCacheStateException thrown when Vary header has different entries is overly severe ([KTOR-8345](https://youtrack.jetbrains.com/issue/KTOR-8345))
49+
* Fix socket channel close handling ([KTOR-8201](https://youtrack.jetbrains.com/issue/KTOR-8201))
50+
151
# 3.1.3
252
> Published 5 May 2025
353

build-logic/src/main/kotlin/ktorbuild.base.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ version = resolveVersion()
99

1010
ProjectTagsService.register(project)
1111
extensions.create<KtorBuildExtension>(KtorBuildExtension.NAME)
12+
13+
registerPackageJsonAggregationTask()

build-logic/src/main/kotlin/ktorbuild.publish.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ plugins.withId("ktorbuild.kmp") {
6666
configureJavadocArtifact()
6767
}
6868

69+
pluginManager.withPlugin("java-platform") {
70+
publishing.publications.register<MavenPublication>("maven") {
71+
from(components["javaPlatform"])
72+
}
73+
}
74+
75+
pluginManager.withPlugin("version-catalog") {
76+
publishing.publications.register<MavenPublication>("maven") {
77+
from(components["versionCatalog"])
78+
}
79+
}
80+
6981
private fun Project.configureSigning() {
7082
extra["signing.gnupg.keyName"] = (System.getenv("SIGN_KEY_ID") ?: return)
7183
extra["signing.gnupg.passphrase"] = (System.getenv("SIGN_KEY_PASSPHRASE") ?: return)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright 2014-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package ktorbuild
6+
7+
import org.gradle.api.Project
8+
import org.gradle.api.Task
9+
import org.gradle.kotlin.dsl.withType
10+
import org.jetbrains.kotlin.gradle.targets.js.npm.PublicPackageJsonTask
11+
12+
/**
13+
* Register an empty task that will trigger all [PublicPackageJsonTask] tasks in the project.
14+
* This task should be registered for every project to make [dependsOnPackageJsonAggregation] work.
15+
*/
16+
internal fun Project.registerPackageJsonAggregationTask() {
17+
tasks.register(TASK_NAME) {
18+
dependsOn(tasks.withType<PublicPackageJsonTask>())
19+
}
20+
}
21+
22+
/**
23+
* Ensures that all [PublicPackageJsonTask] tasks are executed before the task is executed.
24+
*/
25+
fun Task.dependsOnPackageJsonAggregation() {
26+
dependsOn(project.subprojects.map { subproject -> "${subproject.path}:$TASK_NAME" })
27+
}
28+
29+
private const val TASK_NAME = "packageJsonAggregation"

build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22
* Copyright 2014-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5+
import ktorbuild.dependsOnPackageJsonAggregation
6+
57
plugins {
68
id("ktorbuild.doctor")
79
id("ktorbuild.publish.verifier")
810
}
911

1012
println("Build version: ${project.version}")
1113
println("Kotlin version: ${libs.versions.kotlin.get()}")
14+
15+
// Workaround to make the ':packageJsonUmbrella' task compatible with configuration on demand
16+
// Issue: https://youtrack.jetbrains.com/issue/KT-55701
17+
tasks.named { it == "packageJsonUmbrella" }
18+
.configureEach { dependsOnPackageJsonAggregation() }

gradle.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ kotlin.code.style=official
77

88
# config
99
group=io.ktor
10-
version=3.2.0-SNAPSHOT
10+
version=3.2.0
1111

1212
## Performance
1313

@@ -48,8 +48,13 @@ org.gradle.caching=true
4848
org.gradle.parallel=true
4949
org.gradle.configuration-cache=true
5050
org.gradle.configuration-cache.parallel=true
51+
org.gradle.configuration-cache.entries-per-key=3
5152
org.gradle.kotlin.dsl.allWarningsAsErrors=true
5253

54+
# Speeds up the configuration phase but might cause problems with running some tasks on a single module.
55+
# If you experience problems with this flag, try to add `--no-configure-on-demand` or set this flag to `false`
56+
org.gradle.configureondemand=true
57+
5358
# kotlin
5459
kotlin.native.ignoreDisabledTargets=true
5560
kotlin.mpp.stability.nowarn=true

gradle/artifacts/publishJvmAndCommonPublications.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ io.ktor:ktor-utils-jvm/sources.jar
623623
io.ktor:ktor-utils/.jar
624624
io.ktor:ktor-utils/kotlin-tooling-metadata.json
625625
io.ktor:ktor-utils/sources.jar
626+
io.ktor:ktor-version-catalog/.toml
626627
io.ktor:ktor-websocket-serialization-jvm/.jar
627628
io.ktor:ktor-websocket-serialization-jvm/javadoc.jar
628629
io.ktor:ktor-websocket-serialization-jvm/sources.jar

gradle/libs.versions.toml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,39 @@ serialization = "1.8.1"
1010
binaryCompatibilityValidator = "0.17.0"
1111
dokka = "2.0.0"
1212
kover = "0.9.1"
13-
kotlinter = "5.0.2"
13+
kotlinter = "5.1.1"
1414
kotlinx-browser = "0.3"
1515

1616
# Used for test server in buildSrc
17-
ktor = "3.2.0-eap-1264"
17+
ktor = "3.2.0-eap-1336"
1818

19-
netty = "4.1.119.Final"
20-
netty-tcnative = "2.0.71.Final"
19+
netty = "4.2.2.Final"
20+
netty-tcnative = "2.0.72.Final"
2121

2222
jetty = "9.4.57.v20241219"
2323
jetty-jakarta = "11.0.25"
2424
jetty-alpn-api = "1.1.3.v20160715"
2525
jetty-alpn-openjdk8 = "9.4.57.v20241219"
2626

27-
tomcat = "9.0.105"
28-
tomcat-jakarta = "10.1.40"
27+
tomcat = "9.0.106"
28+
tomcat-jakarta = "10.1.42"
2929

3030
apache = "4.1.5"
31-
apache5 = "5.4.4"
31+
apache5 = "5.5"
3232
apacheds = "2.0.0.AM27"
3333
okhttp = "4.12.0"
34-
okio = "3.11.0"
34+
okio = "3.12.0"
3535

3636
json-simple = "1.1.1"
3737
gson = "2.13.1"
3838
jackson = "2.19.0"
3939

40-
junit = "5.12.2"
40+
junit = "5.13.1"
4141
slf4j = "2.0.17"
4242
logback = "1.5.18"
4343

44-
dropwizard = "4.2.30"
45-
micrometer = "1.15.0"
44+
dropwizard = "4.2.32"
45+
micrometer = "1.15.1"
4646

4747
jansi = "2.4.2"
4848
typesafe = "1.4.3"
@@ -66,21 +66,21 @@ javax-servlet = "4.0.1"
6666
jakarta-servlet = "5.0.0"
6767

6868
ws = "8.18.0"
69-
xmlutil = "0.91.0"
69+
xmlutil = "0.91.1"
7070
yamlkt = "0.13.0"
7171
kaml = "0.77.1"
7272

7373
swagger-codegen = "3.0.68"
7474
swagger-codegen-generators = "1.0.56"
75-
swagger-parser = "2.1.28"
75+
swagger-parser = "2.1.29"
7676

7777
puppeteer = "21.5.0"
7878
tomlj = "1.1.1"
7979

8080
# Keep it in sync with build-settings-logic/settings.gradle.kts
81-
develocity = "3.18.2" # Should be compatible with our server: ge.jetbrains.com
82-
develocity-commonCustomUserData = "2.2.1"
83-
gradleDoctor = "0.10.0"
81+
develocity = "3.19.2" # Should be compatible with our server: ge.jetbrains.com
82+
develocity-commonCustomUserData = "2.3"
83+
gradleDoctor = "0.11.0"
8484

8585
[libraries]
8686

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)