44open Fake
55open System
66open InheritDoc
7+ open SemVerHelper
8+ open AssemblyInfoFile
79
810
911// Properties
@@ -17,7 +19,17 @@ Target "Clean" (fun _ ->
1719 CleanDir buildDir
1820)
1921
22+
23+
2024Target " BuildApp" ( fun _ ->
25+ let binDirs = !! " src/**/bin/**"
26+ |> Seq.map DirectoryName
27+ |> Seq.distinct
28+ |> Seq.filter ( fun f -> ( f.EndsWith( " Debug" ) || f.EndsWith( " Release" )) && not ( f.Contains " CodeGeneration" ))
29+
30+ CleanDirs binDirs
31+
32+ //Override the prebuild event because it just calls a fake task BuildApp depends on anyways
2133 let msbuildProperties = [
2234 ( " Configuration" , " Release" );
2335 ( " PreBuildEvent" , " ECHO" );
@@ -89,20 +101,24 @@ let validateSignedAssembly = fun name ->
89101 | (_, t) -> traceFAKE " %s was not signed with the official token: %s but %s " name oficialToken t
90102
91103let nugetPack = fun name ->
92-
104+ let fileVersion = ( getBuildParamOrDefault " version " " 0.1.0 " )
93105 CreateDir nugetOutDir
94-
106+ let package = ( sprintf @" build\%s.nuspec" name)
107+ let packageContents = ReadFileAsString package
108+ let re = @" (?<start>\<version\>|"" (Elasticsearch.Net|Nest)"" version="" )[^"" ><]+(?<end>\<\/version\>|"" )"
109+ let replacedContents = regex_ replace re ( sprintf " ${start}%s ${end}" fileVersion) packageContents
110+ WriteStringToFile false package replacedContents
111+
95112 let dir = sprintf " %s /%s /" buildDir name
96- let version = " 1.0.0-c4"
97113 NuGetPack ( fun p ->
98114 { p with
99- Version = version
115+ Version = fileVersion
100116 WorkingDir = dir
101117 OutputPath = dir
102118 })
103- ( sprintf @" build\%s.nuspec " name )
119+ package
104120
105- MoveFile nugetOutDir ( buildDir + ( sprintf " %s /%s .%s .nupkg" name name version ))
121+ MoveFile nugetOutDir ( buildDir + ( sprintf " %s /%s .%s .nupkg" name name fileVersion ))
106122
107123let buildDocs = fun action ->
108124 let node = @" build\tools\Node.js\node.exe"
@@ -115,11 +131,40 @@ let buildDocs = fun action ->
115131 ( TimeSpan.FromMinutes ( if action = " preview" then 300.0 else 5.0 ))
116132
117133Target " Version" ( fun _ ->
118- let v = ( getBuildParamOrDefault " version" " 0.1.0" )
119- let version = SemVerHelper.parse v
120- let assemblyVersion = sprintf " %i .%i .0.0" version.Major version.Minor
121-
122- trace ( sprintf " %s %s " v assemblyVersion)
134+ let fileVersion = ( getBuildParamOrDefault " version" " 0.1.0" )
135+ let version = SemVerHelper.parse fileVersion
136+
137+ let suffix = fun ( prerelease : PreRelease ) -> sprintf " -%s%i " prerelease.Name prerelease.Number.Value
138+ let assemblySuffix = if version.PreRelease.IsSome then suffix version.PreRelease.Value else " " ;
139+ let assemblyVersion = sprintf " %i .0.0%s " version.Major assemblySuffix
140+
141+ match ( assemblySuffix, version.Minor, version.Patch) with
142+ | ( s, m, p) when s <> " " && ( m <> 0 || p <> 0 ) -> failwithf " Cannot create prereleases for minor or major builds!"
143+ | ( " " , _, _) -> traceFAKE " Building fileversion %s for asssembly version %s " fileVersion assemblyVersion
144+ | _ -> traceFAKE " Building prerelease %s for major assembly version %s " fileVersion assemblyVersion
145+
146+ let assemblyDescription = fun ( f : string ) ->
147+ let name = f
148+ match f.ToLowerInvariant() with
149+ | f when f = " elasticsearch.net" -> " Elasticsearch.Net - oficial low level elasticsearch client"
150+ | f when f = " nest" -> " NEST - oficial high level elasticsearch client"
151+ | f when f = " elasticsearch.net.connection.thrift" -> " Elasticsearc.Net.Connection.Thrift - Add thrift support to elasticsearch."
152+ | _ -> sprintf " %s " name
153+
154+ !! " src/**/AssemblyInfo.cs"
155+ |> Seq.iter( fun f ->
156+ let name = ( directoryInfo f) .Parent.Parent.Name
157+ CreateCSharpAssemblyInfo f [
158+ Attribute.Title name
159+ Attribute.Copyright ( sprintf " Elasticsearch %i " DateTime.UtcNow.Year)
160+ Attribute.Description ( assemblyDescription name)
161+ Attribute.Company " Elasticsearch"
162+ Attribute.Configuration " Release"
163+ Attribute.Version assemblyVersion
164+ Attribute.FileVersion fileVersion
165+ Attribute.InformationalVersion fileVersion
166+ ]
167+ )
123168)
124169
125170
@@ -134,7 +179,6 @@ Target "Release" (fun _ ->
134179 validateSignedAssembly( " Elasticsearch.Net" )
135180 validateSignedAssembly( " Elasticsearch.Net.Connection.Thrift" )
136181 validateSignedAssembly( " Nest" )
137-
138182)
139183
140184Target " Docs" ( fun _ -> buildDocs " build" |> ignore)
@@ -146,6 +190,7 @@ Target "DocsPreview" (fun _ ->
146190// Dependencies
147191" Clean"
148192 ==> " CreateKeysIfAbsent"
193+ =?> ( " Version" , hasBuildParam " version" )
149194 ==> " BuildApp"
150195 ==> " Test"
151196 ==> " Build"
@@ -154,6 +199,7 @@ Target "DocsPreview" (fun _ ->
154199 ==> " Release"
155200
156201" DocsPreview"
202+ " BuildApp"
157203" CreateKeysIfAbsent"
158204" Version"
159205// start build
0 commit comments