diff --git a/src/app/FakeLib/FakeLib.fsproj b/src/app/FakeLib/FakeLib.fsproj index 2674922b039..7090ff7bd84 100644 --- a/src/app/FakeLib/FakeLib.fsproj +++ b/src/app/FakeLib/FakeLib.fsproj @@ -187,6 +187,7 @@ + @@ -506,4 +507,4 @@ - \ No newline at end of file + diff --git a/src/app/FakeLib/GitVersionHelper.fs b/src/app/FakeLib/GitVersionHelper.fs new file mode 100644 index 00000000000..97ed1e7b838 --- /dev/null +++ b/src/app/FakeLib/GitVersionHelper.fs @@ -0,0 +1,63 @@ +/// Containts helper function for GitVersion - a tool to help you achieve Semantic Versioning on your project. +/// +/// To install GitVersion.exe on Windows, start PowerShell as Administrator and run choco install gitversion.portable -s https://chocolatey.org/api/v2" +/// For Mac and Unix, install the NuGet version. + +module Fake.GitVersionHelper + +open FSharp.Data +open Newtonsoft.Json +open System + +type GitversionParams = { + ToolPath : string +} + +let GitversionDefaults = { + ToolPath = findToolInSubPath "GitVersion.exe" (environVarOrDefault "ChocolateyInstall" currentDirectory) +} + +type GitVersionProperties = { + Major : int; + Minor : int; + Patch : int; + PreReleaseTag : string; + PreReleaseTagWithDash : string; + PreReleaseLabel : string; + PreReleaseNumber : int; + BuildMetaData : string; + BuildMetaDataPadded : string; + FullBuildMetaData : string; + MajorMinorPatch : string; + SemVer : string; + LegacySemVer : string; + LegacySemVerPadded : string; + AssemblySemVer : string; + FullSemVer : string; + InformationalVersion : string; + BranchName : string; + Sha : string; + NuGetVersionV2 : string; + NuGetVersion : string; + CommitsSinceVersionSource : int; + CommitsSinceVersionSourcePadded : string; + CommitDate : string; + } + +/// Runs [GitVersion](https://gitversion.readthedocs.io/en/latest/) on a .NET project file. +/// ## Parameters +/// +/// - `setParams` - Function used to manipulate the GitversionDefaults value. +/// +/// ## Sample +/// +/// GitVersion id // Use Defaults +/// GitVersion (fun p -> { p with ToolPath = currentDirectory @@ "tools" } +let GitVersion (setParams : GitversionParams -> GitversionParams) = + let parameters = GitversionDefaults |> setParams + let timespan = TimeSpan.FromMinutes 1. + + let result = ExecProcessAndReturnMessages (fun info -> + info.FileName <- parameters.ToolPath) timespan + if result.ExitCode <> 0 then failwithf "GitVersion.exe failed with exit code %i" result.ExitCode + result.Messages |> String.concat "" |> fun j -> JsonConvert.DeserializeObject(j)