SBT plugin for updating lines in README and other files as part of a release. Depends on the sbt-release plugin.
In project/plugins.sbt, add the plugin:
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.11")
addSbtPlugin("co.vitaler" % "sbt-update-lines" % "0.1.5") // Latest releaseFirst, define the updateLinesSchema setting, which is a Seq[UpdateLine]. The
definition of an UpdateLine is:
case class UpdateLine(
fileToModify: File,
lineMatcher: String => Boolean,
replacement: (String, String) => String,
updateVcs: Boolean = true
)The lineMatcher receives each line, and should return true for any that
should be updated. Common uses are _.contains or _.matches. The replacement
function receives the version being released and each line
being updated, and should return a string to use as a replacement line (with no
trailing line terminator). An example might look like:
updateLinesSchema := Seq(
UpdateLine(
file("README.md"),
_.contains("// Latest release"),
(v, _) => s"""libraryDependencies += "org.example" % "package" % "$v" // Latest release"""
),
UpdateLine(
file("CHANGELOG.md"),
_.matches("## \\[Unreleased\\]"),
(v, _) => s"## [Unreleased]\n\n## [$v] - ${java.time.LocalDate.now}"
)
)Finally, to actually update the lines, add the updateLines release step to your
sbt-release process (anywhere after the setReleaseVersion step which
defines the release version):
releaseProcess := Seq(
// ...
setReleaseVersion,
updateLines,
commitReleaseVersion,
// ...
)If you leave the updateVcs parameter of the UpdateLine set to true, the
updated lines will be committed along with the changes to version.sbt when you
call commitReleaseVersion.