diff --git a/build.sbt b/build.sbt index b43a3e1..ff9733f 100644 --- a/build.sbt +++ b/build.sbt @@ -4,6 +4,8 @@ name := "sbt-jooq" publish / skip := true +enablePlugins(ReleaseSettings) + ThisBuild / scalacOptions ++= Seq( "-release", "8", @@ -92,11 +94,3 @@ lazy val docs = project "org.scala-lang.modules" %% "scala-xml" % "always" ), ) - -TaskKey[Unit]("updateReadme") := Def.taskDyn { - val readmeFile = "README.md" - Def.sequential( - (docs / mdoc).toTask(s" --include $readmeFile"), - Def.task(IO.copyFile((docs / mdocOut).value / readmeFile, baseDirectory.value / readmeFile)), - ) -} diff --git a/project/PublishSettings.scala b/project/PublishSettings.scala index f492d61..41d86ce 100644 --- a/project/PublishSettings.scala +++ b/project/PublishSettings.scala @@ -1,12 +1,16 @@ +import com.jsuereth.sbtpgp.PgpKeys._ +import com.jsuereth.sbtpgp.SbtPgp import sbt._ import sbt.Keys._ +import sbtrelease.ReleasePlugin +import sbtrelease.ReleasePlugin.autoImport._ import xerial.sbt.Sonatype import xerial.sbt.Sonatype.GitHubHosting import xerial.sbt.Sonatype.SonatypeKeys._ object PublishSettings extends AutoPlugin { - override def requires: Plugins = Sonatype + override def requires: Plugins = Sonatype && SbtPgp && ReleasePlugin override def trigger: PluginTrigger = allRequirements @@ -24,6 +28,7 @@ object PublishSettings extends AutoPlugin { publishTo := sonatypePublishToBundle.value, sonatypeProjectHosting := Some(GitHubHosting("kxbmap", "sbt-jooq", "Tsukasa Kitachi", "kxbmap@gmail.com")), pomIncludeRepository := { _ => false }, + releasePublishArtifactsAction := publishSigned.value, ) } diff --git a/project/ReleaseSettings.scala b/project/ReleaseSettings.scala new file mode 100644 index 0000000..03c3d86 --- /dev/null +++ b/project/ReleaseSettings.scala @@ -0,0 +1,78 @@ +import com.jsuereth.sbtpgp.SbtPgp +import mdoc.MdocPlugin.autoImport._ +import sbt._ +import sbt.Def.Initialize +import sbt.Keys._ +import sbtrelease.ReleasePlugin +import sbtrelease.ReleasePlugin.autoImport._ +import sbtrelease.ReleaseStateTransformations._ +import sbtrelease.Version.Bump +import xerial.sbt.Sonatype + +object ReleaseSettings extends AutoPlugin { + + override def requires: Plugins = Sonatype && ReleasePlugin && SbtPgp + + object autoImport { + val readmeFile = settingKey[File]("Readme file name") + val updateReadme = taskKey[Unit]("Update readme file") + } + + import autoImport._ + + override def projectSettings: Seq[Setting[_]] = Seq( + readmeFile := baseDirectory.value / "README.md", + updateReadme := updateReadmeTask.value, + releaseVersionBump := Bump.Bugfix, + releaseProcess := Seq( + checkSnapshotDependencies, + inquireVersions, + runClean, + runTest, + releaseStepCommand("scripted"), + setReleaseVersion, + releaseStepTask(updateReadme), + commitReadme, + commitReleaseVersion, + tagRelease, + publishArtifacts, + releaseStepCommand("sonatypeBundleRelease"), + setNextVersion, + commitNextVersion, + releaseStepCommand("reload"), + ), + ) + + private val docs = LocalProject("docs") + + private def updateReadmeTask: Initialize[Task[Unit]] = + Def.taskDyn { + val readme = readmeFile.value + val name = readme.getName + Def.sequential( + (docs / mdoc).toTask(s" --include $name"), + Def.task[Unit] { + val src = (docs / mdocOut).value / name + IO.copy(Seq(src -> readme)) + }, + ) + } + + private val commitReadme = ReleaseStep { st => + val x = Project.extract(st) + val vcs = x.get(releaseVcs).getOrElse( + sys.error("Aborting release. Working directory is not a repository of a recognized VCS.") + ) + val sign = x.get(releaseVcsSign) + val signOff = x.get(releaseVcsSignOff) + val readme = x.get(readmeFile) + val name = readme.getName + vcs.add(readme.getPath) ! st.log + val status = vcs.status.!!.trim + if (status.contains(name)) { + vcs.commit(s"Update $name", sign, signOff) ! st.log + } + st + } + +} diff --git a/project/plugins.sbt b/project/plugins.sbt index 75a1afa..77bcbde 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -5,6 +5,7 @@ scalacOptions ++= Seq( "-Xlint:-unused,_", ) +addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.10") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.23")