Final tweaks for round 1 use.
This commit is contained in:
		
							parent
							
								
									417ffa6375
								
							
						
					
					
						commit
						c3f8de2caa
					
				
					 7 changed files with 80 additions and 72 deletions
				
			
		|  | @ -79,7 +79,7 @@ Properties are provided via `-D` parameters: `-D<name>=<value>`. | ||||||
| 
 | 
 | ||||||
| ### The `release` Property | ### 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. | assumed. Releases are opt-in. | ||||||
| 
 | 
 | ||||||
| ## Supported Tasks | ## Supported Tasks | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ lazy val IsRelease: Boolean = | ||||||
| lazy val Modifier: String = | lazy val Modifier: String = | ||||||
|   if (IsRelease) "" else "-SNAPSHOT" |   if (IsRelease) "" else "-SNAPSHOT" | ||||||
| 
 | 
 | ||||||
| val DefaultVersion: String = "0.1.2-SNAPSHOT" | val DefaultVersion: String = "0.1.3-SNAPSHOT" | ||||||
| 
 | 
 | ||||||
| lazy val SelectedVersion: String = | lazy val SelectedVersion: String = | ||||||
|   InputVersion |   InputVersion | ||||||
|  |  | ||||||
|  | @ -3,11 +3,12 @@ package gs | ||||||
| import java.time.LocalDate | import java.time.LocalDate | ||||||
| import scala.collection.mutable.ListBuffer | import scala.collection.mutable.ListBuffer | ||||||
| 
 | 
 | ||||||
