Skip to content

Commit 2adcb42

Browse files
improve updateReadme step and add more tests
1 parent bbe7dc3 commit 2adcb42

File tree

14 files changed

+114
-37
lines changed

14 files changed

+114
-37
lines changed

build.sbt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ releaseProcess := Seq[ReleaseStep](
6666
releaseStepCommandAndRemaining("^ scripted"),
6767
setReleaseVersion,
6868
commitReleaseVersion,
69+
updateReadme,
70+
commitReadme,
6971
tagRelease,
7072
releaseStepCommandAndRemaining("^ publishSigned"),
7173
releaseStepTask(bintrayRelease in `sbt-release`),

src/main/scala/ReleaseExtra.scala

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package sbtrelease
22

3+
import java.nio.charset.StandardCharsets
4+
import java.nio.file.Files
5+
36
import sbt._
47
import sbt.Keys._
58
import sbt.Package.ManifestAttributes
9+
610
import annotation.tailrec
711
import ReleasePlugin.autoImport._
812
import ReleaseKeys._
13+
import sbtrelease.ReleasePlugin.autoImport
914

15+
import scala.io.Source
16+
import scala.util.matching.Regex
17+
import scala.util.matching.Regex.{ Groups, Match }
1018
import sys.process.ProcessLogger
1119

1220
object ReleaseStateTransformations {
@@ -213,16 +221,25 @@ object ReleaseStateTransformations {
213221

214222
lazy val updateReadme: ReleaseStep = ReleaseStep(updateReadmeStep)
215223
private def updateReadmeStep(state: State): State = {
224+
def replacer(newVersion: String)(m: Regex.Match): String = m match {
225+
case Groups(oldVersion)
226+
m.toString().replace(oldVersion, newVersion)
227+
case Match(_)
228+
newVersion
229+
case _
230+
m.toString()
231+
}
216232
val extracted = Project.extract(state)
217-
extracted.get(releaseReadmeFile) match {
233+
extracted.get(autoImport.releaseReadmeFile) match {
218234
case Some(readmeFile)
219235
val releaseVersion = extracted.get(version)
220-
val versionRegex = extracted.get(releaseReadmeVersionRegex)
221-
val updatedReadmeContent = versionRegex.replaceAllIn(
222-
IO.read(readmeFile),
223-
releaseVersion
236+
val versionRegex = extracted.get(autoImport.releaseReadmeVersionRegex)
237+
val readme = Source.fromFile(readmeFile).mkString
238+
Files.write(
239+
readmeFile.toPath,
240+
versionRegex.replaceAllIn(readme, replacer(releaseVersion)(_)).getBytes(StandardCharsets.UTF_8)
224241
)
225-
IO.write(readmeFile, updatedReadmeContent)
242+
vcs(state).add()
226243
case None
227244
}
228245
state

src/main/scala/ReleasePlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ object ReleasePlugin extends AutoPlugin {
244244

245245
releaseReadmeFile := None,
246246

247-
releaseReadmeVersionRegex := """(\d{1,2}\.\d{1,2}\.\d{1,2})""".r,
247+
releaseReadmeVersionRegex := """\%\s+\"(\d{1,2}\.\d{1,2}\.\d{1,2})\"""".r,
248248

249249
releaseProcess := Seq[ReleaseStep](
250250
checkSnapshotDependencies,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target/
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Update README test
2+
3+
```scala
4+
libraryDependencies += "com.example" %% "test" % "0.0.1"
5+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import scala.io.Source
2+
import sbtrelease.ReleaseStateTransformations._
3+
4+
releaseReadmeFile := Some(baseDirectory.value / "README.md")
5+
releaseReadmeVersionRegex := """\d{1,2}\.\d{1,2}\.\d{1,2}""".r
6+
7+
releaseProcess := Seq(
8+
inquireVersions,
9+
runClean,
10+
setReleaseVersion,
11+
updateReadme,
12+
commitReadme
13+
)
14+
15+
TaskKey[Unit]("runTest") := {
16+
val readmeFile = releaseReadmeFile.value.get
17+
val expected =
18+
"""# Update README test
19+
|
20+
|```scala
21+
|libraryDependencies += "com.example" %% "test" % "1.0.0"
22+
|```""".stripMargin
23+
val actual = Source.fromFile(readmeFile).mkString
24+
25+
val delimeter = "=" * 10
26+
27+
assert(
28+
actual == expected,
29+
s"""Unexpected README content after release:
30+
|$delimeter expected $delimeter
31+
|$expected
32+
|$delimeter actual $delimeter
33+
|$actual
34+
|${delimeter * 2}""".stripMargin
35+
)
36+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
val pluginVersion = System.getProperty("plugin.version")
3+
if(pluginVersion == null)
4+
throw new RuntimeException("""|The system property 'plugin.version' is not defined.
5+
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin)
6+
else addSbtPlugin("com.github.gseitz" % "sbt-release" % pluginVersion)
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
$ exec git init .
2+
3+
> update
4+
5+
$ exec git add .
6+
$ exec git commit -m init
7+
8+
> release release-version 1.0.0 next-version 1.0.1-SNAPSHOT
9+
> runTest
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
version in ThisBuild := "1.9.0"
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
target
2-
global/
1+
target/
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# A project
1+
# Update README test
22

3-
Add library in your `build.sbt`
3+
Casual version mentioning 0.0.1
44

55
```scala
6-
libraryDependencies += "com.example" %% "lib" % "1.0.0"
7-
```
6+
libraryDependencies += "com.example" %% "test" % "0.0.1"
7+
```
Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1+
import scala.io.Source
12
import sbtrelease.ReleaseStateTransformations._
23

34
releaseReadmeFile := Some(baseDirectory.value / "README.md")
45

56
releaseProcess := Seq(
6-
checkSnapshotDependencies,
77
inquireVersions,
88
runClean,
9-
runTest,
109
setReleaseVersion,
11-
commitReleaseVersion,
1210
updateReadme,
13-
commitReadme,
14-
tagRelease,
15-
setNextVersion,
16-
commitNextVersion
11+
commitReadme
1712
)
1813

19-
TaskKey[Unit]("checkReadme") := {
14+
TaskKey[Unit]("runTest") := {
2015
val readmeFile = releaseReadmeFile.value.get
21-
val content = IO.read(readmeFile)
16+
val expected =
17+
"""# Update README test
18+
|
19+
|Casual version mentioning 0.0.1
20+
|
21+
|```scala
22+
|libraryDependencies += "com.example" %% "test" % "1.0.0"
23+
|```""".stripMargin
24+
val actual = Source.fromFile(readmeFile).mkString
25+
26+
val delimeter = "=" * 10
2227

2328
assert(
24-
content ==
25-
"""|# A project
26-
|
27-
|Add library in your `build.sbt`
28-
|
29-
|```scala
30-
|libraryDependencies += "com.example" %% "lib" % "2.3.4"
31-
|```
32-
|""".stripMargin,
33-
s"Readme wasn't updated correctly\n\n$content"
29+
actual == expected,
30+
s"""Unexpected README content after release:
31+
|$delimeter expected $delimeter
32+
|$expected
33+
|$delimeter actual $delimeter
34+
|$actual
35+
|${delimeter * 2}""".stripMargin
3436
)
35-
3637
}

src/sbt-test/sbt-release/update-readme/test

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ $ exec git init .
55
$ exec git add .
66
$ exec git commit -m init
77

8-
> release release-version 2.3.4 next-version 2.3.5-SNAPSHOT
9-
10-
> checkReadme
8+
> release release-version 1.0.0 next-version 1.0.1-SNAPSHOT
9+
> runTest
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "1.0.0"
1+
version in ThisBuild := "1.9.0"

0 commit comments

Comments
 (0)