From ea5cc2269cc4f5e76800a7bc928c247ac6dd95b2 Mon Sep 17 00:00:00 2001 From: Tobias Roeser Date: Sat, 2 Mar 2024 19:02:46 +0100 Subject: [PATCH 1/2] Do not include the scalac plugin in the Scoverage reporting classpath --- .../contrib/scoverage/ScoverageModule.scala | 65 +++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala b/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala index 5d3512cfddf..ec186f061a0 100644 --- a/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala +++ b/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala @@ -108,45 +108,42 @@ trait ScoverageModule extends ScalaModule { outer: ScalaModule => } } + private def scoverageReporterIvyDeps() = T { + // we need to resolve with same Scala version used for Mill, not the project Scala version + val scalaBinVersion = ZincWorkerUtil.scalaBinaryVersion(BuildInfo.scalaVersion) + val sv = scoverageVersion() + + if (sv.startsWith("1.x")) { + // In Scoverage 1.x, the reporting API is included in the plugin jar + val scalaVersion = BuildInfo.scalaVersion.split("[.]").toList match { + // Scoverage 1 is not released for Scala > 2.13.8, but we don't need to compiler specific code, + // only the reporter API, which does not depend on the Compiler API, so using another full Scala version + // should be safe + case "2" :: "13" :: c :: _ if sv.startsWith("1.") && Try(c.toInt).getOrElse(0) > 8 => + val v = "2.13.8" + T.log.outputStream.println( + s"Detected an unsupported Scala version (${BuildInfo.scalaVersion}). Using Scala version ${v} to resolve scoverage ${sv} reporting API." + ) + v + case _ => BuildInfo.scalaVersion + } + Agg(ivy"org.scoverage:scalac-scoverage-plugin_${scalaVersion}:${sv}") + } else { + // In Scoverage 2.x, the reporting API is no longer bundled in the plugin jar + Agg( + ivy"org.scoverage:scalac-scoverage-domain_${scalaBinVersion}:${sv}", + ivy"org.scoverage:scalac-scoverage-serializer_${scalaBinVersion}:${sv}", + ivy"org.scoverage:scalac-scoverage-reporter_${scalaBinVersion}:${sv}" + ) + } + } + def scoverageToolsClasspath: T[Agg[PathRef]] = T { checkVersions() scoverageReportWorkerClasspath() ++ resolveDeps(T.task { - // we need to resolve with same Scala version used for Mill, not the project Scala version - val scalaBinVersion = ZincWorkerUtil.scalaBinaryVersion(BuildInfo.scalaVersion) - val sv = scoverageVersion() - - val baseDeps = Agg( - ivy"org.scoverage:scalac-scoverage-domain_${scalaBinVersion}:${sv}", - ivy"org.scoverage:scalac-scoverage-serializer_${scalaBinVersion}:${sv}", - ivy"org.scoverage:scalac-scoverage-reporter_${scalaBinVersion}:${sv}" - ) - - val scalaVersion = BuildInfo.scalaVersion.split("[.]").toList match { - // Scoverage 1 is not released for Scala > 2.13.8, but we don't need to compiler specific code, - // only the reporter API, which does not depend on the Compiler API, so using another full Scala version - // should be safe - case "2" :: "13" :: c :: _ if sv.startsWith("1.") && Try(c.toInt).getOrElse(0) > 8 => - val v = "2.13.8" - T.log.outputStream.println( - s"Detected an unsupported Scala version (${BuildInfo.scalaVersion}). Using Scala version ${v} to resolve scoverage ${sv} reporting API." - ) - v - case _ => BuildInfo.scalaVersion - } - - val pluginDep = - Agg(ivy"org.scoverage:scalac-scoverage-plugin_${scalaVersion}:${sv}") - - val deps = if (isScala3() && isScoverage2()) { - baseDeps - } else if (isScoverage2()) { - baseDeps ++ pluginDep - } else { - pluginDep - } - deps.map(bindDependency()) + scoverageReporterIvyDeps().map(bindDependency()) })() } From 6174049cec4129592485c5673ce4f510f77bae18 Mon Sep 17 00:00:00 2001 From: Tobias Roeser Date: Sat, 2 Mar 2024 20:21:34 +0100 Subject: [PATCH 2/2] . --- .../contrib/scoverage/ScoverageModule.scala | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala b/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala index ec186f061a0..73ad05bad7c 100644 --- a/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala +++ b/contrib/scoverage/src/mill/contrib/scoverage/ScoverageModule.scala @@ -2,12 +2,11 @@ package mill.contrib.scoverage import coursier.Repository import mill._ -import mill.api.{Loose, PathRef} +import mill.api.{Loose, PathRef, Result} import mill.main.BuildInfo import mill.contrib.scoverage.api.ScoverageReportWorkerApi.ReportType import mill.scalalib.api.ZincWorkerUtil import mill.scalalib.{Dep, DepSyntax, JavaModule, ScalaModule} -import mill.api.Result import mill.util.Util.millProjectModule import scala.util.Try @@ -108,27 +107,30 @@ trait ScoverageModule extends ScalaModule { outer: ScalaModule => } } - private def scoverageReporterIvyDeps() = T { - // we need to resolve with same Scala version used for Mill, not the project Scala version - val scalaBinVersion = ZincWorkerUtil.scalaBinaryVersion(BuildInfo.scalaVersion) + private def scoverageReporterIvyDeps: T[Agg[Dep]] = T { + checkVersions() + val sv = scoverageVersion() + val millScalaVersion = BuildInfo.scalaVersion - if (sv.startsWith("1.x")) { + if (sv.startsWith("1.")) { // In Scoverage 1.x, the reporting API is included in the plugin jar - val scalaVersion = BuildInfo.scalaVersion.split("[.]").toList match { + val scalaVersion = millScalaVersion.split("[.]", 4).toList.take(3) match { // Scoverage 1 is not released for Scala > 2.13.8, but we don't need to compiler specific code, // only the reporter API, which does not depend on the Compiler API, so using another full Scala version // should be safe - case "2" :: "13" :: c :: _ if sv.startsWith("1.") && Try(c.toInt).getOrElse(0) > 8 => + case "2" :: "13" :: c :: _ if Try(c.toInt).getOrElse(0) > 8 => val v = "2.13.8" T.log.outputStream.println( - s"Detected an unsupported Scala version (${BuildInfo.scalaVersion}). Using Scala version ${v} to resolve scoverage ${sv} reporting API." + s"Detected an unsupported Scala version (${millScalaVersion}). Using Scala version ${v} to resolve scoverage ${sv} reporting API." ) v - case _ => BuildInfo.scalaVersion + case _ => millScalaVersion } Agg(ivy"org.scoverage:scalac-scoverage-plugin_${scalaVersion}:${sv}") } else { + // we need to resolve with same Scala version used for Mill, not the project Scala version + val scalaBinVersion = ZincWorkerUtil.scalaBinaryVersion(millScalaVersion) // In Scoverage 2.x, the reporting API is no longer bundled in the plugin jar Agg( ivy"org.scoverage:scalac-scoverage-domain_${scalaBinVersion}:${sv}", @@ -139,8 +141,6 @@ trait ScoverageModule extends ScalaModule { outer: ScalaModule => } def scoverageToolsClasspath: T[Agg[PathRef]] = T { - checkVersions() - scoverageReportWorkerClasspath() ++ resolveDeps(T.task { scoverageReporterIvyDeps().map(bindDependency())