Skip to content

Commit

Permalink
Simplify build (#45)
Browse files Browse the repository at this point in the history
* Clean up build
* bump sbt
* bump mima (Scala 3)
  • Loading branch information
russellremple authored Dec 29, 2021
1 parent 7187816 commit 0eada62
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 103 deletions.
130 changes: 43 additions & 87 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ ThisBuild / licenses := Seq("MIT" -> url("https://opensource.org/licenses/MIT"))
Global / onChangedBuildSource := ReloadOnSourceChanges

ThisBuild / developers := List(
Developer(id = "jeffmay", name = "Jeff May", email = "jeff.n.may@gmail.com", url = url("https://github.com/jeffmay")),
Developer(id = "jeffmay", name = "Jeff May", email = "jeff.n.may@gmail.com", url = url("https://github.com/jeffmay"))
)

// don't look for previous versions of the root project, they don't exist
Expand All @@ -24,126 +24,95 @@ mimaFailOnNoPrevious := false
// don't publish the aggregate root project
publish / skip := true

def commonSettings(artifact: String): Seq[Setting[_]] =
def commonSettings(subProject: Option[String]): Seq[Setting[_]] = {
val artifact = ScalaCheckAxis.current(_.artifact(subProject))
val mimaPreviousVersion = scalaBinaryVersion(v => if (v == "3") "2.8.0" else "2.6.0")

Seq(
name := artifact,
name := artifact.value,

mimaPreviousArtifacts := (
if (scalaBinaryVersion.value == "3") Set.empty // remove once _3 is published
else Set(organization.value %% artifact % "2.6.0")
),
mimaPreviousArtifacts := Set(organization.value %% artifact.value % mimaPreviousVersion.value),

scalacOptions ++= Seq(
// "-Xfatal-warnings", // some methods in Scala 2.13 are deprecated, but I don't want to maintain to copies of source
"-deprecation:false",
"-feature",
"-encoding", "UTF-8"
) ++ (if (scalaBinaryVersion.value == "3") Seq.empty else Seq(
) ++ (if (scalaBinaryVersion.value == "3") Nil else Seq(
"-Xlint",
"-Ywarn-dead-code",
"-Ywarn-dead-code"
)),

// show full stack traces in test failures
Test / testOptions += Tests.Argument(TestFrameworks.ScalaTest, "-oF"),

// Don't publish the test artifacts, nobody should depend on these
Test / publishArtifact := false
Test / publishArtifact := false,

// Disable coverage for Scala 2.11 -- sbt-scoverage no longer supports it
coverageEnabled := scalaBinaryVersion.value != "2.11"
)
}

lazy val `core` = projectMatrix
.settings(commonSettings(subProject = None))
.settings(
// default locations, overridden in custom rows where needed
Compile / sourceDirectory := (file("core") / "src" / "main").getAbsoluteFile,
Test / sourceDirectory := (file("core") / "src" / "test").getAbsoluteFile,

scalacOptions ++= (scalaVersion.value match {
case Scala_2_13 => Seq("-Ymacro-annotations")
case _ => Seq()
case _ => Nil
}),

libraryDependencies ++= Seq(
izumiReflect,
tagging,
newtype // Test-only
ScalaCheckAxis.current.value.scalaCheck,
newtype, // Test-only
ScalaCheckAxis.current.value.scalaTest // Test-only
) ++ (scalaVersion.value match {
case Scala_2_11 | Scala_2_12 => Seq(
compilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full)
)
case _ => Seq()
case _ => Nil
})
)
.customRow(
scalaVersions = Seq(Scala_2_11),
scalaVersions = ScalaCheckAxis.v1_12.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_12, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_12.artifact) ++ Seq(
coverageEnabled := false, // Scala 2.11
settings = Seq(
Compile / sourceDirectory := (file("core_1-12") / "src" / "main").getAbsoluteFile,
Test / sourceDirectory := (file("core_1-12") / "src" / "test").getAbsoluteFile,
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_12.scalaCheck,
ScalaCheckAxis.v1_12.scalaTest
)
Test / sourceDirectory := (file("core_1-12") / "src" / "test").getAbsoluteFile
)
)
.customRow(
scalaVersions = Seq(Scala_2_11),
scalaVersions = ScalaCheckAxis.v1_13.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_13, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_13.artifact) ++ Seq(
coverageEnabled := false, // Scala 2.11
Test / sourceDirectory := (file("core-1-13-test") / "src" / "test").getAbsoluteFile,
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_13.scalaCheck,
ScalaCheckAxis.v1_13.scalaTest
)
)
)
.customRow(
scalaVersions = Seq(Scala_2_12),
axisValues = Seq(ScalaCheckAxis.v1_13, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_13.artifact) ++ Seq(
Test / sourceDirectory := (file("core-1-13-test") / "src" / "test").getAbsoluteFile,
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_13.scalaCheck,
ScalaCheckAxis.v1_13.scalaTest
)
)
)
.customRow(
scalaVersions = Seq(Scala_2_11),
axisValues = Seq(ScalaCheckAxis.v1_14, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_14.artifact) ++ Seq(
coverageEnabled := false, // Scala 2.11
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_14.scalaCheck,
ScalaCheckAxis.v1_14.scalaTest,
ScalaCheckAxis.v1_14.scalaTestPlusScalaCheck(scalaVersion.value)
)
settings = Seq(
Test / sourceDirectory := (file("core-1-13-test") / "src" / "test").getAbsoluteFile
)
)
.customRow(
scalaVersions = Seq(Scala_2_12, Scala_2_13),
scalaVersions = ScalaCheckAxis.v1_14.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_14, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_14.artifact) ++ Seq(
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_14.scalaCheck,
ScalaCheckAxis.v1_14.scalaTest,
ScalaCheckAxis.v1_14.scalaTestPlusScalaCheck(scalaVersion.value)
)
settings = Seq(
libraryDependencies +=
ScalaCheckAxis.current.value.scalaTestPlusScalaCheck(scalaVersion.value)
)
)
.customRow(
scalaVersions = Seq(Scala_2_12, Scala_2_13, Scala_3),
scalaVersions = ScalaCheckAxis.v1_15.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_15, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_15.artifact) ++ Seq(
libraryDependencies ++= Seq(
ScalaCheckAxis.v1_15.scalaCheck,
ScalaCheckAxis.v1_15.scalaTest,
ScalaCheckAxis.v1_15.scalaTestPlusScalaCheck(scalaVersion.value)
)
settings = Seq(
libraryDependencies +=
ScalaCheckAxis.current.value.scalaTestPlusScalaCheck(scalaVersion.value)
)
)

