Skip to content

Commit e48a592

Browse files
committed
Support pre-release versions in site plugin
1 parent 49899ca commit e48a592

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

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) 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).headOption.map(_.toString)
255271
}
256272

257273
private def previewTask = Def

0 commit comments

Comments
 (0)