Skip to content

Commit 9cc584e

Browse files
Merge remote-tracking branch 'scoverage/master' into 132-coverageMinimum
2 parents 5a9f9bd + 25f769f commit 9cc584e

File tree

6 files changed

+73
-11
lines changed

6 files changed

+73
-11
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ discussion on scoverage.
1414

1515
Add the plugin to your build with the following in project/plugins.sbt:
1616
```scala
17-
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.3.2")
17+
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.3.3")
1818
```
1919

2020
Then run the your tests with coverage enabled by entering:

Diff for: build.sbt

+34-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
name := "sbt-scoverage"
2+
23
organization := "org.scoverage"
4+
35
sbtPlugin := true
46

57
scalacOptions := Seq("-unchecked", "-deprecation", "-feature", "-encoding", "utf8")
68

79
resolvers ++= {
8-
if(isSnapshot.value) Seq(Resolver.mavenLocal, Resolver.sonatypeRepo("snapshots"))
10+
if (isSnapshot.value) Seq(Resolver.mavenLocal, Resolver.sonatypeRepo("snapshots"))
911
else Seq.empty
1012
}
1113

1214
libraryDependencies += "org.scoverage" %% "scalac-scoverage-plugin" % "1.1.1"
1315

14-
publishMavenStyle := false
15-
publishArtifact in Test := false
16+
publishMavenStyle := true
1617

17-
licenses +=("Apache-2.0", url("http://www.apache.org/licenses/LICENSE-2.0.html"))
18+
publishArtifact in Test := false
1819

1920
ScriptedPlugin.scriptedSettings
2021

