Refactor build to unified slash syntax

This commit is contained in:
Eugene Yokota 2018-09-17 00:30:55 -04:00
parent 881611f1c7
commit b9b4c06ce6
4 changed files with 135 additions and 177 deletions

195
build.sbt
View File

@ -4,23 +4,138 @@
// Release tags should follow: http://semver.org/
import scalariform.formatter.preferences._
enablePlugins(GitVersioning)
git.baseVersion := "1.3.0"
ThisBuild / git.baseVersion := "1.3.0"
ThisBuild / organization := "com.typesafe"
ThisBuild / Compile / scalacOptions := List("-unchecked", "-deprecation", "-feature")
ThisBuild / Test / scalacOptions := List("-unchecked", "-deprecation", "-feature")
ThisBuild / scalaVersion := "2.10.6"
organization in GlobalScope := "com.typesafe"
scalacOptions in GlobalScope in Compile := Seq("-unchecked", "-deprecation", "-feature")
scalacOptions in GlobalScope in Test := Seq("-unchecked", "-deprecation", "-feature")
scalaVersion in ThisBuild := "2.10.4"
val sonatype = new PublishToSonatype {
def projectUrl = "https://github.com/lightbend/config"
def developerId = "havocp"
def developerName = "Havoc Pennington"
def developerUrl = "http://ometer.com/"
def scmUrl = "git://github.com/lightbend/config.git"
ThisBuild / scmInfo := Option(
ScmInfo(url("https://github.com/lightbend/config"), "scm:git@github.com:lightbend/config.git")
)
ThisBuild / developers := List(
Developer(
id = "havocp",
name = "Havoc Pennington",
email = "@havocp",
url = url("http://ometer.com/")
)
)
ThisBuild / description := "configuration library for JVM languages using HOCON files"
ThisBuild / licenses := List("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0"))
ThisBuild / homepage := Option(url("https://github.com/lightbend/config"))
ThisBuild / pomIncludeRepository := { _ => false }
ThisBuild / publishTo := {
val nexus = "https://oss.sonatype.org/"
if ((ThisBuild / isSnapshot).value) Option("Sonatype OSS Snapshots" at nexus + "content/repositories/snapshots")
else Option("Sonatype OSS Staging" at nexus + "service/local/staging/deploy/maven2")
}
ThisBuild / publishMavenStyle := true
lazy val root = (project in file("."))
.enablePlugins(GitVersioning)
.aggregate(
testLib, configLib,
simpleLibScala, simpleAppScala, complexAppScala,
simpleLibJava, simpleAppJava, complexAppJava
)
.settings(commonSettings)
.settings(nocomma {
name := "config-root"
git.baseVersion := (ThisBuild / git.baseVersion).value
doc / aggregate := false
doc := (configLib / Compile / doc).value
packageDoc / aggregate := false
packageDoc := (configLib / Compile / packageDoc).value
checkstyle / aggregate := false
checkstyle := (configLib / Compile / checkstyle).value
useGpg := true
PgpKeys.publishSigned / aggregate := false
PgpKeys.publishSigned := (PgpKeys.publishSigned in configLib).value
PgpKeys.publishLocalSigned / aggregate := false
PgpKeys.publishLocalSigned := (PgpKeys.publishLocalSigned in configLib).value
})
lazy val configLib = Project("config", file("config"))
.enablePlugins(SbtOsgi)
.dependsOn(testLib % "test->test")
.settings(osgiSettings)
.settings(nocomma {
autoScalaLibrary := false
crossPaths := false
libraryDependencies += "net.liftweb" %% "lift-json" % "2.5" % Test
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test
Compile / compile / javacOptions ++= Seq("-source", "1.8", "-target", "1.8",
"-g", "-Xlint:unchecked")
Compile / doc / javacOptions ++= Seq("-group", s"Public API (version ${version.value})", "com.typesafe.config:com.typesafe.config.parser",
"-group", "Internal Implementation - Not ABI Stable", "com.typesafe.config.impl")
javadocSourceBaseUrl := {
for (gitHead <- com.typesafe.sbt.SbtGit.GitKeys.gitHeadCommit.value)
yield s"https://github.com/lightbend/config/blob/$gitHead/config/src/main/java"
}
// because we test some global state such as singleton caches,
// we have to run tests in serial.
Test / parallelExecution := false
test / fork := true
Test / fork := true
run / fork := true
Test/ run / fork := true
//env vars for tests
Test / envVars ++= Map("testList.0" -> "0", "testList.1" -> "1")
OsgiKeys.exportPackage := Seq("com.typesafe.config", "com.typesafe.config.impl")
publish := sys.error("use publishSigned instead of plain publish")
publishLocal := sys.error("use publishLocalSigned instead of plain publishLocal")
Compile / packageBin / packageOptions +=
Package.ManifestAttributes("Automatic-Module-Name" -> "typesafe.config" )
scalariformPreferences := scalariformPreferences.value
.setPreference(IndentSpaces, 4)
.setPreference(FirstArgumentOnNewline, Preserve)
checkstyleConfigLocation := CheckstyleConfigLocation.File((baseDirectory.value / "checkstyle-config.xml").toString)
Compile / checkstyle := {
val log = streams.value.log
(Compile / checkstyle).value
val resultFile = (Compile / checkstyleOutputFile).value
val results = scala.xml.XML.loadFile(resultFile)
val errorFiles = results \\ "checkstyle" \\ "file"
def errorFromXml(node: scala.xml.NodeSeq): (String, String, String) = {
val line: String = (node \ "@line" text)
val msg: String = (node \ "@message" text)
val source: String = (node \ "@source" text)
(line, msg, source)
}
def errorsFromXml(fileNode: scala.xml.NodeSeq): Seq[(String, String, String, String)] = {
val name: String = (fileNode \ "@name" text)
val errors = (fileNode \\ "error") map { e => errorFromXml(e) }
errors map { case (line, error, source) => (name, line, error, source) }
}
val errors = errorFiles flatMap { f => errorsFromXml(f) }
if (errors.nonEmpty) {
for (e <- errors) {
log.error(s"${e._1}:${e._2}: ${e._3} (from ${e._4})")
}
throw new RuntimeException(s"Checkstyle failed with ${errors.size} errors")
}
log.info("No errors from checkstyle")
}
// add checkstyle as a dependency of doc
Compile / doc := ((Compile / doc).dependsOn(Compile / checkstyle)).value
findbugsReportType := Some(FindbugsReport.Html)
findbugsReportPath := Some(crossTarget.value / "findbugs.html")
findbugsEffort := FindbugsEffort.Maximum
findbugsMaxMemory := 2000
})
lazy val commonSettings: Seq[Setting[_]] = Def.settings(
unpublished,
@ -29,38 +144,6 @@ lazy val commonSettings: Seq[Setting[_]] = Def.settings(
.setPreference(FirstArgumentOnNewline, Preserve)
)
lazy val root = (project in file("."))
.settings(
commonSettings,
aggregate in doc := false,
doc := (doc in (configLib, Compile)).value,
aggregate in packageDoc := false,
packageDoc := (packageDoc in (configLib, Compile)).value,
aggregate in checkstyle := false,
checkstyle := (checkstyle in (configLib, Compile)).value
)
.aggregate(
testLib, configLib,
simpleLibScala, simpleAppScala, complexAppScala,
simpleLibJava, simpleAppJava, complexAppJava
)
lazy val configLib = Project("config", file("config"))
.settings(
sonatype.settings,
osgiSettings,
OsgiKeys.exportPackage := Seq("com.typesafe.config", "com.typesafe.config.impl"),
publish := sys.error("use publishSigned instead of plain publish"),
publishLocal := sys.error("use publishLocalSigned instead of plain publishLocal"),
packageOptions in (Compile, packageBin) +=
Package.ManifestAttributes("Automatic-Module-Name" -> "typesafe.config" ),
scalariformPreferences := scalariformPreferences.value
.setPreference(IndentSpaces, 4)
.setPreference(FirstArgumentOnNewline, Preserve)
)
.enablePlugins(SbtOsgi)
.dependsOn(testLib % "test->test")
def proj(id: String, base: File) = Project(id, base) settings commonSettings
lazy val testLib = proj("config-test-lib", file("test-lib"))
@ -73,23 +156,13 @@ lazy val simpleLibJava = proj("config-simple-lib-java", file("examples/java/si
lazy val simpleAppJava = proj("config-simple-app-java", file("examples/java/simple-app")) dependsOn simpleLibJava
lazy val complexAppJava = proj("config-complex-app-java", file("examples/java/complex-app")) dependsOn simpleLibJava
useGpg := true
aggregate in PgpKeys.publishSigned := false
PgpKeys.publishSigned := (PgpKeys.publishSigned in configLib).value
aggregate in PgpKeys.publishLocalSigned := false
PgpKeys.publishLocalSigned := (PgpKeys.publishLocalSigned in configLib).value
val unpublished = Seq(
// no artifacts in this project
publishArtifact := false,
publishArtifact := false,
// make-pom has a more specific publishArtifact setting already
// so needs specific override
publishArtifact in makePom := false,
makePom / publishArtifact := false,
// no docs to publish
publishArtifact in packageDoc := false,
// can't seem to get rid of ivy files except by no-op'ing the entire publish task
publish := {},
publishLocal := {}
packageDoc / publishArtifact := false,
publish / skip := true
)

View File

@ -1,68 +0,0 @@
fork in test := true
fork in Test := true
fork in run := true
fork in run in Test := true
//env vars for tests
envVars in Test ++= Map("testList.0" -> "0", "testList.1" -> "1")
autoScalaLibrary := false
crossPaths := false
libraryDependencies += "net.liftweb" %% "lift-json" % "2.5" % "test"
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test"
checkstyleConfigLocation := CheckstyleConfigLocation.File((baseDirectory.value / "checkstyle-config.xml").toString)
checkstyle in Compile := {
val log = streams.value.log
(checkstyle in Compile).value
val resultFile = (checkstyleOutputFile in Compile).value
val results = scala.xml.XML.loadFile(resultFile)
val errorFiles = results \\ "checkstyle" \\ "file"
def errorFromXml(node: scala.xml.NodeSeq): (String, String, String) = {
val line: String = (node \ "@line" text)
val msg: String = (node \ "@message" text)
val source: String = (node \ "@source" text)
(line, msg, source)
}
def errorsFromXml(fileNode: scala.xml.NodeSeq): Seq[(String, String, String, String)] = {
val name: String = (fileNode \ "@name" text)
val errors = (fileNode \\ "error") map { e => errorFromXml(e) }
errors map { case (line, error, source) => (name, line, error, source) }
}
val errors = errorFiles flatMap { f => errorsFromXml(f) }
if (errors.nonEmpty) {
for (e <- errors) {
log.error(s"${e._1}:${e._2}: ${e._3} (from ${e._4})")
}
throw new RuntimeException(s"Checkstyle failed with ${errors.size} errors")
}
log.info("No errors from checkstyle")
}
// add checkstyle as a dependency of doc
doc in Compile := ((doc in Compile).dependsOn(checkstyle in Compile)).value
findbugsReportType := Some(FindbugsReport.Html)
findbugsReportPath := Some(crossTarget.value / "findbugs.html")
findbugsEffort := FindbugsEffort.Maximum
findbugsMaxMemory := 2000
javacOptions in (Compile, compile) ++= Seq("-source", "1.8", "-target", "1.8",
"-g", "-Xlint:unchecked")
// because we test some global state such as singleton caches,
// we have to run tests in serial.
parallelExecution in Test := false
javacOptions in (Compile, doc) ++= Seq("-group", s"Public API (version ${version.value})", "com.typesafe.config:com.typesafe.config.parser",
"-group", "Internal Implementation - Not ABI Stable", "com.typesafe.config.impl")
javadocSourceBaseUrl := {
for (gitHead <- com.typesafe.sbt.SbtGit.GitKeys.gitHeadCommit.value)
yield s"https://github.com/lightbend/config/blob/$gitHead/config/src/main/java"
}

View File

@ -1,48 +0,0 @@
import sbt._, Keys._
// from https://raw.github.com/paulp/scala-improving/master/project/PublishToSonatype.scala
abstract class PublishToSonatype {
val ossSnapshots = "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"
val ossStaging = "Sonatype OSS Staging" at "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
def projectUrl: String
def developerId: String
def developerName: String
def developerUrl: String
def licenseName = "Apache License, Version 2.0"
def licenseUrl = "https://www.apache.org/licenses/LICENSE-2.0"
def licenseDistribution = "repo"
def scmUrl: String
def scmConnection = "scm:git:" + scmUrl
def generatePomExtra: xml.NodeSeq = {
<url>{ projectUrl }</url>
<licenses>
<license>
<name>{ licenseName }</name>
<url>{ licenseUrl }</url>
<distribution>{ licenseDistribution }</distribution>
</license>
</licenses>
<scm>
<url>{ scmUrl }</url>
<connection>{ scmConnection }</connection>
</scm>
<developers>
<developer>
<id>{ developerId }</id>
<name>{ developerName }</name>
<url>{ developerUrl }</url>
</developer>
</developers>
}
def settings: Seq[Setting[_]] = Seq(
publishMavenStyle := true,
publishTo := Some(if (isSnapshot.value) ossSnapshots else ossStaging),
publishArtifact in Test := false,
pomIncludeRepository := (_ => false),
pomExtra := generatePomExtra
)
}

View File

@ -7,3 +7,4 @@ addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2")
addSbtPlugin("com.etsy" % "sbt-checkstyle-plugin" % "3.1.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
addSbtPlugin("com.eed3si9n" % "sbt-nocomma" % "0.1.0")