diff --git a/build.sbt b/build.sbt index c4c99e5..e1782a1 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,14 @@ 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("http://www.apache.org/licenses/LICENSE-2.0.html")), + crossScalaVersions := Seq("2.12.18", "2.13.12", "3.3.1"), scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, _)) => @@ -48,8 +51,6 @@ scalacOptions ++= Seq( "11", ) -(ThisBuild / playBuildRepoName) := "play-doc" - addCommandAlias( "validateCode", List( diff --git a/project/Omnidoc.scala b/project/Omnidoc.scala new file mode 100644 index 0000000..afe6ad1 --- /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 2677cc3..d7a61ec 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,3 @@ -addSbtPlugin("com.typesafe.play" % "interplay" % "3.1.6") addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.6.0-RC4") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")