Merge pull request #5512 from eed3si9n/wip/cross-fix

cross building tests and fixes
This commit is contained in:
eugene yokota 2020-04-24 10:17:55 -04:00 committed by GitHub
commit e65224c834
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 136 additions and 56 deletions

View File

@ -54,12 +54,17 @@ object Cross {
}
}
val spacedVersion = if (spacePresent) version else version & spacedFirst(SwitchCommand)
val verbose = Parser.opt(token(Space ~> "-v"))
val verboseOpt = Parser.opt(token(Space ~> "-v"))
val optionalCommand = Parser.opt(token(Space ~> matched(state.combinedParser)))
(spacedVersion ~ verbose ~ optionalCommand).map {
val switch1 = (token(Space ~> "-v") ~> (Space ~> version) ~ optionalCommand) map {
case v ~ command =>
Switch(v, true, command)
}
val switch2 = (spacedVersion ~ verboseOpt ~ optionalCommand) map {
case v ~ verbose ~ command =>
Switch(v, verbose.isDefined, command)
}
switch1 | switch2
}
token(SwitchCommand ~> OptSpace) flatMap { sp =>
@ -195,11 +200,11 @@ object Cross {
commandsByVersion.flatMap {
case (v, commands) =>
commands match {
case Seq(c) => Seq(s"$SwitchCommand $verbose $v! $c")
case Seq(c) => Seq(s"$SwitchCommand $verbose $v $c")
case Seq() => Nil // should be unreachable
case multi if fullArgs.isEmpty =>
Seq(s"$SwitchCommand $verbose $v! all ${multi.mkString(" ")}")
case multi => Seq(s"$SwitchCommand $verbose $v!") ++ multi
Seq(s"$SwitchCommand $verbose $v all ${multi.mkString(" ")}")
case multi => Seq(s"$SwitchCommand $verbose $v") ++ multi
}
}
}
@ -242,15 +247,18 @@ object Cross {
if (args.version.force) {
// The Scala version was forced on the whole build, run as is
args.command
} else {
} else
args.command.map { rawCmd =>
val (aggs, aggCommand) = parseSlashCommand(Project.extract(state))(rawCmd)
aggs
.intersect(affectedRefs)
.map({ case ProjectRef(_, proj) => s"$proj/$aggCommand" })
.mkString("all ", " ", "")
// for now, treat `all` command specially
if (rawCmd.startsWith("all ")) rawCmd
else {
val (aggs, aggCommand) = parseSlashCommand(Project.extract(state))(rawCmd)
aggs
.intersect(affectedRefs)
.map({ case ProjectRef(_, proj) => s"$proj/$aggCommand" })
.mkString("all ", " ", "")
}
}
}
strictCmd.toList ::: switchedState
}

View File

@ -0,0 +1,59 @@
lazy val check = taskKey[Unit]("")
lazy val compile2 = taskKey[Unit]("")
lazy val root = (project in file("."))
.aggregate(foo, bar, client)
.settings(
crossScalaVersions := Nil,
addCommandAlias("build", "compile2"),
)
lazy val foo = project
.settings(
crossScalaVersions := Seq("2.12.11", "2.13.1"),
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0",
check := {
// This tests that +check will respect bar's crossScalaVersions and not switch
val x = (LocalProject("bar") / scalaVersion).value
assert(x == "2.12.11", s"$x == 2.12.11")
(Compile / compile).value
},
(Test / testOnly) := {
// This tests that +testOnly will respect bar's crossScalaVersions and not switch
val x = (LocalProject("bar") / scalaVersion).value
assert(x == "2.12.11", s"$x == 2.12.11")
val _ = (Test / testOnly).evaluated
},
compile2 := {
// This tests that +build will ignore bar's crossScalaVersions and use root's like sbt 0.13
val x = (LocalProject("bar") / scalaVersion).value
assert(x == scalaVersion.value, s"$x == ${scalaVersion.value}")
(Compile / compile).value
},
)
lazy val bar = project
.settings(
crossScalaVersions := Seq("2.12.11"),
check := (Compile / compile).value,
compile2 := (Compile / compile).value,
)
lazy val baz = project
.settings(
crossScalaVersions := Seq("2.13.1"),
check := {
// This tests that +baz/check will respect bar's crossScalaVersions and not switch
val x = (LocalProject("bar") / scalaVersion).value
assert(x == "2.12.11", s"$x == 2.12.11")
(Compile / compile).value
},
)
lazy val client = project
.settings(
crossScalaVersions := Seq("2.12.11", "2.13.1"),
check := (Compile / compile).value,
compile2 := (Compile / compile).value,
)

