From ef62a9efe6225ce43434311ca9b7656eace0475e Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Wed, 18 Nov 2020 21:52:14 +0000 Subject: [PATCH] Expose project axes --- .gitignore | 17 ++++++ .../scala/sbt/internal/ProjectMatrix.scala | 3 + .../ProjectMatrixPlugin.scala | 8 ++- .../projectMatrix/projectAxes/build.sbt | 55 +++++++++++++++++++ .../projectAxes/project/ConfigAxis.scala | 3 + .../projectAxes/project/build.properties | 1 + .../projectAxes/project/plugins.sbt | 7 +++ src/sbt-test/projectMatrix/projectAxes/test | 2 + 8 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 src/sbt-test/projectMatrix/projectAxes/build.sbt create mode 100644 src/sbt-test/projectMatrix/projectAxes/project/ConfigAxis.scala create mode 100644 src/sbt-test/projectMatrix/projectAxes/project/build.properties create mode 100644 src/sbt-test/projectMatrix/projectAxes/project/plugins.sbt create mode 100644 src/sbt-test/projectMatrix/projectAxes/test diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..572c4f861 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +.bloop +.metals + +target + +project/.bloop +project/target +project/project/target + +*.class + +metals.sbt + +src/sbt-test/projectMatrix/projectAxes/target +src/sbt-test/projectMatrix/projectAxes/project/target + + diff --git a/src/main/scala/sbt/internal/ProjectMatrix.scala b/src/main/scala/sbt/internal/ProjectMatrix.scala index d32acedae..1f0b131d6 100644 --- a/src/main/scala/sbt/internal/ProjectMatrix.scala +++ b/src/main/scala/sbt/internal/ProjectMatrix.scala @@ -8,6 +8,8 @@ import Keys._ import scala.util.Try import sbt.internal.inc.ReflectUtilities +import sbtprojectmatrix.ProjectMatrixKeys + /** * A project matrix is an implementation of a composite project * that represents cross building across some axis (such as platform) @@ -261,6 +263,7 @@ object ProjectMatrix { inConfig(Compile)(makeSources(nonScalaDirSuffix, svDirSuffix)), inConfig(Test)(makeSources(nonScalaDirSuffix, svDirSuffix)), projectDependencies := projectDependenciesTask.value, + ProjectMatrixKeys.projectAxes := axes ) .settings(self.settings) .configure(transforms: _*) diff --git a/src/main/scala/sbtprojectmatrix/ProjectMatrixPlugin.scala b/src/main/scala/sbtprojectmatrix/ProjectMatrixPlugin.scala index 5dc6ed229..fd712ddcb 100644 --- a/src/main/scala/sbtprojectmatrix/ProjectMatrixPlugin.scala +++ b/src/main/scala/sbtprojectmatrix/ProjectMatrixPlugin.scala @@ -5,10 +5,16 @@ import internal._ import java.util.concurrent.atomic.AtomicBoolean import scala.language.experimental.macros +trait ProjectMatrixKeys { + val projectAxes = settingKey[Seq[VirtualAxis]]("Virtual axes for the project") +} + +object ProjectMatrixKeys extends ProjectMatrixKeys + object ProjectMatrixPlugin extends AutoPlugin { override val requires = sbt.plugins.CorePlugin override val trigger = allRequirements - object autoImport { + object autoImport extends ProjectMatrixKeys { def projectMatrix: ProjectMatrix = macro ProjectMatrix.projectMatrixMacroImpl implicit def matrixClasspathDependency[T]( diff --git a/src/sbt-test/projectMatrix/projectAxes/build.sbt b/src/sbt-test/projectMatrix/projectAxes/build.sbt new file mode 100644 index 000000000..c31a35cb3 --- /dev/null +++ b/src/sbt-test/projectMatrix/projectAxes/build.sbt @@ -0,0 +1,55 @@ +lazy val scala213 = "2.13.3" +lazy val scala212 = "2.12.12" +lazy val check = taskKey[Unit]("") +lazy val platformTest = settingKey[String]("") +lazy val configTest = settingKey[String]("") + + +lazy val config12 = ConfigAxis("Config1_2", "config1.2") +lazy val config13 = ConfigAxis("Config1_3", "config1.3") + +lazy val root = (project in file(".")) + .aggregate((core.projectRefs ++ custom.projectRefs):_*) + +lazy val core = (projectMatrix in file("core")) + .settings( + check := { + assert(platformTest.value.endsWith("-platform")) + }, + ) + .jvmPlatform(scalaVersions = Seq(scala213, scala212)) + .jsPlatform(scalaVersions = Seq(scala212)) + .settings(platformSettings) + +lazy val custom = + (projectMatrix in file("custom")) + .customRow( + scalaVersions = Seq(scala212), + axisValues = Seq(config13, VirtualAxis.jvm), + _.settings() + ) + .settings(platformSettings) + .settings(customSettings) + .settings( + check := { + assert(platformTest.value.endsWith("-platform")) + assert(configTest.value.startsWith("config for")) + } + ) + + +lazy val platformSettings = Seq[Def.Setting[_]]( + platformTest := { + if(projectAxes.value.contains(sbt.VirtualAxis.js)) "js-platform" + else if(projectAxes.value.contains(sbt.VirtualAxis.jvm)) "jvm-platform" + else throw new RuntimeException(s"Something must be wrong (built-in platforms test) - projectAxes value is ${projectAxes.value}") + } +) + +lazy val customSettings = Seq[Def.Setting[_]]( + configTest := { + if(projectAxes.value.contains(config12)) "config for 1.2" + else if (projectAxes.value.contains(config13)) "config for 1.3" + else throw new RuntimeException(s"Something must be wrong (custom axis test ) - projectAxes value is ${projectAxes.value}") + } +) diff --git a/src/sbt-test/projectMatrix/projectAxes/project/ConfigAxis.scala b/src/sbt-test/projectMatrix/projectAxes/project/ConfigAxis.scala new file mode 100644 index 000000000..bdabcb757 --- /dev/null +++ b/src/sbt-test/projectMatrix/projectAxes/project/ConfigAxis.scala @@ -0,0 +1,3 @@ +import sbt._ + +case class ConfigAxis(idSuffix: String, directorySuffix: String) extends VirtualAxis.WeakAxis diff --git a/src/sbt-test/projectMatrix/projectAxes/project/build.properties b/src/sbt-test/projectMatrix/projectAxes/project/build.properties new file mode 100644 index 000000000..0416226c2 --- /dev/null +++ b/src/sbt-test/projectMatrix/projectAxes/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.4.0-M1 diff --git a/src/sbt-test/projectMatrix/projectAxes/project/plugins.sbt b/src/sbt-test/projectMatrix/projectAxes/project/plugins.sbt new file mode 100644 index 000000000..2c6244454 --- /dev/null +++ b/src/sbt-test/projectMatrix/projectAxes/project/plugins.sbt @@ -0,0 +1,7 @@ +sys.props.get("plugin.version") match { + case Some(x) => addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % x) + case _ => sys.error("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) +} + +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.27") diff --git a/src/sbt-test/projectMatrix/projectAxes/test b/src/sbt-test/projectMatrix/projectAxes/test new file mode 100644 index 000000000..e3bd83da1 --- /dev/null +++ b/src/sbt-test/projectMatrix/projectAxes/test @@ -0,0 +1,2 @@ +> compile +> check