| /** | /** Representation of a rendered Calendar Version. | ||||||
|   * Representation of a rendered Calendar Version. |  | ||||||
|   * |   * | ||||||
|   * @param value The version string. |   * @param value | ||||||
|   * @param pattern The pattern which rendered the version string. |   *   The version string. | ||||||
|  |   * @param pattern | ||||||
|  |   *   The pattern which rendered the version string. | ||||||
|   */ |   */ | ||||||
| case class CalVer( | case class CalVer( | ||||||
|   value: String, |   value: String, | ||||||
|  | @ -15,22 +16,24 @@ case class CalVer( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| object 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. |     * @param pattern | ||||||
|     * @return The rendered CalVer value. |     *   The pattern to render. | ||||||
|  |     * @return | ||||||
|  |     *   The rendered CalVer value. | ||||||
|     */ |     */ | ||||||
|   def render(pattern: Pattern): CalVer = { |   def render(pattern: Pattern): CalVer = { | ||||||
|     val today = LocalDate.now() |     val today = LocalDate.now() | ||||||
|     CalVer( |     CalVer( | ||||||
|       value = pattern.items.map { |       value = pattern.items.map { | ||||||
|         case Left(component) =>  |         case Left(component) => | ||||||
|           component match { |           component match { | ||||||
|             case Component.YYYY => today.getYear().toString() |             case Component.YYYY           => today.getYear().toString() | ||||||
|             case Component.MM => today.getMonthValue().toString() |             case Component.MM             => today.getMonthValue().toString() | ||||||
|             case Component.DD => today.getDayOfMonth().toString() |             case Component.DD             => today.getDayOfMonth().toString() | ||||||
|             case Component.Label(label) => label |             case Component.Label(label)   => label | ||||||
|             case Component.GitSha(length) => Git.getSha(length) |             case Component.GitSha(length) => Git.getSha(length) | ||||||
|           } |           } | ||||||
|         case Right(delimiter) => Delimiter.render(delimiter) |         case Right(delimiter) => Delimiter.render(delimiter) | ||||||
|  | @ -40,10 +43,10 @@ object CalVer { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   object Defaults { |   object Defaults { | ||||||
|     /** | 
 | ||||||
|       * Default pattern for release versions. |     /** Default pattern for release versions. | ||||||
|       */ |       */ | ||||||
|     val ReleasePattern: Pattern =  |     val ReleasePattern: Pattern = | ||||||
|       Pattern |       Pattern | ||||||
|         .builder(Component.YYYY) |         .builder(Component.YYYY) | ||||||
|         .addDelimiter(Delimiter.Dot) |         .addDelimiter(Delimiter.Dot) | ||||||
|  | @ -54,8 +57,7 @@ object CalVer { | ||||||
|         .addComponent(Component.GitSha(7)) |         .addComponent(Component.GitSha(7)) | ||||||
|         .build() |         .build() | ||||||
| 
 | 
 | ||||||
|     /** |     /** Default pattern for pre-release versions. | ||||||
|       * Default pattern for pre-release versions. |  | ||||||
|       */ |       */ | ||||||
|     val PreReleasePattern: Pattern = |     val PreReleasePattern: Pattern = | ||||||
|       Pattern |       Pattern | ||||||
|  | @ -65,72 +67,75 @@ object CalVer { | ||||||
|         .addDelimiter(Delimiter.Dot) |         .addDelimiter(Delimiter.Dot) | ||||||
|         .addComponent(Component.DD) |         .addComponent(Component.DD) | ||||||
|         .addDelimiter(Delimiter.Hyphen) |         .addDelimiter(Delimiter.Hyphen) | ||||||
|  |         .addComponent(Component.GitSha(7)) | ||||||
|  |         .addDelimiter(Delimiter.Hyphen) | ||||||
|         .addComponent(Component.Label("SNAPSHOT")) |         .addComponent(Component.Label("SNAPSHOT")) | ||||||
|         .build() |         .build() | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   sealed trait Component |   sealed trait Component | ||||||
| 
 | 
 | ||||||
|   object Component { |   object Component { | ||||||
|     /** | 
 | ||||||
|       * CalVer Component: Year. |     /** CalVer Component: Year. | ||||||
|       */ |       */ | ||||||
|     case object YYYY extends Component |     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 |     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 |     case object DD extends Component | ||||||
| 
 | 
 | ||||||
|     /** |     /** CalVer Component: Label. | ||||||
|       * CalVer Component: Label. |  | ||||||
|       * |       * | ||||||
|       * This component contains an arbitrary string value. |       * 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 |     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 |       * 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 |       * take from the current branch of the current repository. An empty string | ||||||
|       * is used if lookup fails or no commits exist. |       * 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 |     case class GitSha(length: Int) extends Component | ||||||
| 
 | 
 | ||||||
|     def describe(component: Component): String = component match { |     def describe(component: Component): String = component match { | ||||||
|       case YYYY => "YYYY" |       case YYYY           => "YYYY" | ||||||
|       case MM => "MM" |       case MM             => "MM" | ||||||
|       case DD => "DD" |       case DD             => "DD" | ||||||
|       case Label(value) => value |       case Label(value)   => value | ||||||
|       case GitSha(length) => s"SHA($length)" |       case GitSha(length) => s"SHA($length)" | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   sealed abstract class Delimiter(val value: String) |   sealed abstract class Delimiter(val value: String) | ||||||
| 
 | 
 | ||||||
|   object Delimiter { |   object Delimiter { | ||||||
|     case object Dot extends Delimiter(".") |     case object Dot        extends Delimiter(".") | ||||||
|     case object Hyphen extends Delimiter("-") |     case object Hyphen     extends Delimiter("-") | ||||||
|     case object Plus extends Delimiter("+") |     case object Plus       extends Delimiter("+") | ||||||
|     case object Underscore extends Delimiter("_") |     case object Underscore extends Delimiter("_") | ||||||
| 
 | 
 | ||||||
|     def render(delimiter: Delimiter): String = delimiter.value |     def render(delimiter: Delimiter): String = delimiter.value | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   final class Pattern private (val items: List[Pattern.Item]) { |   final class Pattern private (val items: List[Pattern.Item]) { | ||||||
|     lazy val str: String =  | 
 | ||||||
|  |     lazy val str: String = | ||||||
|       items.map { |       items.map { | ||||||
|         case Left(component) => Component.describe(component) |         case Left(component)  => Component.describe(component) | ||||||
|         case Right(delimiter) => Delimiter.render(delimiter) |         case Right(delimiter) => Delimiter.render(delimiter) | ||||||
|       }.mkString |       }.mkString | ||||||
| 
 | 
 | ||||||
|  | @ -159,11 +164,15 @@ object CalVer { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     object Builder { |     object Builder { | ||||||
|  | 
 | ||||||
|       def apply(component: Component): Builder = { |       def apply(component: Component): Builder = { | ||||||
|         val b = new Builder() |         val b = new Builder() | ||||||
|         b.addComponent(component) |         b.addComponent(component) | ||||||
|         b |         b | ||||||
|       } |       } | ||||||
|  | 
 | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,31 +6,30 @@ import sbt._ | ||||||
|   */ |   */ | ||||||
| object CalVerKeys { | 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]( |   lazy val calVer = settingKey[String]( | ||||||
|     "Calculated CalVer." |     "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 | ||||||
|     * version. This should not be set manually, please use  |     * `calVerReleasePattern` and `calVerPreReleasePattern`. This pattern is | ||||||
|     * `calVerReleasePattern` and `calVerPreReleasePattern`. |     * selected from those values depending on whether this is a release build or | ||||||
|  |     * not. | ||||||
|     */ |     */ | ||||||
|   lazy val calVerPattern = settingKey[CalVer.Pattern]( |   lazy val calVerPattern = settingKey[CalVer.Pattern]( | ||||||
|     "Selected 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. |     * release build. | ||||||
|     */ |     */ | ||||||
|   lazy val calVerReleasePattern = settingKey[Option[CalVer.Pattern]]( |   lazy val calVerReleasePattern = settingKey[Option[CalVer.Pattern]]( | ||||||
|     "Pattern to use for calculating CalVer for release builds." |     "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. |     * pre-release build. | ||||||
|     */ |     */ | ||||||
|   lazy val calVerPreReleasePattern = settingKey[Option[CalVer.Pattern]]( |   lazy val calVerPreReleasePattern = settingKey[Option[CalVer.Pattern]]( | ||||||
|  |  | ||||||
|  | @ -9,23 +9,24 @@ object CalVerPlugin extends AutoPlugin { | ||||||
| 
 | 
 | ||||||
|   import autoImport._ |   import autoImport._ | ||||||
| 
 | 
 | ||||||
|   // Perform all version calculations and expose as a variable. |   lazy val calVerDefaults: Seq[Setting[_]] = | ||||||
|   lazy val calVerDefaults: Seq[Setting[_]] = { |  | ||||||
|     Seq( |     Seq( | ||||||
|       calVerReleasePattern := Some(CalVer.Defaults.ReleasePattern),  |       calVerReleasePattern    := Some(CalVer.Defaults.ReleasePattern), | ||||||
|       calVerPreReleasePattern := Some(CalVer.Defaults.PreReleasePattern), |       calVerPreReleasePattern := Some(CalVer.Defaults.PreReleasePattern) | ||||||
|     ) |     ) | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   override lazy val projectSettings: Seq[Setting[_]] = { |   override lazy val projectSettings: Seq[Setting[_]] = { | ||||||
|     val isRelease = PluginProperties.isRelease() |     val isRelease = PluginProperties.isRelease() | ||||||
|        | 
 | ||||||
|     Seq( |     Seq( | ||||||
|       calVerPattern := { if (isRelease) { |       calVerPattern := { | ||||||
|         calVerReleasePattern.value.getOrElse(CalVer.Defaults.ReleasePattern) |         if (isRelease) | ||||||
|       } else { |           calVerReleasePattern.value.getOrElse(CalVer.Defaults.ReleasePattern) | ||||||
|         calVerPreReleasePattern.value.getOrElse(CalVer.Defaults.PreReleasePattern) |         else | ||||||
|       }}, |           calVerPreReleasePattern.value.getOrElse( | ||||||
|  |             CalVer.Defaults.PreReleasePattern | ||||||
|  |           ) | ||||||
|  |       }, | ||||||
|       calVer := CalVer.render(calVerPattern.value).value, |       calVer := CalVer.render(calVerPattern.value).value, | ||||||
|       calVerInfo := { |       calVerInfo := { | ||||||
|         val log = Keys.streams.value.log |         val log = Keys.streams.value.log | ||||||
|  | @ -37,9 +38,4 @@ object CalVerPlugin extends AutoPlugin { | ||||||
| 
 | 
 | ||||||
|   // Automatically exposed globally. |   // Automatically exposed globally. | ||||||
|   override lazy val globalSettings: Seq[Setting[_]] = calVerDefaults |   override lazy val globalSettings: Seq[Setting[_]] = calVerDefaults | ||||||
| 
 |  | ||||||
|   // Add the custom task. |  | ||||||
|   override lazy val buildSettings: Seq[Setting[_]] = Seq( |  | ||||||
|   ) |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,12 +1,14 @@ | ||||||
| package gs | package gs | ||||||
| 
 | 
 | ||||||
| object Git { | 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. |     * string will be returned. | ||||||
|     * |     * | ||||||
|     * @param length The number of characters to take from the SHA. |     * @param length | ||||||
|     * @return The latest SHA. |     *   The number of characters to take from the SHA. | ||||||
|  |     * @return | ||||||
|  |     *   The latest SHA. | ||||||
|     */ |     */ | ||||||
|   def getSha(length: Int): String = { |   def getSha(length: Int): String = { | ||||||
|     val result = os |     val result = os | ||||||
|  | @ -26,4 +28,5 @@ object Git { | ||||||
|     else |     else | ||||||
|       "" |       "" | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -30,8 +30,8 @@ object PluginProperties { | ||||||
|     val ReleaseProperty: String = "release" |     val ReleaseProperty: String = "release" | ||||||
| 
 | 
 | ||||||
|     /** The value of `-Drelease=<true|false>`, parsed and validated. |     /** 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 |       * @return | ||||||
|       *   The `release` setting passed as input to SBT. |       *   The `release` setting passed as input to SBT. | ||||||
|  | @ -41,4 +41,5 @@ object PluginProperties { | ||||||
|         ReleaseProperty, |         ReleaseProperty, | ||||||
|         raw => Try(raw.toBoolean).getOrElse(false) |         raw => Try(raw.toBoolean).getOrElse(false) | ||||||
|       ).getOrElse(false) |       ).getOrElse(false) | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue