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 | ||||
| 
 | ||||
| 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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|       } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -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]]( | ||||
|  |  | |||
|  | @ -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( | ||||
|   ) | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
|       "" | ||||
|   } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -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) | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue