@@ -117,12 +117,17 @@ Action<string> SourceLink = (solutionFileName) =>
117117///////////////////////////////////////////////////////////////////////////////
118118// SETUP / TEARDOWN
119119///////////////////////////////////////////////////////////////////////////////
120- Setup ( ( ) =>
120+ Setup ( context =>
121121{
122+ if ( ! isRunningOnWindows )
123+ {
124+ throw new NotImplementedException ( "ReactiveUI will only build on Windows (w/Xamarin installed) because it's not possible to target UWP, WPF and Windows Forms from UNIX." ) ;
125+ }
126+
122127 Information ( "Building version {0} of ReactiveUI." , semVersion ) ;
123128} ) ;
124129
125- Teardown ( ( ) =>
130+ Teardown ( context =>
126131{
127132 // Executed AFTER the last task.
128133} ) ;
@@ -136,127 +141,104 @@ Task("BuildEventBuilder")
136141 . IsDependentOn ( "UpdateAssemblyInfo" )
137142 . Does ( ( ) =>
138143{
144+ var solution = "./src/EventBuilder.sln" ;
139145
140- if ( isRunningOnUnix )
141- {
142- throw new NotImplementedException ( "Building events on OSX is not implemented yet." ) ;
143- // run mdtool
144- }
145- else
146- {
147- var solution = "./src/EventBuilder.sln" ;
146+ MSBuild ( solution , new MSBuildSettings ( )
147+ . SetConfiguration ( configuration )
148+ . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
149+ . SetVerbosity ( Verbosity . Minimal )
150+ . SetNodeReuse ( false ) ) ;
148151
149- MSBuild ( solution , new MSBuildSettings ( )
150- . SetConfiguration ( configuration )
151- . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
152- . SetVerbosity ( Verbosity . Minimal )
153- . SetNodeReuse ( false ) ) ;
154-
155- SourceLink ( solution ) ;
156- }
152+ SourceLink ( solution ) ;
157153} ) ;
158154
159155Task ( "GenerateEvents" )
160156 . IsDependentOn ( "BuildEventBuilder" )
161157 . Does ( ( ) =>
162158{
163- if ( isRunningOnUnix )
164- {
165- throw new NotImplementedException ( "Building events on OSX is not implemented yet." ) ;
166- }
167- else
168- {
169- var eventBuilder = "./src/EventBuilder/bin/Release/EventBuilder.exe" ;
170- var workingDirectory = "./src/EventBuilder/bin/Release" ;
159+ var eventBuilder = "./src/EventBuilder/bin/Release/EventBuilder.exe" ;
160+ var workingDirectory = "./src/EventBuilder/bin/Release" ;
171161
172- Action < string > generate = ( string platform ) =>
162+ Action < string > generate = ( string platform ) =>
163+ {
164+ using ( var process = StartAndReturnProcess ( eventBuilder ,
165+ new ProcessSettings {
166+ Arguments = "--platform=" + platform ,
167+ WorkingDirectory = workingDirectory ,
168+ RedirectStandardOutput = true } ) )
173169 {
174- using ( var process = StartAndReturnProcess ( eventBuilder ,
175- new ProcessSettings {
176- Arguments = "--platform=" + platform ,
177- WorkingDirectory = workingDirectory ,
178- RedirectStandardOutput = true } ) )
179- {
180- // super important to ensure that the platform is always
181- // uppercase so that the events are written to the write
182- // filename as UNIX is case-sensitive - even though OSX
183- // isn't by default.
184- platform = platform . ToUpper ( ) ;
170+ // super important to ensure that the platform is always
171+ // uppercase so that the events are written to the write
172+ // filename as UNIX is case-sensitive - even though OSX
173+ // isn't by default.
174+ platform = platform . ToUpper ( ) ;
185175
186- Information ( "Generating events for '{0}'" , platform ) ;
176+ Information ( "Generating events for '{0}'" , platform ) ;
187177
188- int timeout = 10 * 60 * 1000 ; // x Minute, y Second, z Millisecond
189- process . WaitForExit ( timeout ) ;
178+ int timeout = 10 * 60 * 1000 ; // x Minute, y Second, z Millisecond
179+ process . WaitForExit ( timeout ) ;
190180
191- var stdout = process . GetStandardOutput ( ) ;
181+ var stdout = process . GetStandardOutput ( ) ;
192182
193- int success = 0 ; // exit code aka %ERRORLEVEL% or $?
194- if ( process . GetExitCode ( ) != success )
195- {
196- Error ( "Failed to generate events for '{0}'" , platform ) ;
197- Abort ( ) ;
198- }
183+ int success = 0 ; // exit code aka %ERRORLEVEL% or $?
184+ if ( process . GetExitCode ( ) != success )
185+ {
186+ Error ( "Failed to generate events for '{0}'" , platform ) ;
187+ Abort ( ) ;
188+ }
199189
200- var directory = "src/ReactiveUI.Events/" ;
201- var filename = String . Format ( "Events_{0}.cs" , platform ) ;
202- var output = System . IO . Path . Combine ( directory , filename ) ;
190+ var directory = "src/ReactiveUI.Events/" ;
191+ var filename = String . Format ( "Events_{0}.cs" , platform ) ;
192+ var output = System . IO . Path . Combine ( directory , filename ) ;
203193
204- FileWriteLines ( output , stdout . ToArray ( ) ) ;
205- Information ( "The events have been written to '{0}'" , output ) ;
206- }
207- } ;
194+ FileWriteLines ( output , stdout . ToArray ( ) ) ;
195+ Information ( "The events have been written to '{0}'" , output ) ;
196+ }
197+ } ;
208198
209- generate ( "android" ) ;
210- generate ( "ios" ) ;
211- generate ( "mac" ) ;
212- generate ( "xamforms" ) ;
199+ generate ( "android" ) ;
200+ generate ( "ios" ) ;
201+ generate ( "mac" ) ;
202+ generate ( "xamforms" ) ;
213203
214- generate ( "net45" ) ;
215-
216- generate ( "wpa81" ) ;
217- generate ( "uwp" ) ;
218- }
204+ generate ( "net45" ) ;
205+
206+ generate ( "wpa81" ) ;
207+ generate ( "uwp" ) ;
219208} ) ;
220209
221210Task ( "BuildEvents" )
222211 . IsDependentOn ( "GenerateEvents" )
223212 . Does ( ( ) =>
224213{
225- if ( isRunningOnUnix )
226- {
227- throw new NotImplementedException ( "Building events on OSX is not implemented." ) ;
228- }
229- else
214+ Action < string > build = ( filename ) =>
230215 {
231- Action < string > build = ( filename ) =>
232- {
233- var solution = System . IO . Path . Combine ( "./src/ReactiveUI.Events/" , filename ) ;
216+ var solution = System . IO . Path . Combine ( "./src/ReactiveUI.Events/" , filename ) ;
234217
235- // UWP (project.json) needs to be restored before it will build.
236- RestorePackages ( solution ) ;
218+ // UWP (project.json) needs to be restored before it will build.
219+ RestorePackages ( solution ) ;
237220
238- Information ( "Building {0}" , solution ) ;
221+ Information ( "Building {0}" , solution ) ;
239222
240- MSBuild ( solution , new MSBuildSettings ( )
241- . SetConfiguration ( configuration )
242- . WithProperty ( "NoWarn" , "1591" ) // ignore missing XML doc warnings
243- . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
244- . SetVerbosity ( Verbosity . Minimal )
245- . SetNodeReuse ( false ) ) ;
223+ MSBuild ( solution , new MSBuildSettings ( )
224+ . SetConfiguration ( configuration )
225+ . WithProperty ( "NoWarn" , "1591" ) // ignore missing XML doc warnings
226+ . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
227+ . SetVerbosity ( Verbosity . Minimal )
228+ . SetNodeReuse ( false ) ) ;
246229
247- SourceLink ( solution ) ;
248- } ;
230+ SourceLink ( solution ) ;
231+ } ;
249232
250- build ( "ReactiveUI.Events_Android.sln" ) ;
251- build ( "ReactiveUI.Events_iOS.sln" ) ;
252- build ( "ReactiveUI.Events_MAC.sln" ) ;
253- build ( "ReactiveUI.Events_XamForms.sln" ) ;
233+ build ( "ReactiveUI.Events_Android.sln" ) ;
234+ build ( "ReactiveUI.Events_iOS.sln" ) ;
235+ build ( "ReactiveUI.Events_MAC.sln" ) ;
236+ build ( "ReactiveUI.Events_XamForms.sln" ) ;
254237
255- build ( "ReactiveUI.Events_NET45.sln" ) ;
238+ build ( "ReactiveUI.Events_NET45.sln" ) ;
256239
257- build ( "ReactiveUI.Events_WPA81.sln" ) ;
258- build ( "ReactiveUI.Events_UWP.sln" ) ;
259- }
240+ build ( "ReactiveUI.Events_WPA81.sln" ) ;
241+ build ( "ReactiveUI.Events_UWP.sln" ) ;
260242} ) ;
261243
262244Task ( "PackageEvents" )
@@ -272,34 +254,27 @@ Task("BuildReactiveUI")
272254 . IsDependentOn ( "UpdateAssemblyInfo" )
273255 . Does ( ( ) =>
274256{
275- if ( isRunningOnUnix )
257+ Action < string > build = ( solution ) =>
276258 {
277- throw new NotImplementedException ( "Building ReactiveUI on OSX is not implemented yet." ) ;
278- }
279- else
280- {
281- Action < string > build = ( solution ) =>
282- {
283- Information ( "Building {0}" , solution ) ;
259+ Information ( "Building {0}" , solution ) ;
284260
285- MSBuild ( solution , new MSBuildSettings ( )
286- . SetConfiguration ( configuration )
287- . WithProperty ( "NoWarn" , "1591" ) // ignore missing XML doc warnings
288- . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
289- . SetVerbosity ( Verbosity . Minimal )
290- . SetNodeReuse ( false ) ) ;
261+ MSBuild ( solution , new MSBuildSettings ( )
262+ . SetConfiguration ( configuration )
263+ . WithProperty ( "NoWarn" , "1591" ) // ignore missing XML doc warnings
264+ . WithProperty ( "TreatWarningsAsErrors" , treatWarningsAsErrors . ToString ( ) )
265+ . SetVerbosity ( Verbosity . Minimal )
266+ . SetNodeReuse ( false ) ) ;
291267
292- SourceLink ( solution ) ;
293- } ;
268+ SourceLink ( solution ) ;
269+ } ;
294270
295- build ( "./src/ReactiveUI.sln" ) ;
296- }
271+ build ( "./src/ReactiveUI.sln" ) ;
297272} ) ;
298273
299274
300275Task ( "PackageReactiveUI" )
301276 . IsDependentOn ( "BuildReactiveUI" )
302- // .IsDependentOn("RunUnitTests")
277+ . IsDependentOn ( "RunUnitTests" )
303278 . Does ( ( ) =>
304279{
305280 // use pwd as as cake needs a basePath, even if making a meta-package that contains no files.
@@ -355,57 +330,46 @@ Task("RunUnitTests")
355330Task ( "Package" )
356331 . IsDependentOn ( "PackageEvents" )
357332 . IsDependentOn ( "PackageReactiveUI" )
333+ . WithCriteria ( ( ) => ! isRunningOnUnix )
358334 . Does ( ( ) =>
359335{
360- if ( isRunningOnUnix )
361- {
362- throw new NotImplementedException ( "Packaging on OSX is not implemented yet." ) ; }
363- else
364- {
365336
366- }
367337} ) ;
368338
369339Task ( "Publish" )
370340 . IsDependentOn ( "Package" )
341+ . WithCriteria ( ( ) => ! isRunningOnUnix )
371342 . WithCriteria ( ( ) => ! local )
372343 . WithCriteria ( ( ) => ! isPullRequest )
373344 . WithCriteria ( ( ) => isMainReactiveUIRepo )
374345 . Does ( ( ) =>
375346{
376- if ( isRunningOnUnix )
347+ // Resolve the API key.
348+ var apiKey = EnvironmentVariable ( "MYGET_API_KEY" ) ;
349+ if ( string . IsNullOrEmpty ( apiKey ) )
377350 {
378- throw new NotImplementedException ( "Packaging on OSX is not implemented yet .") ;
351+ throw new InvalidOperationException ( "Could not resolve MyGet API key .") ;
379352 }
380- else
381- {
382- // Resolve the API key.
383- var apiKey = EnvironmentVariable ( "MYGET_API_KEY" ) ;
384- if ( string . IsNullOrEmpty ( apiKey ) )
385- {
386- throw new InvalidOperationException ( "Could not resolve MyGet API key." ) ;
387- }
388353
389- // only push whitelisted packages.
390- foreach ( var package in new [ ] { "ReactiveUI-Testing" , "ReactiveUI-Events" , "ReactiveUI-Events-XamForms" , "ReactiveUI" , "ReactiveUI-Core" , "ReactiveUI-AndroidSupport" , "ReactiveUI-Blend" , "ReactiveUI-Winforms" , "ReactiveUI-XamForms" } )
391- {
392- // only push the package which was created during this build run.
393- var packagePath = artifactDirectory + File ( string . Concat ( package , "." , semVersion , ".nupkg" ) ) ;
394- var symbolsPath = artifactDirectory + File ( string . Concat ( package , "." , semVersion , ".symbols.nupkg" ) ) ;
395-
396- // Push the package.
397- NuGetPush ( packagePath , new NuGetPushSettings {
398- Source = "https://www.myget.org/F/reactiveui/api/v2/package" ,
399- ApiKey = apiKey
400- } ) ;
401-
402- // Push the symbols
403- NuGetPush ( symbolsPath , new NuGetPushSettings {
404- Source = "https://www.myget.org/F/reactiveui/api/v2/package" ,
405- ApiKey = apiKey
406- } ) ;
354+ // only push whitelisted packages.
355+ foreach ( var package in new [ ] { "ReactiveUI-Testing" , "ReactiveUI-Events" , "ReactiveUI-Events-XamForms" , "ReactiveUI" , "ReactiveUI-Core" , "ReactiveUI-AndroidSupport" , "ReactiveUI-Blend" , "ReactiveUI-Winforms" , "ReactiveUI-XamForms" } )
356+ {
357+ // only push the package which was created during this build run.
358+ var packagePath = artifactDirectory + File ( string . Concat ( package , "." , semVersion , ".nupkg" ) ) ;
359+ var symbolsPath = artifactDirectory + File ( string . Concat ( package , "." , semVersion , ".symbols.nupkg" ) ) ;
360+
361+ // Push the package.
362+ NuGetPush ( packagePath , new NuGetPushSettings {
363+ Source = "https://www.myget.org/F/reactiveui/api/v2/package" ,
364+ ApiKey = apiKey
365+ } ) ;
366+
367+ // Push the symbols
368+ NuGetPush ( symbolsPath , new NuGetPushSettings {
369+ Source = "https://www.myget.org/F/reactiveui/api/v2/package" ,
370+ ApiKey = apiKey
371+ } ) ;
407372
408- }
409373 }
410374} ) ;
411375
0 commit comments