project/Common.scala (80 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* license agreements; and to You under the Apache License, version 2.0:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* This file is part of the Apache Pekko project, which was derived from Akka.
*/
import com.lightbend.paradox.projectinfo.ParadoxProjectInfoPluginKeys._
import de.heikoseeberger.sbtheader.HeaderPlugin
import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport._
import sbt.Keys._
import sbt._
import org.mdedetrich.apache.sonatype.ApacheSonatypePlugin
import sbtdynver.DynVerPlugin
import sbtdynver.DynVerPlugin.autoImport.dynverSonatypeSnapshots
object Common extends AutoPlugin {
override def trigger = allRequirements
override def requires = plugins.JvmPlugin && HeaderPlugin && ApacheSonatypePlugin && DynVerPlugin
val currentYear = "2023"
val isScala3 = Def.setting(scalaBinaryVersion.value == "3")
override lazy val projectSettings: Seq[sbt.Def.Setting[_]] =
Seq(
startYear := Some(2022),
homepage := Some(url("https://pekko.apache.org/")),
scmInfo := Some(
ScmInfo(url("https://github.com/apache/incubator-pekko-management"),
"git@github.com:apache/incubator-pekko-management.git")),
developers += Developer(
"contributors",
"Contributors",
"dev@pekko.apache.org",
url("https://github.com/apache/incubator-pekko-management/graphs/contributors")),
description := "Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.",
crossScalaVersions := Dependencies.crossScalaVersions,
projectInfoVersion := (if (isSnapshot.value) "snapshot" else version.value),
crossVersion := CrossVersion.binary,
scalacOptions ++= {
val scalacOptionsBase = Seq(
"-encoding", "UTF-8",
"-feature",
"-unchecked",
"-deprecation",
"-release:8")
if (scalaVersion.value == Dependencies.scala213Version)
scalacOptionsBase ++: Seq(
"-Werror",
"-Wdead-code")
else if (scalaVersion.value == Dependencies.scala3Version)
scalacOptionsBase ++: Seq(
"-Werror")
else
scalacOptionsBase
},
javacOptions ++= Seq(
"-Xlint:unchecked"),
// Necessary otherwise javadoc fails with Unexpected javac output: javadoc: error - invalid flag: -Xlint:unchecked.
Compile / doc / javacOptions -= "-Xlint:unchecked",
javacOptions ++= (
if (isJdk8) Seq.empty
else Seq("--release", "8")
),
Compile / doc / scalacOptions := scalacOptions.value ++ Seq(
"-doc-title",
"Apache Pekko Management",
"-doc-version",
version.value) ++
// for some reason Scaladoc creates this
(if (!isScala3.value)
Seq(
"-skip-packages",
"org.apache.pekko.pattern")
else
Seq("-skip-packages:org.apache.pekko.pattern")),
Compile / doc / scalacOptions ++= Seq(
"-doc-source-url", {
val branch = if (isSnapshot.value) "master" else s"v${version.value}"
s"https://github.com/apache/incubator-pekko-management/tree/${branch}€{FILE_PATH_EXT}#L€{FILE_LINE}"
},
"-doc-canonical-base-url",
"https://pekko.apache.org/api/pekko-management/current/"),
autoAPIMappings := true,
// show full stack traces and test case durations
Test / testOptions += Tests.Argument("-oDF"),
// -v Log "test run started" / "test started" / "test run finished" events on log level "info" instead of "debug".
// -a Show stack traces and exception class name for AssertionErrors.
testOptions += Tests.Argument(TestFrameworks.JUnit, "-v", "-a"),
scalaVersion := Dependencies.scala213Version)
override lazy val buildSettings = Seq(
dynverSonatypeSnapshots := true)
private def isJdk8 =
VersionNumber(sys.props("java.specification.version")).matchesSemVer(SemanticSelector(s"=1.8"))
}