sbt/project/Docs.scala

112 lines
3.7 KiB
Scala
Raw Normal View History

2017-08-11 09:57:14 +02:00
import sbt._, Keys._
import StatusPlugin.autoImport._
2017-05-08 15:34:41 +02:00
import com.typesafe.sbt.site.SitePlugin.autoImport._
2017-08-11 09:57:14 +02:00
import com.typesafe.sbt.site.SiteScaladocPlugin
import SiteScaladocPlugin.autoImport._
import com.typesafe.sbt.sbtghpages.GhpagesPlugin
import GhpagesPlugin.autoImport._
2017-05-08 15:46:29 +02:00
import com.typesafe.sbt.SbtGit, SbtGit.{ git, GitKeys }
2017-08-11 09:57:14 +02:00
import sbtunidoc.{ BaseUnidocPlugin, ScalaUnidocPlugin }
import BaseUnidocPlugin.autoImport._
import ScalaUnidocPlugin.autoImport._
2014-05-01 18:50:07 +02:00
2017-08-11 09:57:14 +02:00
object DocsPlugin extends AutoPlugin {
override def requires = GhpagesPlugin && ScalaUnidocPlugin && SiteScaladocPlugin
Upgrade the build to sbt 1.0.0-M5 Some plugins remain commented out, for now. sbt-doge is no longer needed because a variant of it has been folded into sbt 1. For some reason scripted requires src/doc jars of sbt, so switch back to using `publishAll` rather than `publishLocalBinAll`. :( Also, the sys.prop change in scripted is to force log4j2 to not use a thread context classloader, and avoid the following: ERROR StatusLogger Unable to create custom ContextSelector. Falling back to default. java.lang.ClassCastException: Cannot cast org.apache.logging.log4j.core.async.AsyncLoggerContextSelector to org.apache.logging.log4j.core.selector.ContextSelector at java.lang.Class.cast(Class.java:3369) at org.apache.logging.log4j.util.LoaderUtil.newCheckedInstanceOf(LoaderUtil.java:201) at org.apache.logging.log4j.util.LoaderUtil.newCheckedInstanceOfProperty(LoaderUtil.java:226) at org.apache.logging.log4j.core.impl.Log4jContextFactory.createContextSelector(Log4jContextFactory.java:97) at org.apache.logging.log4j.core.impl.Log4jContextFactory.<init>(Log4jContextFactory.java:58) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:94) at org.apache.logging.log4j.spi.ThreadContextMapFactory.createThreadContextMap(ThreadContextMapFactory.java:73) at org.apache.logging.log4j.ThreadContext.init(ThreadContext.java:223) at org.apache.logging.log4j.ThreadContext.<clinit>(ThreadContext.java:202) at org.apache.logging.log4j.core.impl.ContextDataInjectorFactory.createDefaultInjector(ContextDataInjectorFactory.java:83) at org.apache.logging.log4j.core.impl.ContextDataInjectorFactory.createInjector(ContextDataInjectorFactory.java:67) at org.apache.logging.log4j.core.lookup.ContextMapLookup.<init>(ContextMapLookup.java:34) at org.apache.logging.log4j.core.lookup.Interpolator.<init>(Interpolator.java:117) at org.apache.logging.log4j.core.config.AbstractConfiguration.<init>(AbstractConfiguration.java:125) at org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:46) at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:650) at org.apache.logging.log4j.core.layout.PatternLayout.createDefaultLayout(PatternLayout.java:487) at sbt.internal.util.ConsoleAppender.<init>(ConsoleAppender.scala:245) at sbt.internal.util.ConsoleAppender$.apply(ConsoleAppender.scala:196) at sbt.internal.util.ConsoleLogger.<init>(ConsoleAppender.scala:42) at sbt.internal.util.ConsoleLogger$.apply(ConsoleAppender.scala:34) at sbt.test.ScriptedRunner.run(ScriptedTests.scala:221) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at Scripted$.doScripted(Scripted.scala:125) at $0483e89d182e9d240274$.$anonfun$scriptedTask$5(build.sbt:301)
2017-05-03 16:52:36 +02:00
2014-05-01 18:50:07 +02:00
val siteExcludes = Set(".buildinfo", "objects.inv")
def siteInclude(f: File) = !siteExcludes.contains(f.getName)
2017-08-11 09:57:14 +02:00
override def projectSettings: Seq[Setting[_]] = Def settings (
2017-05-08 15:34:41 +02:00
siteSubdirName in SiteScaladoc := "api",
2017-08-11 09:57:14 +02:00
ghPagesSettings,
unidocProjectFilter in (ScalaUnidoc, unidoc) := {
inProjects(projectRefs(baseDirectory.value): _*)
},
doc in Compile := { (unidoc in Compile).value.head }
2017-05-08 15:34:41 +02:00
)
2014-05-01 18:50:07 +02:00
2017-08-11 09:57:14 +02:00
/**
* This is a list manually constructed from
* sbt:sbtRoot> projects
*/
def projectRefs(base: File): Seq[ProjectReference] = {
val parent = base.getParentFile
val lmPath = parent / "librarymanagement"
val zincPath = parent / "zinc"
val ioPath = parent / "io"
Vector(
LocalProject("actionsProj"),
LocalProject("collectionProj"),
LocalProject("commandProj"),
LocalProject("completeProj"),
LocalProject("coreMacrosProj"),
LocalProject("logicProj"),
LocalProject("mainProj"),
LocalProject("mainSettingsProj"),
LocalProject("protocolProj"),
LocalProject("runProj"),
LocalProject("sbtProj"),
LocalProject("scriptedPluginProj"),
LocalProject("scriptedSbtProj"),
LocalProject("stdTaskProj"),
LocalProject("taskProj"),
LocalProject("testAgentProj"),
LocalProject("utilCache"),
LocalProject("utilControl"),
LocalProject("utilInterface"),
LocalProject("utilLogging"),
LocalProject("utilPosition"),
LocalProject("utilRelation"),
LocalProject("utilScripted"),
LocalProject("utilTracking"),
) ++
Vector(
ProjectRef(lmPath, "lmCore"),
ProjectRef(lmPath, "lmIvy"),
) ++
Vector(
// skipping some of the internal subprojects here
ProjectRef(zincPath, "compilerBridge"),
ProjectRef(zincPath, "compilerInterface"),
ProjectRef(zincPath, "zinc"),
ProjectRef(zincPath, "zincApiInfo"),
ProjectRef(zincPath, "zincClassfile"),
ProjectRef(zincPath, "zincClasspath"),
ProjectRef(zincPath, "zincCompile"),
ProjectRef(zincPath, "zincCompileCore"),
ProjectRef(zincPath, "zincCore"),
ProjectRef(zincPath, "zincPersist"),
) ++
Vector(
ProjectRef(ioPath, "io"),
)
}
2017-05-08 15:46:29 +02:00
def ghPagesSettings = Def settings (
2014-05-01 18:50:07 +02:00
git.remoteRepo := "git@github.com:sbt/sbt.github.com.git",
localRepoDirectory,
2017-05-08 15:46:29 +02:00
ghpagesSynchLocal := synchLocalImpl.value,
ghpagesBranch := "master"
2014-05-01 18:50:07 +02:00
)
2017-05-08 15:46:29 +02:00
def localRepoDirectory = ghpagesRepository := {
2017-04-21 09:14:31 +02:00
// distinguish between building to update the site or not so that CI jobs
2014-05-01 18:50:07 +02:00
// that don't commit+publish don't leave uncommitted changes in the working directory
2014-08-07 18:54:00 +02:00
val status = if (isSnapshot.value) "snapshot" else "public"
2014-05-01 18:50:07 +02:00
Path.userHome / ".sbt" / "ghpages" / status / organization.value / name.value
}
2017-03-29 15:43:38 +02:00
def synchLocalImpl = Def task {
2017-05-08 15:46:29 +02:00
val repo = ghpagesUpdatedRepository.value
2017-04-21 09:14:31 +02:00
val versioned = repo / version.value
IO.delete(versioned / "api")
2017-05-08 15:46:29 +02:00
val mappings = ghpagesPrivateMappings.value
2017-04-21 09:14:31 +02:00
val toCopy = for ((file, target) <- mappings if siteInclude(file))
yield (file, versioned / target)
IO.copy(toCopy)
repo
2014-05-01 18:50:07 +02:00
}
}