Final tweaks for round 1 use.

This commit is contained in:
Pat Garrity 2024-03-08 22:07:17 -06:00
parent 417ffa6375
commit c3f8de2caa
Signed by: pfm
GPG key ID: 5CA5D21BAB7F3A76
7 changed files with 80 additions and 72 deletions

View file

@ -28,7 +28,7 @@ lazy val IsRelease: Boolean =
lazy val Modifier: String =
if (IsRelease) "" else "-SNAPSHOT"
val DefaultVersion: String = "0.1.2-SNAPSHOT"
val DefaultVersion: String = "0.1.3-SNAPSHOT"
lazy val SelectedVersion: String =
InputVersion

View file

@ -3,11 +3,12 @@ package gs
import java.time.LocalDate
import scala.collection.mutable.ListBuffer
/**
* Representation of a rendered Calendar Version.
/** Representation of a rendered Calendar Version.
*
* @param value The version string.
* @param pattern The pattern which rendered the version string.
* @param value
* The version string.
* @param pattern
* The pattern which rendered the version string.
*/
case class CalVer(
value: String,
@ -15,11 +16,13 @@ case class CalVer(
)
object CalVer {
/**
* Render the given pattern to a Calendar Version.
/** Render the given pattern to a Calendar Version.
*
* @param pattern The pattern to render.
* @return The rendered CalVer value.
* @param pattern
* The pattern to render.
* @return
* The rendered CalVer value.
*/
def render(pattern: Pattern): CalVer = {
val today = LocalDate.now()
@ -27,10 +30,10 @@ object CalVer {
value = pattern.items.map {
case Left(component) =>
component match {
case Component.YYYY => today.getYear().toString()
case Component.MM => today.getMonthValue().toString()
case Component.DD => today.getDayOfMonth().toString()
case Component.Label(label) => label
case Component.YYYY => today.getYear().toString()
case Component.MM => today.getMonthValue().toString()
case Component.DD => today.getDayOfMonth().toString()
case Component.Label(label) => label
case Component.GitSha(length) => Git.getSha(length)
}
case Right(delimiter) => Delimiter.render(delimiter)
@ -40,8 +43,8 @@ object CalVer {
}
object Defaults {
/**
* Default pattern for release versions.
/** Default pattern for release versions.
*/
val ReleasePattern: Pattern =
Pattern
@ -54,8 +57,7 @@ object CalVer {
.addComponent(Component.GitSha(7))
.build()
/**
* Default pattern for pre-release versions.
/** Default pattern for pre-release versions.
*/
val PreReleasePattern: Pattern =
Pattern
@ -65,72 +67,75 @@ object CalVer {
.addDelimiter(Delimiter.Dot)
.addComponent(Component.DD)
.addDelimiter(Delimiter.Hyphen)
.addComponent(Component.GitSha(7))
.addDelimiter(Delimiter.Hyphen)
.addComponent(Component.Label("SNAPSHOT"))
.build()
}
sealed trait Component
object Component {
/**
* CalVer Component: Year.
/** CalVer Component: Year.
*/
case object YYYY extends Component
/**
* CalVer Component: Month (1-12), without a leading zero.
/** CalVer Component: Month (1-12), without a leading zero.
*/
case object MM extends Component
/**
* CalVer Component: Day of Month, without a leading zero.
/** CalVer Component: Day of Month, without a leading zero.
*/
case object DD extends Component
/**
* CalVer Component: Label.
/** CalVer Component: Label.
*
* This component contains an arbitrary string value.
*
* @param value The value of the label.
* @param value
* The value of the label.
*/
case class Label(value: String) extends Component
/**
* CalVer Component. Git SHA.
/** CalVer Component. Git SHA.
*
* This component defines the length (first N characters) of the Git SHA to
* take from the current branch of the current repository. An empty string
* is used if lookup fails or no commits exist.
*
* @param length The number of characters of the Git SHA to use.
* @param length
* The number of characters of the Git SHA to use.
*/
case class GitSha(length: Int) extends Component
def describe(component: Component): String = component match {
case YYYY => "YYYY"
case MM => "MM"
case DD => "DD"
case Label(value) => value
case YYYY => "YYYY"
case MM => "MM"
case DD => "DD"
case Label(value) => value
case GitSha(length) => s"SHA($length)"
}
}
sealed abstract class Delimiter(val value: String)
object Delimiter {
case object Dot extends Delimiter(".")
case object Hyphen extends Delimiter("-")
case object Plus extends Delimiter("+")
case object Dot extends Delimiter(".")
case object Hyphen extends Delimiter("-")
case object Plus extends Delimiter("+")
case object Underscore extends Delimiter("_")
def render(delimiter: Delimiter): String = delimiter.value
}
final class Pattern private (val items: List[Pattern.Item]) {
lazy val str: String =
items.map {
case Left(component) => Component.describe(component)
case Left(component) => Component.describe(component)
case Right(delimiter) => Delimiter.render(delimiter)
}.mkString
@ -159,11 +164,15 @@ object CalVer {
}
object Builder {
def apply(component: Component): Builder = {
val b = new Builder()
b.addComponent(component)
b
}
}
}
}

View file

@ -6,31 +6,30 @@ import sbt._
*/
object CalVerKeys {
/** SBT Setting for the calculated CalVer.
/** SBT Setting for the calculated CalVer. This can be used as "version".
*/
lazy val calVer = settingKey[String](
"Calculated CalVer."
)
/**
* SBT setting which defines the CalVer pattern used to calculate the final
/** SBT setting which defines the CalVer pattern used to calculate the final
* version. This should not be set manually, please use
* `calVerReleasePattern` and `calVerPreReleasePattern`.
* `calVerReleasePattern` and `calVerPreReleasePattern`. This pattern is
* selected from those values depending on whether this is a release build or
* not.
*/
lazy val calVerPattern = settingKey[CalVer.Pattern](
"Selected CalVer pattern."
)
/**
* User-defined SBT setting which defines the CalVer pattern to use for a
/** User-defined SBT setting which defines the CalVer pattern to use for a
* release build.
*/
lazy val calVerReleasePattern = settingKey[Option[CalVer.Pattern]](
"Pattern to use for calculating CalVer for release builds."
)
/**
* User-defined SBT setting which defines the CalVer pattern to use for a
/** User-defined SBT setting which defines the CalVer pattern to use for a
* pre-release build.
*/
lazy val calVerPreReleasePattern = settingKey[Option[CalVer.Pattern]](

View file

@ -9,23 +9,24 @@ object CalVerPlugin extends AutoPlugin {
import autoImport._
// Perform all version calculations and expose as a variable.
lazy val calVerDefaults: Seq[Setting[_]] = {
lazy val calVerDefaults: Seq[Setting[_]] =
Seq(
calVerReleasePattern := Some(CalVer.Defaults.ReleasePattern),
calVerPreReleasePattern := Some(CalVer.Defaults.PreReleasePattern),
calVerReleasePattern := Some(CalVer.Defaults.ReleasePattern),
calVerPreReleasePattern := Some(CalVer.Defaults.PreReleasePattern)
)
}
override lazy val projectSettings: Seq[Setting[_]] = {
val isRelease = PluginProperties.isRelease()
Seq(
calVerPattern := { if (isRelease) {
calVerReleasePattern.value.getOrElse(CalVer.Defaults.ReleasePattern)
} else {
calVerPreReleasePattern.value.getOrElse(CalVer.Defaults.PreReleasePattern)
}},
calVerPattern := {
if (isRelease)
calVerReleasePattern.value.getOrElse(CalVer.Defaults.ReleasePattern)
else
calVerPreReleasePattern.value.getOrElse(
CalVer.Defaults.PreReleasePattern
)
},
calVer := CalVer.render(calVerPattern.value).value,
calVerInfo := {
val log = Keys.streams.value.log
@ -37,9 +38,4 @@ object CalVerPlugin extends AutoPlugin {
// Automatically exposed globally.
override lazy val globalSettings: Seq[Setting[_]] = calVerDefaults
// Add the custom task.
override lazy val buildSettings: Seq[Setting[_]] = Seq(
)
}

View file

@ -1,12 +1,14 @@
package gs
object Git {
/**
* Get the latest SHA. If there are no commits on this branch, the empty
/** Get the latest SHA. If there are no commits on this branch, the empty
* string will be returned.
*
* @param length The number of characters to take from the SHA.
* @return The latest SHA.
* @param length
* The number of characters to take from the SHA.
* @return
* The latest SHA.
*/
def getSha(length: Int): String = {
val result = os
@ -26,4 +28,5 @@ object Git {
else
""
}
}

View file

@ -30,8 +30,8 @@ object PluginProperties {
val ReleaseProperty: String = "release"
/** The value of `-Drelease=<true|false>`, parsed and validated.
*
* If no value is specified, `false` is assumed.
*
* If no value is specified, `false` is assumed.
*
* @return
* The `release` setting passed as input to SBT.
@ -41,4 +41,5 @@ object PluginProperties {
ReleaseProperty,
raw => Try(raw.toBoolean).getOrElse(false)
).getOrElse(false)
}