Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Simplify build settings #29

Merged
merged 4 commits into from
Sep 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 26 additions & 149 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,113 +1,52 @@
import sbt.url
import sbtrelease.ReleaseStateTransformations._

val scalatestVersion = "3.0.8"
val scalacticVersion = "3.0.8"
val enableIfVersion = "1.1.7"

organization in ThisBuild := "net.exoego"

lazy val commonSettings = Seq(
autoCompilerPlugins := true,
scalacOptions ++= Seq(
"-deprecation",
"-unchecked",
"-feature",
"-language:implicitConversions",
"-Xlint"
),
scalacOptions in Compile in compile ++= Seq(
"-Xfatal-warnings"
),
scalacOptions in Compile in doc ++= Seq(
"-Xfatal-warnings",
"-no-link-warnings"
),
autoAPIMappings := true
)
lazy val commonScalaJsSettings = Seq(
scalacOptions += "-P:scalajs:sjsDefinedByDefault",
scalaJSModuleKind := ModuleKind.CommonJSModule,
logBuffered in Test := true
)
lazy val commonMacroParadiseSetting = Seq(
Compile / scalacOptions ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => "-Ymacro-annotations" :: Nil
case _ => Nil
}
},
libraryDependencies ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => Nil
case _ => compilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full) :: Nil
}
}
)
val nonPublishingSetting = Seq(
skip in publish := true,
publishArtifact := false,
publish := {},
publishLocal := {}
)

lazy val root = (project in file("."))
.aggregate(core, current, nodejs_v8)
.settings(commonSettings)
.settings(publishingSettings)
.settings(nonPublishingSetting)
.settings(MySettings.commonSettings)
.settings(MySettings.publishingSettings)
.settings(MySettings.nonPublishingSetting)
.settings(
name := "scala-js-nodejs-all"
name := "scala-js-nodejs"
)

lazy val core = (project in file("./core"))
.enablePlugins(ScalaJSPlugin)
.settings(commonSettings)
.settings(commonScalaJsSettings)
.settings(publishingSettings)
.settings(MySettings.commonSettings)
.settings(MySettings.commonScalaJsSettings)
.settings(MySettings.publishingSettings)
.settings(
name := "scala-js-nodejs-core",
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scalatest" %%% "scalatest" % scalatestVersion % "test"
)
libraryDependencies ++= Dependencies.core.value
)

lazy val compilerSwitches = (project in file("./compiler-switches"))
.settings(commonSettings)
.settings(nonPublishingSetting)
.settings(MySettings.commonSettings)
.settings(MySettings.nonPublishingSetting)
.settings(
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaVersion.value
)
libraryDependencies += Dependencies.scalaReflect.value
)

lazy val current = (project in file("./app/current"))
.enablePlugins(ScalaJSPlugin)
.settings(commonSettings)
.settings(commonScalaJsSettings)
.settings(commonMacroParadiseSetting)
.settings(publishingSettings)
.settings(MySettings.commonSettings)
.settings(MySettings.commonScalaJsSettings)
.settings(MySettings.commonMacroParadiseSetting)
.settings(MySettings.publishingSettings)
.settings(
scalacOptions ++= Seq(
"-Xmacro-settings:nodeJs12.5.0"
),
name := "scala-js-nodejs-v12",
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scalactic" %% "scalactic" % scalacticVersion,
"org.scalatest" %%% "scalatest" % scalatestVersion % "test",
"com.thoughtworks.enableIf" %% "enableif" % enableIfVersion
)
libraryDependencies ++= Dependencies.app.value
)
.dependsOn(core, compilerSwitches)

lazy val nodejs_v10 = (project in file("./app/nodejs-v10"))
.enablePlugins(ScalaJSPlugin)
.settings(commonSettings)
.settings(commonScalaJsSettings)
.settings(commonMacroParadiseSetting)
.settings(publishingSettings)
.settings(MySettings.commonSettings)
.settings(MySettings.commonScalaJsSettings)
.settings(MySettings.commonMacroParadiseSetting)
.settings(MySettings.publishingSettings)
.settings(
unmanagedSourceDirectories in Compile += (baseDirectory in current).value / "src" / "main" / "scala",
scalacOptions ++= Seq(
Expand All @@ -116,21 +55,16 @@ lazy val nodejs_v10 = (project in file("./app/nodejs-v10"))
name := "scala-js-nodejs-v10",
description := "NodeJS v10.16.0 API for Scala.js",
homepage := Some(url("https://github.com/exoego/scala-js-nodejs")),
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scalactic" %% "scalactic" % scalacticVersion,
"org.scalatest" %%% "scalatest" % scalatestVersion % "test",
"com.thoughtworks.enableIf" %% "enableif" % enableIfVersion
)
libraryDependencies ++= Dependencies.app.value
)
.dependsOn(core, compilerSwitches)

lazy val nodejs_v8 = (project in file("./app/nodejs-v8"))
.enablePlugins(ScalaJSPlugin)
.settings(commonSettings)
.settings(commonScalaJsSettings)
.settings(commonMacroParadiseSetting)
.settings(publishingSettings)
.settings(MySettings.commonSettings)
.settings(MySettings.commonScalaJsSettings)
.settings(MySettings.commonMacroParadiseSetting)
.settings(MySettings.publishingSettings)
.settings(
unmanagedSourceDirectories in Compile += (baseDirectory in current).value / "src" / "main" / "scala",
scalacOptions ++= Seq(
Expand All @@ -139,63 +73,6 @@ lazy val nodejs_v8 = (project in file("./app/nodejs-v8"))
name := "scala-js-nodejs-v8",
description := "NodeJS v8.16.0 API for Scala.js",
homepage := Some(url("https://github.com/exoego/scala-js-nodejs")),
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scalactic" %% "scalactic" % scalacticVersion,
"org.scalatest" %%% "scalatest" % scalatestVersion % "test",
"com.thoughtworks.enableIf" %% "enableif" % enableIfVersion
)
libraryDependencies ++= Dependencies.app.value
)
.dependsOn(core, compilerSwitches)

