1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
4+ using System . Threading . Tasks ;
5+ using Cake . Common ;
6+ using Cake . Common . Diagnostics ;
7+ using Cake . Common . IO ;
8+ using Cake . Common . Solution ;
9+ using Cake . Common . Tools . DotNet ;
10+ using Cake . Common . Tools . DotNet . Build ;
11+ using Cake . Common . Tools . DotNet . Publish ;
12+ using Cake . Compression ;
13+ using Cake . Core ;
14+ using Cake . Core . IO ;
15+ using Cake . Frosting ;
16+
17+ namespace Build ;
18+
19+ public static class Program
20+ {
21+ public static int Main ( string [ ] args )
22+ {
23+ return new CakeHost ( )
24+ . UseContext < BuildContext > ( )
25+ // .UseLifetime<BuildLifetime>()
26+ . Run ( args ) ;
27+ }
28+ }
29+
30+ public class BuildContext : FrostingContext
31+ {
32+ public string DotNetBuildConfig { get ; set ; }
33+ public const string SlnFile = "../Flow.Launcher.Plugin.ClipboardR.sln" ;
34+ public Lazy < SolutionParserResult > DefaultSln { get ; set ; }
35+ public const string DeployFramework = "net7.0-windows" ;
36+ public string PublishDir = ".dist" ;
37+ public string PublishVersion = "0.1.4" ;
38+
39+ public BuildContext ( ICakeContext context )
40+ : base ( context )
41+ {
42+ DefaultSln = new Lazy < SolutionParserResult > ( ( ) => context . ParseSolution ( SlnFile ) ) ;
43+ DotNetBuildConfig = context . Argument ( "configuration" , "Release" ) ;
44+ }
45+ }
46+
47+ public class BuildLifetime : FrostingLifetime < BuildContext >
48+ {
49+ public override void Setup ( BuildContext context , ISetupContext info )
50+ {
51+ var clean = new CleanTask ( ) ;
52+ clean . Run ( context ) ;
53+ }
54+
55+ public override void Teardown ( BuildContext context , ITeardownContext info )
56+ {
57+
58+ }
59+ }
60+
61+ [ TaskName ( "Build" ) ]
62+ public sealed class BuildTask : FrostingTask < BuildContext >
63+ {
64+ public override void Run ( BuildContext context )
65+ {
66+ var projects = context
67+ . DefaultSln . Value . Projects . Where ( p => p . Name . EndsWith ( "ClipboardR" ) ) ;
68+ var projectPath = projects . First ( ) . Path . FullPath ;
69+ context . Information ( $ "Building { projectPath } ") ;
70+ context . DotNetBuild (
71+ projectPath ,
72+ new DotNetBuildSettings
73+ {
74+ Configuration = context . DotNetBuildConfig ,
75+ Verbosity = DotNetVerbosity . Minimal ,
76+ Framework = BuildContext . DeployFramework ,
77+ NoDependencies = false ,
78+ NoIncremental = true ,
79+ } ) ;
80+
81+
82+ }
83+ }
84+
85+ [ TaskName ( "Publish" ) ]
86+ [ IsDependentOn ( typeof ( BuildTask ) ) ]
87+ public class PublishTask : FrostingTask < BuildContext >
88+ {
89+ public override void Run ( BuildContext context )
90+ {
91+ var project = context
92+ . DefaultSln . Value . Projects
93+ . First ( p => p . Name . EndsWith ( "ClipboardR" ) ) ;
94+ var srcDir = project . Path . GetDirectory ( )
95+ . Combine ( new DirectoryPath ( $ "bin/publish") ) ;
96+ var dstDir = $ "{ srcDir . GetParent ( ) . GetParent ( ) . GetParent ( ) . GetParent ( ) . FullPath } /{ context . PublishDir } ";
97+ context . DotNetPublish (
98+ project . Path . FullPath ,
99+ new DotNetPublishSettings
100+ {
101+ OutputDirectory = srcDir ,
102+ Configuration = context . DotNetBuildConfig ,
103+ Framework = BuildContext . DeployFramework ,
104+ Verbosity = DotNetVerbosity . Minimal ,
105+ } ) ;
106+ context . CreateDirectory ( dstDir ) ;
107+ var files = context
108+ . GetFiles ( @$ "{ srcDir } /**/(*(c|C)lipboard*.(png|json|dll)|plugin.json|*simulator.dll)") ;
109+ foreach ( var f in files )
110+ context . Information ( $ "Adding: { f } ") ;
111+ context . ZipCompress (
112+ rootPath : srcDir ,
113+ outputPath : $ "{ dstDir } /ClipboardR-v{ context . PublishVersion } .zip",
114+ filePaths : files ,
115+ level : 9 ) ;
116+ }
117+ }
118+
119+ [ TaskName ( "Clean" ) ]
120+ public sealed class CleanTask : FrostingTask < BuildContext >
121+ {
122+ public override void Run ( BuildContext context )
123+ {
124+ foreach ( var project in context . DefaultSln . Value . Projects )
125+ {
126+ context . Information ( $ "Cleaning { project . Path . GetDirectory ( ) . FullPath } ...") ;
127+ context . CleanDirectory ( $ "{ project . Path . GetDirectory ( ) . FullPath } /bin/{ context . DotNetBuildConfig } ") ;
128+ }
129+ }
130+ }
131+
132+ [ TaskName ( "Default" ) ]
133+ [ IsDependentOn ( typeof ( CleanTask ) ) ]
134+ [ IsDependentOn ( typeof ( BuildTask ) ) ]
135+ public class DefaultTask : FrostingTask
136+ {
137+ }
0 commit comments