Skip to content

Commit

Permalink
Merge pull request #26 from nbaztec/fix-25
Browse files Browse the repository at this point in the history
Support flag_name and parallel options
  • Loading branch information
nbaztec committed Dec 23, 2020
2 parents ae25472 + 2a74d8c commit 86caf81
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 54 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ $ ./gradlew test jacocoTestReport coverallsJacoco

Set the value of `COVERALLS_REPO_TOKEN` from the project page on coveralls.io

Additionally, the following coveralls parameters may be specified via environment variables:
* `COVERALLS_PARALLEL` (`true`/`false`)
* `COVERALLS_FLAG_NAME`

## Options
```kotlin
// build.gradle.kts
Expand Down
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

group = "com.github.nbaztec"
version = "1.2.4"
version = "1.2.5"

buildscript {
repositories {
Expand All @@ -12,7 +12,10 @@ buildscript {
}

tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
languageVersion = "1.4"
}
}

java {
Expand Down
64 changes: 35 additions & 29 deletions src/main/kotlin/CoverallsReporter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ data class Request(
val service_branch: String?,
val service_build_url: String?,
val git: GitInfo?,
val source_files: List<SourceReport>
val parallel: Boolean?,
val flag_name: String?,
val source_files: List<SourceReport>,
)

private fun Request.json() = Gson().toJson(this)
Expand All @@ -49,22 +51,22 @@ class CoverallsReporter(val envGetter: EnvGetter) {

logger.info("retrieving ci service info")
val serviceInfo = ServiceInfoParser(envGetter).parse()

val repoToken = envGetter("COVERALLS_REPO_TOKEN") ?: envGetter("GITHUB_TOKEN")
check(repoToken != null && repoToken.isNotBlank()) { "COVERALLS_REPO_TOKEN not set" }
val options = OptionsParser(envGetter).parse()

val req = Request(
repo_token = repoToken,
repo_name = serviceInfo.repoName,
service_name = serviceInfo.name,
service_number = serviceInfo.number,
service_job_id = serviceInfo.jobId,
service_job_number = serviceInfo.jobNumber,
service_pull_request = serviceInfo.pr,
service_branch = serviceInfo.branch,
service_build_url = serviceInfo.buildUrl,
git = gitInfo,
source_files = sourceFiles
repo_token = options.repoToken,
repo_name = serviceInfo.repoName,
service_name = serviceInfo.name,
service_number = serviceInfo.number,
service_job_id = serviceInfo.jobId,
service_job_number = serviceInfo.jobNumber,
service_pull_request = serviceInfo.pr,
service_branch = serviceInfo.branch,
service_build_url = serviceInfo.buildUrl,
git = gitInfo,
parallel = options.parallel,
flag_name = options.flagName,
source_files = sourceFiles,
)

send(pluginExtension.apiEndpoint, req)
Expand All @@ -74,28 +76,32 @@ class CoverallsReporter(val envGetter: EnvGetter) {
val httpClient = HttpClients.createDefault()
val httpPost = HttpPost(endpoint).apply {
config = RequestConfig
.custom()
.setConnectTimeout(defaultHttpTimeoutMs)
.setSocketTimeout(defaultHttpTimeoutMs)
.setConnectionRequestTimeout(defaultHttpTimeoutMs)
.build()
.custom()
.setConnectTimeout(defaultHttpTimeoutMs)
.setSocketTimeout(defaultHttpTimeoutMs)
.setConnectionRequestTimeout(defaultHttpTimeoutMs)
.build()

entity = MultipartEntityBuilder
.create()
.addBinaryBody(
"json_file",
req.json().toByteArray(Charsets.UTF_8),
ContentType.APPLICATION_JSON,
"json_file"
)
.build()
.create()
.addBinaryBody(
"json_file",
req.json().toByteArray(Charsets.UTF_8),
ContentType.APPLICATION_JSON,
"json_file"
)
.build()
}

logger.info("sending payload to coveralls")
logger.debug(req.json())
val res = httpClient.execute(httpPost)
if (res.statusLine.statusCode != 200) {
throw Exception("coveralls returned HTTP ${res.statusLine.statusCode}: ${EntityUtils.toString(res.entity).trim()}")
throw Exception(
"coveralls returned HTTP ${res.statusLine.statusCode}: ${
EntityUtils.toString(res.entity).trim()
}"
)
}
logger.info("OK")
}
Expand Down
19 changes: 19 additions & 0 deletions src/main/kotlin/OptionsParser.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.gradle.plugin.coveralls.jacoco

data class Options(
val repoToken: String,
val parallel: Boolean?,
val flagName: String?
)

class OptionsParser(val envGetter: EnvGetter) {
fun parse(): Options {
val repoToken = envGetter("COVERALLS_REPO_TOKEN") ?: envGetter("GITHUB_TOKEN")
check(repoToken != null && repoToken.isNotBlank()) { "COVERALLS_REPO_TOKEN not set" }

val parallel = envGetter("COVERALLS_PARALLEL")?.toBoolean()
val flagName = envGetter("COVERALLS_FLAG_NAME")

return Options(repoToken, parallel, flagName)
}
}
11 changes: 0 additions & 11 deletions src/test/kotlin/CoverallsReporterTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,6 @@ internal class CoverallsReporterTest {
}
}

@Test
fun `CoverallsReporter throws exception when repo token not set`() {
val envGetter = createEnvGetter(mapOf())
val project = mockProject()

val reporter = CoverallsReporter(envGetter)
assertThrows<IllegalStateException> { reporter.report(project) }.also {
assertEquals("COVERALLS_REPO_TOKEN not set", it.message)
}
}

@Test
fun `CoverallsReporter throws exception on coveralls server error`() = runBlocking {
val mockServer = HttpServer.create(InetSocketAddress("localhost", 0), 0).apply {
Expand Down
28 changes: 16 additions & 12 deletions src/test/kotlin/DataClassTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ internal class DataClassTest {

@Test
fun `data class ServiceInfo`() {
val svcInfo = ServiceInfo("name", "repo_name","number", "jobId", "jobNumber", "pr", "branch", "buildNumber")
val svcInfo = ServiceInfo("name", "repo_name", "number", "jobId", "jobNumber", "pr", "branch", "buildNumber")
assertEquals("name", svcInfo.name)
assertEquals("repo_name", svcInfo.repoName)
assertEquals("number", svcInfo.number)
Expand Down Expand Up @@ -69,17 +69,19 @@ internal class DataClassTest {
val gitInfo = mockk<GitInfo>()
val sourceFiles = emptyList<SourceReport>()
val req = Request(
"repo_token",
"service_name",
"repo_name",
"service_number",
"service_job_id",
"service_job_number",
"service_pull_request",
"service_branch",
"service_build_url",
gitInfo,
sourceFiles
"repo_token",
"service_name",
"repo_name",
"service_number",
"service_job_id",
"service_job_number",
"service_pull_request",
"service_branch",
"service_build_url",
gitInfo,
true,
"flag_name",
sourceFiles
)
assertEquals("repo_token", req.repo_token)
assertEquals("service_name", req.service_name)
Expand All @@ -90,6 +92,8 @@ internal class DataClassTest {
assertEquals("service_pull_request", req.service_pull_request)
assertEquals("service_branch", req.service_branch)
assertEquals("service_build_url", req.service_build_url)
assertEquals(true, req.parallel)
assertEquals("flag_name", req.flag_name)
assertEquals(gitInfo, req.git)
assertEquals(sourceFiles, req.source_files)
}
Expand Down
75 changes: 75 additions & 0 deletions src/test/kotlin/OptionsParserTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.gradle.plugin.coveralls.jacoco

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows

internal class OptionsParserTest {
@Test
fun `OptionsParser throws exception when repo token not set`() {
val envGetter = createEnvGetter(mapOf())

assertThrows<IllegalStateException> { OptionsParser(envGetter).parse() }.also {
assertEquals("COVERALLS_REPO_TOKEN not set", it.message)
}
}

@Test
fun `OptionsParser ignores missing parameter`() {
val envGetter = createEnvGetter(
mapOf(
"COVERALLS_REPO_TOKEN" to "foo",
)
)

val actual = OptionsParser(envGetter).parse()
val expected = Options(
repoToken = "foo",
parallel = null,
flagName = null,
)
assertEquals(expected, actual)
}

@Test
fun `OptionsParser parses falsy parallel parameter`() {
val envGetter = createEnvGetter(
mapOf(
"COVERALLS_REPO_TOKEN" to "foo",
"COVERALLS_PARALLEL" to "false",
)
)

val actual = OptionsParser(envGetter).parse()
val expected = Options(
repoToken = "foo",
parallel = false,
flagName = null,
)
assertEquals(expected, actual)
}


@Test
fun `OptionsParser parses coveralls parameter`() {
val envGetter = createEnvGetter(
mapOf(
"COVERALLS_REPO_TOKEN" to "foo",
"COVERALLS_PARALLEL" to "true",
"COVERALLS_FLAG_NAME" to "flag_name",
)
)

val actual = OptionsParser(envGetter).parse()
val expected = Options(
repoToken = "foo",
parallel = true,
flagName = "flag_name",
)
assertEquals(expected, actual)
}

private fun createEnvGetter(entries: Map<String, String>): EnvGetter {
return { k: String -> entries[k] }
}
}

0 comments on commit 86caf81

Please sign in to comment.