@@ -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