-
Notifications
You must be signed in to change notification settings - Fork 14
/
build.fsx
158 lines (124 loc) · 4.72 KB
/
build.fsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#I "packages/FAKE/tools/"
#r "FakeLib"
open Fake
open Fake.Git
open Fake.AssemblyInfoHelper
open Fake.ReleaseNotesHelper
open System
let docDir = "./doc"
let resultsDir = "./_build/results"
let docOutputDir = resultsDir @@ "Documentation"
let nugetTemp = "./_build/nugetTemp/"
let authors = [ "Jack Pappas" ]
// Git configuration (used for publishing documentation in gh-pages branch)
// The profile where the project is posted
let gitHome = "https://github.com/jack-pappas"
// The name of the project on GitHub
let gitName = "facio"
// --------------------------------------------------------------------------------------
// Read additional information from the release notes document
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
let release = parseReleaseNotes (IO.File.ReadAllLines "RELEASE_NOTES.md")
// Generate assembly info files with the right version & up-to-date information
Target "AssemblyInfo" (fun _ ->
ReplaceAssemblyInfoVersions (fun p ->
{p with
OutputFileName = "Common/CommonAssemblyInfo.fs"
AssemblyVersion = release.AssemblyVersion
AssemblyFileVersion = release.AssemblyVersion
AssemblyInformationalVersion = release.AssemblyVersion })
)
// --------------------------------------------------------------------------------------
// Clean build results & restore NuGet packages
Target "RestorePackages" RestorePackages
Target "Clean" (fun _ ->
CleanDirs [resultsDir; nugetTemp]
)
Target "CleanDocs" (fun _ ->
CleanDirs ["docs/output"]
)
// --------------------------------------------------------------------------------------
// Build library & test project
Target "Build" (fun _ ->
!! "/**/*.sln"
-- "Examples/**/*.sln"
|> MSBuild resultsDir "Build" ["Configuration", "Release"]
|> Log "Build-Output (release): "
!! "/**/*.sln"
-- "Examples/**/*.sln"
|> MSBuildRelease "" "Build"
|> Log "Build-Output (nuget): "
)
// --------------------------------------------------------------------------------------
// Run the unit tests using test runner
Target "Tests" (fun _ ->
!! "/**/*.Tests.dll"
|> SetBaseDir resultsDir
|> NUnit (fun p ->
{p with
TimeOut = System.TimeSpan.FromMinutes 10.})
)
// --------------------------------------------------------------------------------------
// Build NuGet package(s)
Target "Facio Nuget" (fun _ ->
//let grahamInfo = !! @"/**/Graham.nuspec" |> Seq.exactlyOne
//let grahamInfo = (ReadFileAsString >> getNuspecProperties) grahamInfo
let facioNuget = !! "/**/Facio.nuspec" |> Seq.exactlyOne
//let nugetVersion = grahamInfo.Version
let workingDir = nugetTemp @@ (filenameWithouExt facioNuget)
ensureDirectory (workingDir @@ "build")
//ensureDirectory (workingDir @@ "lib" @@ "net40")
!! "/**/Facio.BuildTasks/bin/Release/*.dll"
++ "/**/Facio.BuildTasks/bin/Release/*.exe"
++ "/**/Facio.BuildTasks/bin/Release/*.config"
++ "/**/fsharp*.exe.config"
|> CopyFiles (workingDir @@ "build")
!! "/**/bin/Release/Facio.targets"
|> CopyFiles (workingDir @@ "build")
facioNuget
|> NuGet (fun p ->
{ p with
Authors = authors
WorkingDir = workingDir
OutputPath = resultsDir
Version = release.NugetVersion
ReleaseNotes = String.Join(Environment.NewLine, release.Notes)
Files = ["**/*", None, Some "*.nuspec"]
Dependencies =
[ "FsLexYacc.Runtime", "[6.0.2, 7.0.0)" ]
})
)
// --------------------------------------------------------------------------------------
// Generate the documentation
Target "GenerateDocs" (fun _ ->
executeFSIWithArgs "docs/tools" "generate.fsx" ["--define:RELEASE"] [] |> ignore
)
// --------------------------------------------------------------------------------------
// Release Scripts
Target "ReleaseDocs" (fun _ ->
let tempDocsDir = "temp/gh-pages"
CleanDir tempDocsDir
Repository.cloneSingleBranch "" (gitHome + "/" + gitName + ".git") "gh-pages" tempDocsDir
fullclean tempDocsDir
CopyRecursive "docs/output" tempDocsDir true |> tracefn "%A"
StageAll tempDocsDir
Commit tempDocsDir (sprintf "Update generated documentation for version %s" release.NugetVersion)
Branches.push tempDocsDir
)
Target "Release" DoNothing
// --------------------------------------------------------------------------------------
// Run all targets by default. Invoke 'build <Target>' to override
Target "All" DoNothing
"Clean"
==> "RestorePackages"
==> "AssemblyInfo"
==> "Build"
=?> ("Tests", not <| hasBuildParam "NoTests")
==> "All"
"All"
==> "CleanDocs"
==> "GenerateDocs"
==> "ReleaseDocs"
==> "Facio Nuget"
==> "Release"
RunTargetOrDefault "All"