@@ -10,43 +10,66 @@ let TestsAssembly = "bin/XakeLibTests.dll"
1010let (= ?) value deflt = match value with | Some v -> v | None -> deflt
1111
1212let DEF_VER = " 0.0.1"
13- let makePackageName () = recipe {
14- let! ver = getEnv( " VER" )
15- return sprintf " Xake.%s .nupkg" ( ver =? DEF_ VER)
16- }
17- let paket args = system ( useClr >> checkErrorLevel) " .paket/paket.exe" args |> Action.Ignore
13+
14+ let nuget_exe args = system ( useClr >> checkErrorLevel) " packages/NuGet.CommandLine/tools/NuGet.exe" args |> Action.Ignore
15+
16+ module nuget =
17+ module private impl =
18+ let newline = System.Environment.NewLine
19+ let wrapXml node value = sprintf " <%s >%s </%s >" node value node
20+ let wrapXmlNl node ( value : string ) =
21+ let attrs = value.Split([| newline|], System.StringSplitOptions.None) |> Seq.ofArray
22+ let content = attrs |> Seq.map ((+) " " ) |> String.concat newline
23+ sprintf " <%s >%s </%s >" node ( newline + content + newline) node
24+ let toXmlStr ( node , value ) = wrapXml node value
25+
26+ open impl
27+
28+ let dependencies deps =
29+ " dependencies" , newline
30+ + ( deps |> List.map ( fun ( s , v ) -> sprintf """ <dependency id="%s " version="%s " />""" s v) |> String.concat newline)
31+ + newline
32+
33+ let metadata = List.map toXmlStr >> String.concat newline >> wrapXmlNl " metadata"
34+ let files = List.map ( fun ( f , t ) -> ( f, t) ||> sprintf """ <file src="%s " target="%s " />""" ) >> String.concat newline >> wrapXmlNl " files"
35+ let target t ff = ff |> List.map ( fun file -> file, t)
36+ let package = String.concat newline >> wrapXmlNl " package" >> ((+) ( " <?xml version=\" 1.0\" ?>" + newline))
1837
1938do xake { ExecOptions.Default with ConLogLevel = Verbosity.Diag } {
2039 var " NETFX-TARGET" " 4.5"
2140 filelog " build.log" Verbosity.Diag
2241
2342 rules [
24- " main" => recipe {
43+ " main" => action {
2544 do ! need [ " build" ]
2645 do ! need [ " test" ]
2746 }
2847
2948 " build" <== [ TestsAssembly; " bin/Xake.Core.dll" ]
30- " clean" => rm [ " bin/*.*" ]
49+ " clean" => action {
50+ do ! rm [ " bin/*.*" ]
51+ }
3152
32- " test" => recipe {
33- do ! alwaysRerun()
53+ " test" => action {
3454 do ! need[ TestsAssembly]
35- do ! system ( useClr >> checkErrorLevel >> workingDir " bin" ) " packages/NUnit.ConsoleRunner/tools/nunit3-console.exe" [ " XakeLibTests.dll" ] |> Action.Ignore
55+ // do! system (useClr >> checkErrorLevel) "packages/NUnit.ConsoleRunner/tools/nunit3-console.exe" [TestsAssembly; "--work=bin"] |> Action.Ignore
56+ do ! system ( useClr >> checkErrorLevel) " packages/NUnit.ConsoleRunner/tools/nunit3-console.exe" [ TestsAssembly] |> Action.Ignore
3657 }
3758
38- ( " bin/FSharp.Core.dll" ) ..> ( WhenError ignore <| recipe {
39- do ! copyFrom " packages/FSharp.Core/lib/net40/FSharp.Core.dll"
59+ ( " bin/FSharp.Core.dll" ) *> fun outfile ->
60+ WhenError ignore <| action {
61+ do ! copyFile " packages/FSharp.Core/lib/net40/FSharp.Core.dll" outfile.FullName
4062 do ! copyFiles [ " packages/FSharp.Core/lib/net40/FSharp.Core.*data" ] " bin"
41- })
63+ }
4264
43- ( " bin/nunit.framework.dll" ) ..> copyFrom " packages/NUnit/lib/net40/nunit.framework.dll"
65+ ( " bin/nunit.framework.dll" ) *> fun outfile -> action {
66+ do ! copyFile " packages/NUnit/lib/nunit.framework.dll" outfile.FullName
67+ }
4468
45- " bin/Xake.Core.dll" ..> recipe {
69+ " bin/Xake.Core.dll" *> fun file -> action {
4670
4771 // TODO multitarget rule!
4872 let xml = " bin/Xake.Core.XML" // file.FullName .- "XML"
49- let! file = getTargetFile()
5073
5174 let sources = fileset {
5275 basedir " core"
@@ -91,10 +114,9 @@ do xake {ExecOptions.Default with ConLogLevel = Verbosity.Diag } {
91114
92115 }
93116
94- TestsAssembly ..> recipe {
117+ TestsAssembly *> fun file -> action {
95118
96119 // TODO --doc:..\bin\Xake.Core.XML --- multitarget rule!
97- let! file = getTargetFile()
98120
99121 let sources = fileset {
100122 basedir " XakeLibTests"
@@ -124,30 +146,47 @@ do xake {ExecOptions.Default with ConLogLevel = Verbosity.Diag } {
124146
125147 (* Nuget publishing rules *)
126148 rules [
127- " nuget-pack" => recipe {
128- let! package_name = makePackageName ()
129- do ! need [ package_ name]
149+ " nuget-pack" => action {
150+
151+ let libFiles = [ " bin/Xake.Core.dll" ]
152+ do ! need libFiles
153+
154+ let! ver = getEnv( " VER" )
155+
156+ let nuspec =
157+ nuget.package [
158+ nuget.metadata [
159+ " id" , " Xake"
160+ " version" , ver =? DEF_ VER
161+ " authors" , " OlegZee"
162+ " owners" , " OlegZee"
163+ " projectUrl" , " https://github.com/OlegZee/Xake"
164+ " requireLicenseAcceptance" , " false"
165+ " description" , " Xake build tool"
166+ " releaseNotes" , " "
167+ " copyright" , sprintf " Copyright %i " System.DateTime.Now.Year
168+ " tags" , " Xake F# Build"
169+ nuget.dependencies []
170+ ]
171+ nuget.files ( libFiles |> nuget.target " tools" )
172+ ]
173+
174+ let nuspec_file = " _.nuspec"
175+ do System.IO.Directory.CreateDirectory( " nupkg" ) |> ignore
176+ do System.IO.File.WriteAllText( nuspec_ file, nuspec)
177+
178+ do ! nuget_ exe [ " pack" ; nuspec_ file; " -OutputDirectory" ; " nupkg" ]
130179 }
131180
132- " Xake.(ver:*).nupkg" ..> recipe {
133- do ! need [ " bin/Xake.Core.dll" ]
134- let! ver = getRuleMatch( " ver" )
135- do ! paket [ " pack" ; " version" ; ver; " output" ; " ." ]
136- }
181+ " nuget-push" => action {
137182
138- " nuget-push " => recipe {
183+ do ! need [ " nuget-pack " ]
139184
140- let! package_name = makePackageName ( )
141- do ! need [ package_ name]
185+ let! ver = getEnv ( " VER " )
186+ let package_name = sprintf " Xake. %s .nupkg " ( ver =? DEF _ VER )
142187
143188 let! nuget_key = getEnv( " NUGET_KEY" )
144- do ! paket
145- [
146- " push"
147- " url" ; " https://www.nuget.org/api/v2/package"
148- " file" ; package_ name
149- " apikey" ; nuget_ key =? " "
150- ]
189+ do ! nuget_ exe [ " push" ; " nupkg" </> package_ name; nuget_ key =? " " ; " -Source" ; " https://www.nuget.org/api/v2/package" ]
151190 }
152191 ]
153192}
0 commit comments