Illegal character(s) in message header value while uploading to Codacy in Prow CI

319 views Asked by At

I have jacoco code coverage report for my Kotlin project and I am uploading it to the Codacy.

I am using codacy-coverage-reporter 7.1.0 and using the following gradle task to upload the report.

task("uploadTestCoverageReportToCodacy", JavaExec::class) {
    dependsOn("codeCoverageReport")
    main = "com.codacy.CodacyCoverageReporter"
    classpath = codacy
    args = arrayListOf(
            "report",
            "-l",
            "Kotlin",
            "-r",
            "$buildDir/reports/jacoco/jacocoTestReport.xml")
}

The task "codeCoverageReport" is compeleted successfully and also I have the CODACY_PROJECT_TOKEN configured in my PROW CI.

The problem which I am facing is the following message :

Exception in thread "main" java.lang.IllegalArgumentException: Illegal character(s) in message header value: <CODACY_PROJECT_TOKEN> (the token value)
at java.base/sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:559)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.isExternalMessageHeaderAllowed(HttpURLConnection.java:494)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3174)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:312)
    at scalaj.http.HttpRequest.$anonfun$doConnection$3(Http.scala:359)
    at scalaj.http.HttpRequest.$anonfun$doConnection$3$adapted(Http.scala:358)
    at scala.collection.immutable.List.foreach(List.scala:392)
    at scalaj.http.HttpRequest.doConnection(Http.scala:358)
    at scalaj.http.HttpRequest.exec(Http.scala:343)
    at scalaj.http.HttpRequest.asString(Http.scala:491)
    at com.codacy.api.client.CodacyClient.post(CodacyClient.scala:71)
    at com.codacy.api.service.CoverageServices.postRequest(CoverageServices.scala:91)
    at com.codacy.api.service.CoverageServices.sendReport(CoverageServices.scala:27)
    at com.codacy.rules.ReportRules.sendReport(ReportRules.scala:128)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$8(ReportRules.scala:54)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$7(ReportRules.scala:53)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$6(ReportRules.scala:52)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$4(ReportRules.scala:51)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$3(ReportRules.scala:50)
    at scala.collection.immutable.List.map(List.scala:286)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$2(ReportRules.scala:47)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.$anonfun$codacyCoverage$1(ReportRules.scala:40)
    at com.codacy.rules.ReportRules.$anonfun$withCommitUUID$4(ReportRules.scala:267)
    at com.codacy.rules.ReportRules.$anonfun$withCommitUUID$4$adapted(ReportRules.scala:267)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.rules.ReportRules.withCommitUUID(ReportRules.scala:267)
    at com.codacy.rules.ReportRules.codacyCoverage(ReportRules.scala:35)
    at com.codacy.CodacyCoverageReporter$.$anonfun$sendReport$1(CodacyCoverageReporter.scala:41)
    at scala.util.Either.flatMap(Either.scala:341)
    at com.codacy.CodacyCoverageReporter$.sendReport(CodacyCoverageReporter.scala:33)
    at com.codacy.CodacyCoverageReporter$.run(CodacyCoverageReporter.scala:18)
    at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:13)
    at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:11)
    at caseapp.CommandAppWithPreCommand.$anonfun$main$1(CommandAppWithPreCommand.scala:97)
    at caseapp.CommandAppWithPreCommand.$anonfun$main$1$adapted(CommandAppWithPreCommand.scala:82)
    at scala.Option.foreach(Option.scala:407)
    at caseapp.CommandAppWithPreCommand.main(CommandAppWithPreCommand.scala:82)
    at com.codacy.CodacyCoverageReporter.main(CodacyCoverageReporter.scala)

I have double checked that the codacy token is correct and doesn't have any leading or trailing space or any weird characters.

Anyone has an idea why the upload to the codacy has this issue? Note that, this gradle task is working fine in the local machine, but it is creating issue in the CI.

1

There are 1 answers

0
Aman Sinha On BEST ANSWER

The CI was injecting the token with a new line. I solved this using the following:

task("uploadTestCoverageReportToCodacy", JavaExec::class) {
    dependsOn("codeCoverageReport")
    main = "com.codacy.CodacyCoverageReporter"
    classpath = codacy
    args = arrayListOf(
            "report",
            "-t",
            System.getenv("CODACY_PROJECT_TOKEN")?.trim() ?: "",
            "-l",
            "Kotlin",
            "-r",
            "$buildDir/reports/jacoco/jacocoTestReport.xml")
}