diff --git a/README.md b/README.md index eeec044..a025b27 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Properties are provided via `-D` parameters: `-D=`. ### The `release` Property -Value is either `true` or `false`. If this property is not set, `false` is +Value is either `true` or `false`. If this property is not set, `false` is assumed. Releases are opt-in. ## Supported Tasks diff --git a/build.sbt b/build.sbt index 53e5e40..82f9229 100644 --- a/build.sbt +++ b/build.sbt @@ -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 diff --git a/src/main/scala/gs/CalVer.scala b/src/main/scala/gs/CalVer.scala index ec18869..0acded3 100644 --- a/src/main/scala/gs/CalVer.scala +++ b/src/main/scala/gs/CalVer.scala @@ -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,22 +16,24 @@ 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() CalVer( value = pattern.items.map { - case Left(component) => + 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,10 +43,10 @@ object CalVer { } object Defaults { - /** - * Default pattern for release versions. + + /** Default pattern for release versions. */ - val ReleasePattern: Pattern = + val ReleasePattern: Pattern = Pattern .builder(Component.YYYY) .addDelimiter(Delimiter.Dot) @@ -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 = + + 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 } + } + } + } diff --git a/src/main/scala/gs/CalVerKeys.scala b/src/main/scala/gs/CalVerKeys.scala index 57fdfb5..7238dc7 100644 --- a/src/main/scala/gs/CalVerKeys.scala +++ b/src/main/scala/gs/CalVerKeys.scala @@ -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 - * version. This should not be set manually, please use - * `calVerReleasePattern` and `calVerPreReleasePattern`. + /** SBT setting which defines the CalVer pattern used to calculate the final + * version. This should not be set manually, please use + * `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]]( diff --git a/src/main/scala/gs/CalVerPlugin.scala b/src/main/scala/gs/CalVerPlugin.scala index 0c74304..a017de3 100644 --- a/src/main/scala/gs/CalVerPlugin.scala +++ b/src/main/scala/gs/CalVerPlugin.scala @@ -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( - ) - } diff --git a/src/main/scala/gs/Git.scala b/src/main/scala/gs/Git.scala index ad26702..1131521 100644 --- a/src/main/scala/gs/Git.scala +++ b/src/main/scala/gs/Git.scala @@ -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 "" } + } diff --git a/src/main/scala/gs/PluginProperties.scala b/src/main/scala/gs/PluginProperties.scala index 51d6eb7..6f683b3 100644 --- a/src/main/scala/gs/PluginProperties.scala +++ b/src/main/scala/gs/PluginProperties.scala @@ -30,8 +30,8 @@ object PluginProperties { val ReleaseProperty: String = "release" /** The value of `-Drelease=`, 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) + }