Как загрузить отчеты об испытаниях источников Kotlin в Coveralls?

Я хочу автоматически загрузить свой отчет о тестировании Jacoco в Coveralls после того, как завершится сборка Travis. Это работает для Java, но как настроить его для Kotlin?

Сообщение об ошибке

Я могу сгенерировать отчет о тестировании Jacoco локально и на Travis, но когда Travis пытается отправить в комбинезон, происходит сбой с сообщением

> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml

Google связывает меня с реализацией плагина Gradle, который показывает, куда он выдает это сообщение, которое говорит мне (я думаю), что файл отчета Jacoco найден, но не исходные файлы, которые явно нужны для комбинезона.

Что я пробовал

Поэтому я попытался указать задачу комбинезона на мои исходные файлы всеми этими способами:

coveralls {
    sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
    sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
    project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
    sourceDirs += ['src/test/kotlin']
    sourceDirs += ["${projectDir}/src/main/kotlin"]
}

Я также попытался добавить sourceSets project.sourceSets.main к jacocoTestReport задача.

Настройка проекта

Мой минимальный build.gradle файл:

plugins {

    id 'org.jetbrains.kotlin.jvm' version '1.2.50'
    id 'java' // Required by at least JUnit.

    // Test coverage
    id 'jacoco'

    // Upload jacoco coverage reports to coveralls
    id 'com.github.kt3k.coveralls'  version '2.8.2'
}

dependencies {
    compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'

    // JUnit 5
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.2.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
    testRuntime 'org.junit.platform:junit-platform-console:1.2.0'

    // Kotlintest
    testCompile 'io.kotlintest:kotlintest-core:3.1.6'
    testCompile 'io.kotlintest:kotlintest-assertions:3.1.6'
    testCompile 'io.kotlintest:kotlintest-runner-junit5:3.1.6'

    // Spek
    testCompile 'org.jetbrains.spek:spek-api:1.1.5'
    testRuntime 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

test {
    // Enable JUnit 5 (Gradle 4.6+).
    useJUnitPlatform()

    // Always run tests, even when nothing changed.
    dependsOn 'cleanTest'

    // Show test results.
    testLogging {
        events "passed", "skipped", "failed"
    }
}

// Test coverage reporting
jacocoTestReport {
    // Enable xml for coveralls.
    reports {
        html.enabled = true
        xml.enabled = true
        xml.setDestination(file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml"))
    }
}

coveralls {
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
}

Связанные вопросы

PS На самом деле я хочу использовать Gradle Kotlin DSL, но так как никто, кажется, не использует его, я задаю этот вопрос для Gradle. Но в конце я хочу, чтобы этот вопрос был решен и для Kotlin DSL.

3 ответа

Решение

Kotlin не поддерживается Coveralls, попробуйте https://codecov.io/. Установите его на GitHub с помощью Marketplace и добавьте в свой .travis.yml

after_success:
  - bash <(curl -s https://codecov.io/bash)

Затем совершите и нажмите, готово!

Вы можете просмотреть результат (после завершения сборки) по адресу https://codecov.io/gh/githubaccountname/reponame

Имеет аналогичный опыт работы с различными продуктами QA, не поддерживающими или частично поддерживающими кодовые базы Kotlin. Пытался отправить PR в поддержку пары проектов, но безрезультатно.

В конце концов, остановился на Coshops и добавил плагин, ориентированный на Kotlin, для платформы.

https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

Применение

Включите плагин в свой build.gradle.kts (аналогично для build.gradle файлы):

plugins {
    jacoco
    id("com.github.nbaztec.coveralls-jacoco")
}

Затем установите переменную среды COVERALLS_REPO_TOKEN к токену со страницы "Комбинезоны".

Теперь вы можете использовать coverallsJacoco задача опубликовать отчет о покрытии.

Для получения дополнительной информации и использования в CI см. https://github.com/nbaztec/coveralls-jacoco-gradle-plugin.

Не ответ, но в случае, если кто-то еще борется с nbaztec, как я, я хочу дать альтернативу, которая сработала для меня: https://github.com/kt3k/coshops-gradle-plugin

И помимо того, что находится в README.md, мне понадобилась эта деталь в build.gradle:

      coveralls {
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath "${buildDir}/reports/jacoco/report.xml"
}
Другие вопросы по тегам