Skip to content

Commit af23e29

Browse files
authored
Merge pull request #198 from armanbilge/feature/site-prerelease-version
Better versioning in site plugin
2 parents 49899ca + 9227edb commit af23e29

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

kernel/src/main/scala/org/typelevel/sbt/kernel/GitHelper.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ private[sbt] object GitHelper {
2727
* @param fromHead
2828
* if `true`, only tags reachable from HEAD's history. If `false`, all tags in the repo.
2929
*/
30-
def previousReleases(fromHead: Boolean = false): List[V] =
30+
def previousReleases(fromHead: Boolean = false, strict: Boolean = true): List[V] =
3131
Try {
3232
val merged = if (fromHead) " --merged HEAD" else ""
3333
// --no-contains omits tags on HEAD
34-
s"git -c versionsort.suffix=- tag --no-contains HEAD$merged --sort=-v:refname" // reverse
34+
val noContains = if (strict) " --no-contains HEAD" else ""
35+
s"git -c versionsort.suffix=- tag$noContains$merged --sort=-v:refname" // reverse
3536
.!!
3637
.split("\n")
3738
.toList

site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ object TypelevelSitePlugin extends AutoPlugin {
110110
mdocVariables.value ++
111111
Map(
112112
"VERSION" -> currentRelease.value.getOrElse(version.value),
113+
"PRERELEASE_VERSION" -> currentPreRelease.value.getOrElse(version.value),
113114
"SNAPSHOT_VERSION" -> version.value
114115
) ++
115116
tlSiteApiUrl.value.map("API_URL" -> _.toString).toMap
@@ -247,11 +248,26 @@ object TypelevelSitePlugin extends AutoPlugin {
247248
)
248249

249250
private lazy val currentRelease = Def.setting {
250-
GitHelper
251-
.previousReleases(fromHead = true)
252-
.filterNot(_.isPrerelease)
253-
.headOption
254-
.map(_.toString)
251+
// some tricky logic here ...
252+
// if the latest release is a pre-release (e.g., M or RC)
253+
// and there are no stable releases it is bincompatible with,
254+
// then for all effective purposes it is the current release
255+
256+
val release = GitHelper.previousReleases(fromHead = true, strict = false) match {
257+
case head :: tail if head.isPrerelease =>
258+
tail
259+
.filterNot(_.isPrerelease)
260+
.find(head.copy(prerelease = None).mustBeBinCompatWith(_))
261+
.orElse(Some(head))
262+
case releases => releases.headOption
263+
}
264+
265+
release.map(_.toString)
266+
}
267+
268+
// latest tagged release, including pre-releases
269+
private lazy val currentPreRelease = Def.setting {
270+
GitHelper.previousReleases(fromHead = true, strict = false).headOption.map(_.toString)
255271
}
256272

257273
private def previewTask = Def

0 commit comments

Comments
 (0)