When I debug my Gradle build, it seems the plugin wants to send data like this to Bitbucket:
{
"files": [
{
"path": "my-submodule/src/main/java/com/example/service/somePackage/SomeFile.java",
"coverage": "C:;P:;U:"
},
{
"path": "my-submodule/src/main/java/com/example/service/someOtherPackage/SomeOtherFile.java",
"coverage": "C:;P:;U:13,17,18"
},
{
"path": "my-submodule/src/main/java/com/example/service/someThirdPackage/SomeThirdFile.java",
"coverage": "C:;P:;U:"
},
// ...
]
}
If I try it on the command line, it fails:
curl --verbose -X POST -H "Content-Type: application/json" --data @data.json -u "myuser:$BITBUCKET_TOKEN" "https://my.bitbucket.host/bitbucket/rest/code-coverage/1.0/commits/63642f1b842e22d1e1218cc2404adabb8dd42b41"
(...)
< HTTP/1.1 400
(...)
{"context":null,"message":"Invalid or empty coverage data was supplied for one or more files.","exceptionName":null,"invalidEntities":[{"path":"my-submodule/src/main/java/com/example/service/somePackage/SomeFile.java","coverage":"C:;P:;U:"},
(...)
]}
So it has an issue with files for which only empty coverage was found.
Gradle however, does not detect this outcome, despite of the same HTTP response code (400) that I detect in the access log of Bitbucket server, and does not report this to the user, but something else:
2023-07-27T16:21:21.998+0200 [DEBUG] [jdk.internal.httpclient.debug] [HttpClient-6-Worker-0] [2923s 652ms] Http1Exchange getResponseAsync completed java.net.http.HttpTimeoutException: request timed out
2023-07-27T16:21:21.998+0200 [DEBUG] [jdk.internal.httpclient.debug] [HttpClient-6-SelectorManager] [2923s 652ms] SocketTube(6) got read error: java.io.IOException: connection closed locally
2023-07-27T16:21:21.998+0200 [DEBUG] [jdk.internal.httpclient.debug] [HttpClient-6-Worker-0] [2923s 652ms] Http1Exchange https://my.bitbucket.host/bitbucket/rest/code-coverage/1.0/commits/63642f1b842e22d1e1218cc2404adabb8dd42b41: completed cf with java.net.http.HttpTimeoutException: request timed out
So the outcome is a Gradle exception saying:
2023-07-27T16:21:22.010+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
2023-07-27T16:21:22.010+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my-project-subproject:publishJacocoCodeCoverageToBitbucket'.
(...)
2023-07-27T16:21:22.010+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: org.gradle.api.GradleException: Failed to send code coverage to Bitbucket.
(...)
2023-07-27T16:21:22.012+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: java.net.http.HttpTimeoutException: request timed out
2023-07-27T16:21:22.012+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:559)
2023-07-27T16:21:22.012+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
2023-07-27T16:21:22.012+0200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at dev.turingcomplete.bitbucketcodecoverage.PublishCodeCoverageToBitbucketTask.publishCodeCoverageToBitbucketApi(PublishCodeCoverageToBitbucketTask.kt:221)
At least that's what I think is going on. I couldn't find a way to look into the HTTPS traffic via Gradle.