sonar-scala / sbt-sonar

An sbt plugin which provides an easy way to integrate Scala projects with SonarQube.
https://sonar-scala.com/docs/setup/sbt-sonar
Apache License 2.0
62 stars 18 forks source link

Scoverage Sensor not honouring property sonar.projectBaseDir #14

Open gheo21 opened 6 years ago

gheo21 commented 6 years ago

Hello everybody,

I want to use sbt sonar for analyzing projects. However, the plugin is not able to pick up the scoverage information and display it in sonar for my sbt project. There is one caveat, I have a multi module build and all of my modules are in a subfolder called modules. (Please find attached sample project which is reproducing the error https://github.com/mwz/sbt-sonar/files/2335828/multi-module-new.zip)

I essentially changed the sample project from here https://github.com/mwz/sbt-sonar/commit/47126c442d1cdee40738a03361864d89f4b0ca8a and moved all the submodules in the submodule folder.

I'm running the sonnar scanner

sbt -Dsonar.host.url=http://localhost:80 -Dsonar.projectBaseDir=modules -Dsonar.sources=src/main/scala  -Dsonar.scoverage.reportPath=target/scala-2.12/scoverage-report/scoverage.xml  clean coverage test coverageReport sonarScan

Not producing any coverage information in sonar, just producing the warning:

WARN: [scoverage] The property: 'sonar.scoverage.reportPath' is deprecated, use the new property 'sonar.scala.scoverage.reportPath' instead.
[info] INFO: [scoverage] Loading the scoverage report file: 'modules/module1/target/scala-2.12/scoverage-report/scoverage.xml'.
[info] INFO: [scoverage] Successfully loaded the scoverage report file.
WARN: [scoverage] The file 'module1/src/main/scala/Example1.scala' has no scoverage information associated with it. 

Running it on the subproject does not make any difference:

sbt -Dsonar.host.url=http://localhost:80 -Dsonar.projectBaseDir=modules -Dsonar.sources=src/main/scala  -Dsonar.modules=module1 -Dsonar.scoverage.reportPath=target/scala-2.12/scoverage-report/scoverage.xml "project module1" clean coverage test coverageReport sonarScan

Note: Using the docker sonar image sonarqube:6.7.5-alpine via docker compose up. (from here https://github.com/mwz/sonar-scala-docker)

BalmungSan commented 6 years ago

Hello @gheo21, by chance are you running the analysis from a Wiindows machine ?

gheo21 commented 6 years ago

Hello,

@BalmungSan no, it 's a macOs. I've already checked the other items related to the test coverage not being shown, but I couldn't find a fix it.

Thanks!

mwz commented 6 years ago

Thanks for reporting this issue @gheo21. It is interesting and before I do any digging I was wondering if you had a chance to check the following:

Just as a sidenote, from my understanding of how the projectBaseDir property works, if you set it sonar will no longer run analysis on your aggregate project, but I can be wrong about this.

gheo21 commented 6 years ago

Hello @mwz,

Thanks for getting back to me.

  1. It looks like the other plugins are not affected by this.
  2. It works if I execute the sonnar-scanner, though not using the projectBaseDir
    unzip multi-module-new.zip
    cd multi-module-new/modules
    $SONAR_SCANNER_HOME/bin/sonar-scanner -Dsonar.modules=module1,module2 -Dsonar.host.url=http://localhost:80 -Dsonar.projectKey=module1 -Dmodule1.sonar.sources=src/main/scala -Dmodule2.sonar.sources=src/main/scala -Dsonar.scala.scoverage.reportPath=target/scala-2.12/scoverage-report/scoverage.xml

    So as an intermediate solution I will go with option two, but I think this should work with the sonar scanner sbt plugin.

Best regards!

mwz commented 6 years ago

Ok, if other plugins are not affected by this, then it's probably got something to do with the way sonar-scala matches paths in the Scoverage reports. I'll have a look into this when I get a minute.