@@ -25,6 +26,33 @@ scriptedLaunchOpts ++= Seq(
2526

2627
releaseSettings
2728

28-
bintrayOrganization := None
29-
bintrayRepository := "sbt-plugins"
29+
publishTo <<= version {
30+
(v: String) =>
31+
val nexus = "https://oss.sonatype.org/"
32+
if (v.trim.endsWith("SNAPSHOT"))
33+
Some("snapshots" at nexus + "content/repositories/snapshots")
34+
else
35+
Some("releases" at nexus + "service/local/staging/deploy/maven2")
36+
}
3037

38+
pomExtra := {
39+
<url>https://github.com/scoverage/sbt-scoverage</url>
40+
<licenses>
41+
<license>
42+
<name>Apache 2</name>
43+
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
44+
<distribution>repo</distribution>
45+
</license>
46+
</licenses>
47+
<scm>
48+
<url>git@github.com:scoverage/sbt-scoverage.git</url>
49+
<connection>scm:git@github.com:scoverage/sbt-scoverage.git</connection>
50+
</scm>
51+
<developers>
52+
<developer>
53+
<id>sksamuel</id>
54+
<name>sksamuel</name>
55+
<url>http://github.com/sksamuel</url>
56+
</developer>
57+
</developers>
58+
}

Diff for: project/plugins.sbt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
libraryDependencies += "org.scala-sbt" % "scripted-plugin" % sbtVersion.value
22

3+
addSbtPlugin("com.typesafe.sbt" % "sbt-pgp" % "0.8.3")
4+
35
addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.3.0")
46

57
addSbtPlugin("com.github.gseitz" % "sbt-release" % "0.8.5")
6-
7-
addSbtPlugin("me.lessis" % "bintray-sbt" % "0.3.0")

Diff for: src/main/scala/scoverage/ScoverageKeys.scala

+1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ object ScoverageKeys {
1616
lazy val coverageOutputHTML = settingKey[Boolean]("enables html report generation")
1717
lazy val coverageOutputDebug = settingKey[Boolean]("turn on the debug report")
1818
lazy val coverageCleanSubprojectFiles = settingKey[Boolean]("removes subproject data after an aggregation")
19+
lazy val coverageOutputTeamCity = settingKey[Boolean]("turn on teamcity reporting")
1920
}

Diff for: src/main/scala/scoverage/ScoverageSbtPlugin.scala

+34-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scoverage
22

33
import sbt.Keys._
44
import sbt._
5+
import scoverage.ScoverageKeys._
56
import scoverage.report.{CoverageAggregator, CoberturaXmlWriter, ScoverageHtmlWriter, ScoverageXmlWriter}
67

78
object ScoverageSbtPlugin extends AutoPlugin {
@@ -40,7 +41,8 @@ object ScoverageSbtPlugin extends AutoPlugin {
4041
coverageOutputHTML := true,
4142
coverageOutputCobertura := true,
4243
coverageOutputDebug := false,
43-
coverageCleanSubprojectFiles := true
44+
coverageCleanSubprojectFiles := true,
45+
coverageOutputTeamCity := false
4446
)
4547

4648
/**
@@ -72,6 +74,7 @@ object ScoverageSbtPlugin extends AutoPlugin {
7274
coverageOutputXML.value,
7375
coverageOutputHTML.value,
7476
coverageOutputDebug.value,
77+
coverageOutputTeamCity.value,
7578
log)
7679

7780
checkCoverage(cov, log, coverageMinimum.value, coverageFailOnMinimum.value)
@@ -94,6 +97,7 @@ object ScoverageSbtPlugin extends AutoPlugin {
9497
coverageOutputXML.value,
9598
coverageOutputHTML.value,
9699
coverageOutputDebug.value,
100+
coverageOutputTeamCity.value,
97101
log)
98102
val cfmt = cov.statementCoverageFormatted
99103
log.info(s"Aggregation complete. Coverage was [$cfmt]")
@@ -145,6 +149,7 @@ object ScoverageSbtPlugin extends AutoPlugin {
145149
coverageOutputXML: Boolean,
146150
coverageOutputHTML: Boolean,
147151
coverageDebug: Boolean,
152+
coverageOutputTeamCity: Boolean,
148153
log: Logger): Unit = {
149154
log.info(s"Generating scoverage reports...")
150155

@@ -170,10 +175,38 @@ object ScoverageSbtPlugin extends AutoPlugin {
170175
log.info(s"Written HTML coverage report [${reportDir.getAbsolutePath}/index.html]")
171176
new ScoverageHtmlWriter(compileSourceDirectories, reportDir).write(coverage)
172177
}
178+
if (coverageOutputTeamCity) {
179+
log.info("Writing coverage report to teamcity")
180+
reportToTeamcity(coverage, coverageOutputHTML, reportDir, crossTarget, log)
181+
}
173182

183+
log.info(s"Statement coverage.: ${coverage.statementCoverageFormatted}%")
184+
log.info(s"Branch coverage....: ${coverage.branchCoverageFormatted}%")
174185
log.info("Coverage reports completed")
175186
}
176187

188+
private def reportToTeamcity(coverage: Coverage,
189+
createCoverageZip: Boolean,
190+
reportDir: File,
191+
crossTarget: File,
192+
log: Logger) {
193+
194+
195+
def statsKeyValue(key: String, value: Int): String =
196+
s"##teamcity[buildStatisticValue key='${key}' value='${value}']"
197+
198+
// Log statement coverage as per: https://devnet.jetbrains.com/message/5467985
199+
log.info(statsKeyValue("CodeCoverageAbsSCovered", coverage.invokedStatementCount))
200+
log.info(statsKeyValue("CodeCoverageAbsSTotal", coverage.statementCount))
201+
202+
// Log branch coverage as a custom metrics (in percent)
203+
log.info(statsKeyValue("CodeCoverageBranch", "%.0f".format(coverage.branchCoveragePercent).toInt))
204+
205+
// Create the coverage report for teamcity (HTML files)
206+
if (createCoverageZip)
207+
IO.zip(Path.allSubpaths(reportDir), crossTarget / "coverage.zip")
208+
}
209+
177210
private def loadCoverage(crossTarget: File, log: Logger): Option[Coverage] = {
178211

179212
val dataDir = crossTarget / "/scoverage-data"

Diff for: version.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "1.3.2"
1+
version in ThisBuild := "1.3.4"

0 commit comments

Comments
 (0)