View File

@ -0,0 +1,27 @@
> + clean
## verbose
> + -v compile
## test scoped task
## this should not force any Scala version changes to other subprojects
> + baz/check
## test input task
> + foo / testOnly foo.FooSpec
> + testOnly foo.FooSpec
## test + with task in multi-project with different Scala versions
> + check
## test + with command or alias
> clean
## for command cross building you do need crossScalaVerions on root
> set root/crossScalaVersions := Seq("2.12.11", "2.13.1")
> + build
$ exists foo/target/scala-2.12
$ exists foo/target/scala-2.13
$ exists bar/target/scala-2.12
$ exists bar/target/scala-2.13
$ exists client/target/scala-2.12
$ exists client/target/scala-2.13

View File

@ -1,16 +0,0 @@
lazy val root = (project in file("."))
.aggregate(foo, client)
.settings(
crossScalaVersions := Nil
)
lazy val foo = project
.settings(
crossScalaVersions := Seq("2.12.11", "2.13.1"),
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0",
)
lazy val client = project
.settings(
crossScalaVersions := Seq("2.12.11", "2.13.1"),
)

View File

@ -1,5 +0,0 @@
> + clean
> + foo / testOnly foo.FooSpec
> + testOnly foo.FooSpec

View File

@ -1,20 +1,24 @@
scalaVersion in ThisBuild := "2.7.7"
ThisBuild / scalaVersion := "2.11.12"
scalaVersion := "2.9.1"
lazy val root = (project in file("."))
.settings(
scalaVersion := "2.12.11",
scalaVersion in update := {
scalaVersion.value match {
case "2.9.1" => "2.9.0-1"
case "2.8.2" => "2.8.1"
case x => x
}
}
update / scalaVersion := {
scalaVersion.value match {
case "2.12.11" => "2.12.10"
case "2.11.12" => "2.11.11"
case x => x
}
},
InputKey[Unit]("check") := {
val args = Def.spaceDelimited().parsed
def check(label: String, i: Int, actual: String) =
assert(args(i) == actual, s"Expected $label='${args(i)}' got '$actual'")
check("scalaVersion in ThisBuild", 0, scalaVersion in ThisBuild value)
check("scalaVersion", 1, scalaVersion.value)
check("scalaVersion in update", 2, scalaVersion in update value)
}
InputKey[Unit]("check") := {
val args = Def.spaceDelimited().parsed
def checkV(label: String, i: Int, actual: String) =
assert(args(i) == actual, s"Expected $label='${args(i)}' got '$actual'")
checkV("ThisBuild / scalaVersion", 0, (ThisBuild / scalaVersion).value)
checkV("scalaVersion", 1, scalaVersion.value)
checkV("update / scalaVersion", 2, (update / scalaVersion).value)
}
)

View File

@ -1,8 +1,11 @@
> check 2.7.7 2.9.1 2.9.0-1
> ++ 2.8.2!
> check 2.8.2 2.8.2 2.8.1
> ++ 2.10.4!
> check 2.11.12 2.12.11 2.12.10
> ++ 2.11.12!
> check 2.11.12 2.11.12 2.11.11
> ++ 2.13.1!
> set resolvers ++= Nil
> check 2.10.4 2.10.4 2.10.4
> check 2.13.1 2.13.1 2.13.1
> session clear-all
> check 2.7.7 2.9.1 2.9.0-1
> check 2.11.12 2.12.11 2.12.10