From 1a529aa38acde204d91c8e4b9ee270eb049725eb Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Mon, 30 Mar 2020 16:48:15 +0200 Subject: [PATCH] Publish paradox/japi/api (snapshot) docs via sbt (#28828) * Publish paradox/japi/api (snapshot) docs via sbt * Removes the need for custom release commands * Use ++= instead of := --- build.sbt | 1 + project/AkkaBuild.scala | 1 - project/Doc.scala | 23 +++++++++++---- project/Paradox.scala | 7 +++-- project/Publish.scala | 11 +++---- project/Release.scala | 63 ----------------------------------------- project/scripts/release | 17 ++--------- 7 files changed, 33 insertions(+), 90 deletions(-) delete mode 100644 project/Release.scala diff --git a/build.sbt b/build.sbt index 59d2f657ac..4e3d7be495 100644 --- a/build.sbt +++ b/build.sbt @@ -75,6 +75,7 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference]( lazy val root = Project(id = "akka", base = file(".")) .aggregate(aggregatedProjects: _*) + .enablePlugins(DeployRsync) .settings(rootSettings: _*) .settings(unidocRootIgnoreProjects := Seq(remoteTests, benchJmh, protobuf, protobufV3, akkaScalaNightly, docs)) .settings(unmanagedSources in (Compile, headerCreate) := (baseDirectory.value / "project").**("*.scala").get) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index a75474f272..5d127fa192 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -30,7 +30,6 @@ object AkkaBuild { Dependencies.Versions) lazy val rootSettings = Def.settings( - Release.settings, UnidocRoot.akkaSettings, Protobuf.settings, parallelExecution in GlobalScope := System.getProperty("akka.parallelExecution", parallelExecutionByDefault.toString).toBoolean, diff --git a/project/Doc.scala b/project/Doc.scala index 1880fa6b1f..633ff96b03 100644 --- a/project/Doc.scala +++ b/project/Doc.scala @@ -12,6 +12,7 @@ import sbtunidoc.GenJavadocPlugin.autoImport._ import sbt.Keys._ import sbt.File import scala.annotation.tailrec +import DeployRsync.autoImport.deployRsyncArtifacts import sbt.ScopeFilter.ProjectFilter @@ -23,7 +24,7 @@ object Scaladoc extends AutoPlugin { } override def trigger = allRequirements - override def requires = plugins.JvmPlugin + override def requires = plugins.JvmPlugin && DeployRsync val validateDiagrams = settingKey[Boolean]("Validate generated scaladoc diagrams") @@ -132,10 +133,22 @@ object UnidocRoot extends AutoPlugin { .getOrElse(sbtunidoc.ScalaUnidocPlugin) val akkaSettings = UnidocRoot.CliOptions.genjavadocEnabled - .ifTrue(Seq(javacOptions in (JavaUnidoc, unidoc) := { - if (JdkOptions.isJdk8) Seq("-Xdoclint:none") - else Seq("-Xdoclint:none", "--ignore-source-errors", "--no-module-directories") - })) + .ifTrue(Seq( + javacOptions in (JavaUnidoc, unidoc) := { + if (JdkOptions.isJdk8) Seq("-Xdoclint:none") + else Seq("-Xdoclint:none", "--ignore-source-errors", "--no-module-directories") + }, + deployRsyncArtifacts ++= { + val releaseVersion = if (isSnapshot.value) "snapshot" else version.value + (Compile / unidoc).value match { + case Seq(japi, api) => + Seq( + (japi -> s"www/japi/akka/$releaseVersion"), + (api -> s"www/api/akka/$releaseVersion") + ) + } + } + )) .getOrElse(Nil) override lazy val projectSettings = { diff --git a/project/Paradox.scala b/project/Paradox.scala index 790ed3e466..f468a17def 100644 --- a/project/Paradox.scala +++ b/project/Paradox.scala @@ -7,6 +7,7 @@ package akka import com.lightbend.paradox.sbt.ParadoxPlugin import com.lightbend.paradox.sbt.ParadoxPlugin.autoImport._ import com.lightbend.paradox.apidoc.ApidocPlugin +import DeployRsync.autoImport.deployRsyncArtifacts import sbt.Keys._ import sbt._ @@ -76,6 +77,8 @@ object Paradox { name in (Compile, paradox) := "Akka", resolvers += Resolver.jcenterRepo, ApidocPlugin.autoImport.apidocRootPackage := "akka", - DeployRsync.autoImport.deployRsyncArtifact := List( - (Compile / paradox).value -> s"www/docs/akka/${version.value}")) + deployRsyncArtifacts += { + val releaseVersion = if (isSnapshot.value) "snapshot" else version.value + ((Compile / paradox).value -> s"www/docs/akka/$releaseVersion") + }) } diff --git a/project/Publish.scala b/project/Publish.scala index 7e4b8c93bf..00916c5731 100644 --- a/project/Publish.scala +++ b/project/Publish.scala @@ -69,17 +69,18 @@ object DeployRsync extends AutoPlugin { override def requires = plugins.JvmPlugin trait Keys { - val deployRsyncArtifact = taskKey[Seq[(File, String)]]("File or directory and a path to deploy to") - val deployRsync = inputKey[Unit]("Deploy using SCP") + val deployRsyncArtifacts = taskKey[Seq[(File, String)]]("File or directory and a path to deploy to") + val deployRsync = inputKey[Unit]("Deploy using rsync") } object autoImport extends Keys import autoImport._ - override def projectSettings = - Seq(deployRsync := { + override def projectSettings = Seq( + deployRsyncArtifacts := List(), + deployRsync := { val (_, host) = (Space ~ StringBasic).parsed - deployRsyncArtifact.value.foreach { + deployRsyncArtifacts.value.foreach { case (from, to) => s"rsync -rvz $from/ $host:$to" ! } }) diff --git a/project/Release.scala b/project/Release.scala deleted file mode 100644 index 2facd041f0..0000000000 --- a/project/Release.scala +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2016-2020 Lightbend Inc. - */ - -package akka - -import sbt._ -import sbt.Keys._ -import java.io.File -import com.jsuereth.sbtpgp.PgpKeys.publishSigned -import sbtunidoc.BaseUnidocPlugin.autoImport.unidoc -import com.lightbend.paradox.sbt.ParadoxKeys - -object Release extends ParadoxKeys { - val releaseDirectory = SettingKey[File]("release-directory") - - lazy val settings: Seq[Setting[_]] = commandSettings ++ Seq(releaseDirectory := target.value / "release") - - lazy val commandSettings = Seq(commands ++= Seq(buildReleaseCommand, buildDocsCommand)) - - def buildReleaseCommand = Command.command("buildRelease") { state => - val extracted = Project.extract(state) - val release = extracted.get(releaseDirectory) - val releaseVersion = extracted.get(version) - val projectRef = extracted.get(thisProjectRef) - val repo = extracted.get(Publish.defaultPublishTo) - val state1 = extracted.runAggregated(publishSigned in projectRef, state) - - IO.delete(release) - IO.createDirectory(release) - IO.copyDirectory(repo, release / "releases") - state1 - } - - def buildDocsCommand = Command.command("buildDocs") { state => - if (!sys.props.contains("akka.genjavadoc.enabled")) - throw new RuntimeException( - "Make sure you start sbt with \"-Dakka.genjavadoc.enabled=true\" otherwise no japi will be generated") - val extracted = Project.extract(state) - // we want to build the api-docs and docs with the current "default" version of scala - val scalaV = extracted.get(scalaVersion) - val expectedScalaV = extracted.get(crossScalaVersions).head - if (scalaV != expectedScalaV) - throw new RuntimeException(s"The docs should be built with Scala $expectedScalaV (was $scalaV)") - val release = extracted.get(releaseDirectory) - val releaseVersion = extracted.get(version) - val projectRef = extracted.get(thisProjectRef) - - val (state2, Seq(japi, api)) = extracted.runTask(unidoc in Compile, state) - val (state3, docs) = extracted.runTask(paradox in ProjectRef(projectRef.build, "akka-docs") in Compile, state2) - - IO.delete(release / "api") - IO.delete(release / "japi") - IO.delete(release / "docsapi") - IO.createDirectory(release) - IO.copyDirectory(api, release / "api" / "akka" / releaseVersion) - IO.copyDirectory(japi, release / "japi" / "akka" / releaseVersion) - IO.copyDirectory(docs, release / "docs" / "akka" / releaseVersion) - - state3 - } - -} diff --git a/project/scripts/release b/project/scripts/release index a5babb8363..8d5038e854 100755 --- a/project/scripts/release +++ b/project/scripts/release @@ -89,7 +89,6 @@ declare -r default_server="akkarepo@gustav.akka.io" declare -r default_path="www" # settings -declare -r release_dir="target/release" declare release_server=${default_server} declare release_path=${default_path} @@ -279,14 +278,9 @@ else fi # Release artifacts -try sbt $RELEASE_OPT +buildRelease +try sbt $RELEASE_OPT +publishSigned -echolog "Successfully created released artifacts" - -# Build the docs -try sbt $RELEASE_OPT buildDocs - -echolog "Successfully created docs" +echolog "Successfully released artifacts" try sbt $RELEASE_OPT whitesourceCheckPolicies @@ -325,19 +319,14 @@ else important git push origin --tags fi -# push the docs to the server -echolog "Pushing ${release_dir} docs to ${publish_path} ..." +echolog "Building docs and pushing to the server..." if [ $dry_run ]; then echodry "Not actually pushing to server. Commands:" echodry " sbt $RELEASE_OPT deployRsync" - echodry " rsync -rlpvz --chmod=Dg+ws,Fg+w --exclude ${release_dir}/downloads --exclude ${release_dir}/docs ${release_dir}/ ${publish_path}/" else important ssh ${release_server} "cd ${release_path}/docs/akka; git add .; git commit -m 'before publishing version $version'; true" # using Scala 2.13 here to avoid the infamous problem with missing AskSupport in classpath important sbt -Dakka.build.scalaVersion=2.13.0 $RELEASE_OPT "deployRsync ${release_server}" - important rsync -rlpvz --chmod=Dg+ws,Fg+w --exclude downloads --exclude docs ${release_dir}/ ${publish_path}/ - #important ssh ${release_server} cp -v ${release_path}/docs/akka/${version}/_static/warnOldDocs.js ${release_path}/docs/akka - #important ssh ${release_server} ln -snvf ../../warnOldDocs.js ${release_path}/docs/akka/${version}/_static/warnOldDocs.js important ssh ${release_server} "cd ${release_path}/docs/akka; git add .; git commit -m 'publish version $version'" fi