lazy val `joda` = projectMatrix
.settings(commonSettings(subProject = Some("joda")))
.dependsOn(`core` % "compile;test->test")
.settings(
Compile / sourceDirectory := file(s"joda/src/main").getAbsoluteFile,
Expand All @@ -153,35 +122,22 @@ lazy val `joda` = projectMatrix
libraryDependencies += jodaTime
)
.customRow(
scalaVersions = Seq(Scala_2_11),
scalaVersions = ScalaCheckAxis.v1_12.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_12, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_12.subArtifact("joda")) :+
(coverageEnabled := false) // Scala 2.11
settings = Nil
)
.customRow(
scalaVersions = Seq(Scala_2_11),
scalaVersions = ScalaCheckAxis.v1_13.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_13, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_13.subArtifact("joda")) :+
(coverageEnabled := false) // Scala 2.11
)
.customRow(
scalaVersions = Seq(Scala_2_12),
axisValues = Seq(ScalaCheckAxis.v1_13, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_13.subArtifact("joda"))
)
.customRow(
scalaVersions = Seq(Scala_2_11),
axisValues = Seq(ScalaCheckAxis.v1_14, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_14.subArtifact("joda")) :+
(coverageEnabled := false) // Scala 2.11
settings = Nil
)
.customRow(
scalaVersions = Seq(Scala_2_12, Scala_2_13),
scalaVersions = ScalaCheckAxis.v1_14.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_14, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_14.subArtifact("joda"))
settings = Nil
)
.customRow(
scalaVersions = Seq(Scala_2_12, Scala_2_13, Scala_3),
scalaVersions = ScalaCheckAxis.v1_15.scalaVersions,
axisValues = Seq(ScalaCheckAxis.v1_15, VirtualAxis.jvm),
settings = commonSettings(ScalaCheckAxis.v1_15.subArtifact("joda"))
settings = Nil
)
43 changes: 29 additions & 14 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import sbt._
import sbtprojectmatrix.ProjectMatrixPlugin.autoImport.virtualAxes

