@@ -8,6 +8,7 @@ open System.Text
8
8
open Fake
9
9
open Fake.DotNetCli
10
10
open Fake.DocFxHelper
11
+ open Fake.NuGet .Install
11
12
12
13
// Information about the project for Nuget and Assembly info files
13
14
let product = " Hyperion"
@@ -18,36 +19,58 @@ let signingName = "Hyperion"
18
19
let signingDescription = " A high performance polymorphic serializer for the .NET framework"
19
20
let signingUrl = " "
20
21
22
+ // Directories
23
+ let toolsDir = __ SOURCE_ DIRECTORY__ @@ " tools"
24
+ let output = __ SOURCE_ DIRECTORY__ @@ " bin"
25
+ let outputTests = __ SOURCE_ DIRECTORY__ @@ " TestResults"
26
+ let outputPerfTests = __ SOURCE_ DIRECTORY__ @@ " PerfResults"
27
+ let outputBinaries = output @@ " binaries"
28
+ let outputBinariesNet461 = outputBinaries @@ " net461"
29
+ let outputBinariesNetStandard = outputBinaries @@ " netstandard2.0"
30
+ let outputBinariesNet = outputBinaries @@ " net5.0"
31
+ let outputNuGet = output @@ " nuget"
21
32
22
33
// Read release notes and version
23
34
let solutionFile = FindFirstMatchingFile " *.sln" __ SOURCE_ DIRECTORY__ // dynamically look up the solution
24
35
let buildNumber = environVarOrDefault " BUILD_NUMBER" " 0"
25
36
let hasTeamCity = ( not ( buildNumber = " 0" )) // check if we have the TeamCity environment variable for build # set
26
37
let preReleaseVersionSuffix = " beta" + ( if ( not ( buildNumber = " 0" )) then ( buildNumber) else DateTime.UtcNow.Ticks.ToString())
27
- let versionSuffix =
28
- match ( getBuildParam " nugetprerelease" ) with
29
- | " dev" -> preReleaseVersionSuffix
30
- | _ -> " "
31
38
32
39
let releaseNotes =
33
- File.ReadLines " ./ RELEASE_NOTES.md"
40
+ File.ReadLines (__ SOURCE _ DIRECTORY __ @@ " RELEASE_NOTES.md" )
34
41
|> ReleaseNotesHelper.parseReleaseNotes
35
42
36
- // Directories
37
- let toolsDir = __ SOURCE_ DIRECTORY__ @@ " tools"
38
- let output = __ SOURCE_ DIRECTORY__ @@ " bin"
39
- let outputTests = __ SOURCE_ DIRECTORY__ @@ " TestResults"
40
- let outputPerfTests = __ SOURCE_ DIRECTORY__ @@ " PerfResults"
41
- let outputNuGet = output @@ " nuget"
43
+ let versionFromReleaseNotes =
44
+ match releaseNotes.SemVer.PreRelease with
45
+ | Some r -> r.Origin
46
+ | None -> " "
47
+
48
+ let versionSuffix =
49
+ match ( getBuildParam " nugetprerelease" ) with
50
+ | " dev" -> preReleaseVersionSuffix
51
+ | " " -> versionFromReleaseNotes
52
+ | str -> str
53
+
54
+ // Configuration values for tests
55
+ let testNetFrameworkVersion = " net461"
56
+ let testNetCoreVersion = " netcoreapp3.1"
57
+ let testNetVersion = " net5.0"
42
58
43
59
Target " Clean" ( fun _ ->
44
60
ActivateFinalTarget " KillCreatedProcesses"
45
61
46
62
CleanDir output
47
63
CleanDir outputTests
48
64
CleanDir outputPerfTests
65
+ CleanDir outputBinaries
49
66
CleanDir outputNuGet
67
+ CleanDir outputBinariesNet461
68
+ CleanDir outputBinariesNetStandard
69
+ CleanDir outputBinariesNet
50
70
CleanDir " docs/_site"
71
+
72
+ CleanDirs !! " ./**/bin"
73
+ CleanDirs !! " ./**/obj"
51
74
)
52
75
53
76
Target " AssemblyInfo" ( fun _ ->
@@ -56,17 +79,20 @@ Target "AssemblyInfo" (fun _ ->
56
79
)
57
80
58
81
Target " Build" ( fun _ ->
82
+ let additionalArgs = if versionSuffix.Length > 0 then [ sprintf " /p:VersionSuffix=%s " versionSuffix] else []
59
83
DotNetCli.Build
60
84
( fun p ->
61
85
{ p with
62
86
Project = solutionFile
63
- Configuration = configuration }) // "Rebuild"
87
+ Configuration = configuration
88
+ AdditionalArgs = additionalArgs }) // "Rebuild"
64
89
)
65
90
66
91
67
92
//--------------------------------------------------------------------------------
68
93
// Tests targets
69
94
//--------------------------------------------------------------------------------
95
+
70
96
module internal ResultHandling =
71
97
let (| OK | Failure |) = function
72
98
| 0 -> OK
@@ -94,8 +120,32 @@ Target "RunTests" (fun _ ->
94
120
let runSingleProject project =
95
121
let arguments =
96
122
match ( hasTeamCity) with
97
- | true -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --results-directory %s -- -parallel none -teamcity" ( outputTests))
98
- | false -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --results-directory %s -- -parallel none" ( outputTests))
123
+ | true -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none -teamcity" testNetFrameworkVersion outputTests)
124
+ | false -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none" testNetFrameworkVersion outputTests)
125
+
126
+ let result = ExecProcess( fun info ->
127
+ info.FileName <- " dotnet"
128
+ info.WorkingDirectory <- ( Directory.GetParent project) .FullName
129
+ info.Arguments <- arguments) ( TimeSpan.FromMinutes 30.0 )
130
+
131
+ ResultHandling.failBuildIfXUnitReportedError TestRunnerErrorLevel.Error result
132
+
133
+ CreateDir outputTests
134
+ projects |> Seq.iter ( log)
135
+ projects |> Seq.iter ( runSingleProject)
136
+ )
137
+
138
+ Target " RunTestsNetCore" ( fun _ ->
139
+ let projects =
140
+ match ( isWindows) with
141
+ | true -> !! " ./src/**/*.Tests.csproj"
142
+ | _ -> !! " ./src/**/*.Tests.csproj" // if you need to filter specs for Linux vs. Windows, do it here
143
+
144
+ let runSingleProject project =
145
+ let arguments =
146
+ match ( hasTeamCity) with
147
+ | true -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none -teamcity" testNetCoreVersion outputTests)
148
+ | false -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none" testNetCoreVersion outputTests)
99
149
100
150
let result = ExecProcess( fun info ->
101
151
info.FileName <- " dotnet"
@@ -104,44 +154,64 @@ Target "RunTests" (fun _ ->
104
154
105
155
ResultHandling.failBuildIfXUnitReportedError TestRunnerErrorLevel.Error result
106
156
157
+ CreateDir outputTests
158
+ projects |> Seq.iter ( log)
159
+ projects |> Seq.iter ( runSingleProject)
160
+ )
161
+
162
+ Target " RunTestsNet" ( fun _ ->
163
+ let projects =
164
+ match ( isWindows) with
165
+ | true -> !! " ./src/**/*.Tests.csproj"
166
+ | _ -> !! " ./src/**/*.Tests.csproj" // if you need to filter specs for Linux vs. Windows, do it here
167
+
168
+ let runSingleProject project =
169
+ let arguments =
170
+ match ( hasTeamCity) with
171
+ | true -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none -teamcity" testNetVersion outputTests)
172
+ | false -> ( sprintf " test -c Release --no-build --logger:trx --logger:\" console;verbosity=normal\" --framework %s --results-directory \" %s \" -- -parallel none" testNetVersion outputTests)
173
+
174
+ let result = ExecProcess( fun info ->
175
+ info.FileName <- " dotnet"
176
+ info.WorkingDirectory <- ( Directory.GetParent project) .FullName
177
+ info.Arguments <- arguments) ( TimeSpan.FromMinutes 30.0 )
178
+
179
+ ResultHandling.failBuildIfXUnitReportedError TestRunnerErrorLevel.Error result
180
+
181
+ CreateDir outputTests
107
182
projects |> Seq.iter ( log)
108
183
projects |> Seq.iter ( runSingleProject)
109
184
)
110
185
111
186
Target " NBench" <| fun _ ->
112
- let nbenchTestPath = findToolInSubPath " NBench.Runner.exe" ( toolsDir @@ " NBench.Runner*" )
113
- printfn " Using NBench.Runner: %s " nbenchTestPath
114
-
115
- let nbenchTestAssemblies = !! " ./src/**/bin/**/*Tests.Performance.dll" // doesn't support .NET Core at the moment
116
-
117
- let runNBench assembly =
118
- let includes = getBuildParam " include"
119
- let excludes = getBuildParam " exclude"
120
- let teamcityStr = ( getBuildParam " teamcity" )
121
- let enableTeamCity =
122
- match teamcityStr with
123
- | null -> false
124
- | " " -> false
125
- | _ -> bool.Parse teamcityStr
126
-
127
- let args = StringBuilder()
128
- |> append assembly
129
- |> append ( sprintf " output-directory=\" %s \" " outputPerfTests)
130
- |> append ( sprintf " concurrent=\" %b \" " true )
131
- |> append ( sprintf " trace=\" %b \" " true )
132
- |> append ( sprintf " teamcity=\" %b \" " enableTeamCity)
133
- |> appendIfNotNullOrEmpty includes " include="
134
- |> appendIfNotNullOrEmpty excludes " include="
187
+ ensureDirectory outputPerfTests
188
+ let projects =
189
+ match ( isWindows) with
190
+ | true -> !! " ./src/**/*Tests.Performance.csproj"
191
+ | _ -> !! " ./src/**/*Tests.Performance.csproj" // if you need to filter specs for Linux vs. Windows, do it here
192
+
193
+ projects |> Seq.iter( fun project ->
194
+ let args = new StringBuilder()
195
+ |> append " run"
196
+ |> append " --no-build"
197
+ |> append " -c"
198
+ |> append configuration
199
+ |> append " -- "
200
+ |> append " --output"
201
+ |> append outputPerfTests
202
+ |> append " --concurrent"
203
+ |> append " true"
204
+ |> append " --trace"
205
+ |> append " true"
206
+ |> append " --diagnostic"
135
207
|> toText
136
208
137
- let result = ExecProcess( fun info ->
138
- info.FileName <- nbenchTestPath
139
- info.WorkingDirectory <- ( Path.GetDirectoryName ( FullName nbenchTestPath))
140
- info.Arguments <- args) ( System.TimeSpan.FromMinutes 45.0 ) (* Reasonably long-running task. *)
141
-
142
- if result <> 0 then failwithf " NBench.Runner failed. %s %s " nbenchTestPath args
143
-
144
- nbenchTestAssemblies |> Seq.iter runNBench
209
+ let result = ExecProcess( fun info ->
210
+ info.FileName <- " dotnet"
211
+ info.WorkingDirectory <- ( Directory.GetParent project) .FullName
212
+ info.Arguments <- args) ( System.TimeSpan.FromMinutes 15.0 ) (* Reasonably long-running task. *)
213
+ if result <> 0 then failwithf " NBench.Runner failed. %s %s " " dotnet" args
214
+ )
145
215
146
216
147
217
//--------------------------------------------------------------------------------
@@ -301,23 +371,30 @@ Target "Help" <| fun _ ->
301
371
Target " BuildRelease" DoNothing
302
372
Target " All" DoNothing
303
373
Target " Nuget" DoNothing
374
+ Target " RunTestsFull" DoNothing
375
+ Target " RunTestsNetCoreFull" DoNothing
304
376
305
377
// build dependencies
306
378
" Clean" ==> " AssemblyInfo" ==> " Build" ==> " BuildRelease"
307
379
308
380
// tests dependencies
309
381
" Build" ==> " RunTests"
382
+ " Build" ==> " RunTestsNetCore"
383
+ " Build" ==> " RunTestsNet"
384
+ " Build" ==> " NBench"
310
385
311
386
// nuget dependencies
312
- " Clean " ==> " Build " ==> " CreateNuget"
387
+ " BuildRelease " ==> " CreateNuget"
313
388
" CreateNuget" ==> " SignPackages" ==> " PublishNuget" ==> " Nuget"
314
389
315
390
// docs
316
- " Clean " ==> " BuildRelease" ==> " Docfx"
391
+ " BuildRelease" ==> " Docfx"
317
392
318
393
// all
319
394
" BuildRelease" ==> " All"
320
395
" RunTests" ==> " All"
396
+ " RunTestsNetCore" ==> " All"
397
+ " RunTestsNet" ==> " All"
321
398
" NBench" ==> " All"
322
399
" Nuget" ==> " All"
323
400
0 commit comments