lazy val publishingSettings = Seq(
licenses := Seq("APL2" -> url("http://www.apache.org/licenses/LICENSE-2.0.txt")),
scmInfo := Some(
ScmInfo(
url("https://github.com/exoego/scala-js-nodejs"),
"scm:git:[email protected]:exoego/scala-js-nodejs.git"
)
),
homepage := scmInfo.value.map(_.browseUrl),
developers := List(
Developer(
id = "exoego",
name = "TATSUNO Yasuhiro",
email = "[email protected]",
url = url("https://www.exoego.net")
)
),
publishMavenStyle := true,
publishArtifact in Test := false,
publishArtifact in (Compile, packageDoc) := true,
publishArtifact in (Compile, packageSrc) := true,
publishArtifact in packageDoc := true,
pomIncludeRepository := { _ =>
false
},
publishTo := Some(
if (isSnapshot.value)
Opts.resolver.sonatypeSnapshots
else
Opts.resolver.sonatypeStaging
),
publishConfiguration := publishConfiguration.value.withOverwrite(false),
publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(true),
releaseIgnoreUntrackedFiles := true,
releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
runTest,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
releaseStepCommandAndRemaining("+publishSigned"),
setNextVersion,
commitNextVersion,
releaseStepCommand("sonatypeReleaseAll")
)
)

// loads the Scalajs-io root project at sbt startup
onLoad in Global := (Command.process("project root", _: State)) compose (onLoad in Global).value
23 changes: 23 additions & 0 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import sbt._
import sbt.Keys._
import org.portablescala.sbtplatformdeps.PlatformDepsPlugin.autoImport._

object Dependencies {

val scalaReflect = Def.setting("org.scala-lang" % "scala-reflect" % scalaVersion.value)

val core = Def.setting(
Seq(
scalaReflect.value,
"org.scalatest" %%% "scalatest" % "3.0.8" % "test"
)
)

val app = Def.setting(
Seq(
scalaReflect.value,
"org.scalatest" %%% "scalatest" % "3.0.8" % "test",
"com.thoughtworks.enableIf" %% "enableif" % "1.1.7"
)
)
}
105 changes: 105 additions & 0 deletions project/MySettings.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import org.scalajs.sbtplugin.ScalaJSPlugin.AutoImport.{ModuleKind, scalaJSModuleKind}
import sbt._
import sbt.Keys._
import sbtrelease.ReleasePlugin.autoImport._
import sbtrelease.ReleaseStateTransformations._

object MySettings {

lazy val commonSettings = Seq(
autoCompilerPlugins := true,
scalacOptions ++= Seq(
"-deprecation",
"-unchecked",
"-feature",
"-language:implicitConversions",
"-Xlint"
),
scalacOptions in Compile in compile ++= Seq(
"-Xfatal-warnings"
),
scalacOptions in Compile in doc ++= Seq(
"-Xfatal-warnings",
"-no-link-warnings"
),
autoAPIMappings := true
)

lazy val commonScalaJsSettings = Seq(
scalacOptions += "-P:scalajs:sjsDefinedByDefault",
scalaJSModuleKind := ModuleKind.CommonJSModule,
logBuffered in Test := true
)

lazy val commonMacroParadiseSetting = Seq(
Compile / scalacOptions ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => "-Ymacro-annotations" :: Nil
case _ => Nil
}
},
libraryDependencies ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => Nil
case _ => compilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full) :: Nil
}
}
)

lazy val nonPublishingSetting = Seq(
skip in publish := true,
publishArtifact := false,
publish := {},
publishLocal := {}
)

lazy val publishingSettings = Seq(
licenses := Seq("APL2" -> url("http://www.apache.org/licenses/LICENSE-2.0.txt")),
scmInfo := Some(
ScmInfo(
url("https://github.com/exoego/scala-js-nodejs"),
"scm:git:[email protected]:exoego/scala-js-nodejs.git"
)
),
homepage := scmInfo.value.map(_.browseUrl),
developers := List(
Developer(
id = "exoego",
name = "TATSUNO Yasuhiro",
email = "[email protected]",
url = url("https://www.exoego.net")
)
),
publishMavenStyle := true,
publishArtifact in Test := false,
publishArtifact in (Compile, packageDoc) := true,
publishArtifact in (Compile, packageSrc) := true,
publishArtifact in packageDoc := true,
pomIncludeRepository := { _ =>
false
},
publishTo := Some(
if (isSnapshot.value)
Opts.resolver.sonatypeSnapshots
else
Opts.resolver.sonatypeStaging
),
publishConfiguration := publishConfiguration.value.withOverwrite(false),
publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(true),
releaseIgnoreUntrackedFiles := true,
releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
runTest,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
releaseStepCommandAndRemaining("+publishSigned"),
setNextVersion,
commitNextVersion,
releaseStepCommand("sonatypeReleaseAll")
)
)

}