diff --git a/build.sbt b/build.sbt index c4c99e5..e7bd3eb 100644 --- a/build.sbt +++ b/build.sbt @@ -1,5 +1,3 @@ -import interplay.ScalaVersions._ - // Customise sbt-dynver's behaviour to make it work with tags which aren't v-prefixed (ThisBuild / dynverVTagPrefix) := false @@ -11,9 +9,21 @@ Global / onLoad := (Global / onLoad).value.andThen { s => } lazy val `play-doc` = (project in file(".")) - .enablePlugins(PlayLibrary, SbtTwirl) + .enablePlugins(Omnidoc, SbtTwirl) .settings( - crossScalaVersions := Seq(scala212, scala213, scala3), + organization := "com.typesafe.play", + organizationName := "The Play Framework Project", + organizationHomepage := Some(url("https://playframework.com")), + homepage := Some(url(s"https://github.com/playframework/${Omnidoc.repoName}")), + licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.html")), + crossScalaVersions := Seq("2.12.18", "2.13.12", "3.3.1"), + developers += Developer( + "playframework", + "The Play Framework Contributors", + "contact@playframework.com", + url("https://github.com/playframework") + ), + pomIncludeRepository := { _ => false }, scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, _)) => @@ -23,6 +33,7 @@ lazy val `play-doc` = (project in file(".")) "-Xlint:nullary-unit", "-Ywarn-dead-code", "-Xsource:3", + "-Xmigration", ) case _ => Nil } @@ -41,15 +52,22 @@ javacOptions ++= Seq( "11", "-Xlint:deprecation", "-Xlint:unchecked", + "-Xlint:-options", + "-encoding", + "UTF-8", ) +doc / javacOptions := Seq("-source", "11") scalacOptions ++= Seq( "-release", "11", + "-deprecation", + "-feature", + "-unchecked", + "-encoding", + "utf8" ) -(ThisBuild / playBuildRepoName) := "play-doc" - addCommandAlias( "validateCode", List( diff --git a/project/Omnidoc.scala b/project/Omnidoc.scala new file mode 100644 index 0000000..1ee7e79 --- /dev/null +++ b/project/Omnidoc.scala @@ -0,0 +1,55 @@ +import sbt._ +import sbt.Keys._ +import sbt.Package.ManifestAttributes + +/** + * This AutoPlugin adds the `Omnidoc-Source-URL` key on the MANIFEST.MF of artifact-sources.jar so later Omnidoc can use + * that value to link scaladocs to GitHub sources. + */ +object Omnidoc extends AutoPlugin { + + object autoImport { + lazy val omnidocSnapshotBranch = settingKey[String]("Git branch for development versions") + lazy val omnidocPathPrefix = settingKey[String]("Prefix before source directory paths") + lazy val omnidocSourceUrl = settingKey[Option[String]]("Source URL for scaladoc linking") + } + + val repoName = "play-doc" + + val omnidocGithubRepo: Option[String] = Some(s"playframework/${repoName}") + + val omnidocTagPrefix: Option[String] = Some("") + + val SourceUrlKey = "Omnidoc-Source-URL" + + override def requires = sbt.plugins.JvmPlugin + + override def trigger = noTrigger + + import autoImport.* + + override def projectSettings = Seq( + omnidocSourceUrl := omnidocGithubRepo.map { repo => + val development: String = (omnidocSnapshotBranch ?? "main").value + val tagged: String = omnidocTagPrefix.getOrElse("v") + version.value + val tree: String = if (isSnapshot.value) development else tagged + val prefix: String = "/" + (omnidocPathPrefix ?? "").value + val path: String = { + val buildDir: File = (ThisBuild / baseDirectory).value + val projDir: File = baseDirectory.value + val rel: Option[String] = IO.relativize(buildDir, projDir) + rel match { + case None if buildDir == projDir => "" // Same dir (sbt 0.13) + case Some("") => "" // Same dir (sbt 1.0) + case Some(childDir) => prefix + childDir // Child dir + case None => "" // Disjoint dirs (Rich: I'm not sure if this can happen) + } + } + s"https://github.com/${repo}/tree/${tree}${path}" + }, + Compile / packageSrc / packageOptions ++= omnidocSourceUrl.value.toSeq.map { url => + ManifestAttributes(SourceUrlKey -> url) + } + ) + +} diff --git a/project/plugins.sbt b/project/plugins.sbt index e4bd9a6..fa061c3 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,3 @@ -addSbtPlugin("com.typesafe.play" % "interplay" % "3.1.7") addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.6.1") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")