import scala.reflect.ClassTag

object Dependencies {

Expand All @@ -7,7 +10,7 @@ object Dependencies {
final val Scala_2_13 = "2.13.6"
final val Scala_3 = "3.1.0"

final private val ScalaTest_2 = "2.2.6"
final private val ScalaTest_2_2 = "2.2.6"

// Newer versions of ScalaTest separate the scalatestplus %% scalacheck-1-X dependencies,
// but do not support ScalaCheck 1.13.x
Expand All @@ -32,31 +35,43 @@ object Dependencies {
val tagging: ModuleID = "com.softwaremill.common" %% "tagging" % TaggingVersion

case class ScalaCheckAxis(
idSuffix: String,
version: String,
scalaTestVersion: String
id: String,
scalaCheckVersion: String,
scalaTestVersion: String,
scalaVersions: Seq[String]
) extends VirtualAxis.WeakAxis {
override def directorySuffix: String = s"-$idSuffix"

def artifact = s"scalacheck-ops_$idSuffix"
override def idSuffix: String = s"_$id"

override def directorySuffix: String = s"-$id"

def subArtifact(sub: String) = s"scalacheck-ops-${sub}_$idSuffix"
def artifact(subProject: Option[String]): String = subProject match {
case Some(sub) => s"scalacheck-ops-${sub}_$id"
case None => s"scalacheck-ops_$id"
}

def scalaCheck: ModuleID =
"org.scalacheck" %% "scalacheck" % version
"org.scalacheck" %% "scalacheck" % scalaCheckVersion

def scalaTest: ModuleID =
"org.scalatest" %% "scalatest" % scalaTestVersion % Test

def scalaTestPlusScalaCheck(scalaVer: String): ModuleID =
"org.scalatestplus" %% s"scalacheck-${idSuffix}" % scalaTestPlusScalaCheckVersion(scalaVer) % Test
"org.scalatestplus" %% s"scalacheck-$id" % scalaTestPlusScalaCheckVersion(scalaVer) % Test
}

object ScalaCheckAxis {
val v1_12 = ScalaCheckAxis("1-12", "1.12.6", ScalaTest_2)
val v1_13 = ScalaCheckAxis("1-13", "1.13.5", ScalaTest_3_0)
val v1_14 = ScalaCheckAxis("1-14", "1.14.3", ScalaTest_3_2)
val v1_15 = ScalaCheckAxis("1-15", "1.15.4", ScalaTest_3_2)
object ScalaCheckAxis extends CurrentAxis[ScalaCheckAxis] {
val v1_12 = ScalaCheckAxis("1-12", "1.12.6", ScalaTest_2_2, Seq(Scala_2_11))
val v1_13 = ScalaCheckAxis("1-13", "1.13.5", ScalaTest_3_0, Seq(Scala_2_11, Scala_2_12))
val v1_14 = ScalaCheckAxis("1-14", "1.14.3", ScalaTest_3_2, Seq(Scala_2_11, Scala_2_12, Scala_2_13))
val v1_15 = ScalaCheckAxis("1-15", "1.15.4", ScalaTest_3_2, Seq(Scala_2_12, Scala_2_13, Scala_3))
}

abstract class CurrentAxis[T: ClassTag] {

def current: Def.Initialize[T] = Def.setting {
virtualAxes.value.collectFirst { case a: T => a }.get
}
}

def for3Use2(m: ModuleID) = m.cross(CrossVersion.for3Use2_13)
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.5.3
sbt.version=1.6.0
2 changes: 1 addition & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1")
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.8.1")
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.0.1")
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.0-M3")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.7")
addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.0")

0 comments on commit 0eada62

Please sign in to comment.