1+ #tool "nuget:?package=xunit.runners&version=1.9.2" ;
2+ #tool "nuget:?package=Squirrel.Windows" ;
3+
4+ #addin Cake . FileHelpers
5+ #addin Cake. Squirrel
6+
7+ var target = Argument ( "target" , "Default" ) ;
8+ var configuration = Argument ( "configuration" , "Debug" ) ;
9+ var version = Argument ( "packageversion" , "1.0.0" ) ;
10+ var githubRepo = Argument ( "githubrepo" , "Code52/carnac" ) ;
11+ var githubAuthToken = Argument ( "authtoken" , "" ) ;
12+
13+ var githubRepoUrl = $ "https://github.com/{ githubRepo } ";
14+ var solutionFile = "./src/Carnac.sln" ;
15+ var buildDir = Directory ( "./src/Carnac/bin" ) + Directory ( configuration ) ;
16+ var toolsDir = Directory ( "./tools" ) ;
17+ var deployDir = Directory ( "./deploy" ) ;
18+ var zipFileHash = "" ;
19+
20+ var squirrelDeployDir = deployDir + Directory ( "Squirrel" ) ;
21+ var squirrelReleaseDir = squirrelDeployDir + Directory ( "Releases" ) ;
22+
23+ Task ( "Clean" )
24+ . Does ( ( ) =>
25+ {
26+ Func < IFileSystemInfo , bool > excludeSquirrelDir =
27+ fileSystemInfo => ! ( fileSystemInfo . Path . FullPath . IndexOf ( "Squirrel" , StringComparison . OrdinalIgnoreCase ) >= 0 ) ;
28+
29+ CleanDirectory ( buildDir ) ;
30+ CleanDirectory ( deployDir , excludeSquirrelDir ) ;
31+ } ) ;
32+
33+ Task ( "Restore-NuGet-Packages" )
34+ . IsDependentOn ( "Clean" )
35+ . Does ( ( ) =>
36+ {
37+ NuGetRestore ( solutionFile ) ;
38+ } ) ;
39+
40+ Task ( "Build" )
41+ . IsDependentOn ( "Restore-NuGet-Packages" )
42+ . Does ( ( ) =>
43+ {
44+ MSBuild ( solutionFile , settings =>
45+ settings . SetConfiguration ( configuration ) ) ;
46+ } ) ;
47+
48+ Task ( "Run-Unit-Tests" )
49+ . IsDependentOn ( "Build" )
50+ . Does ( ( ) =>
51+ {
52+ XUnit ( $ "./src/Carnac.Tests/bin/{ configuration } /*.Tests.dll") ;
53+ } ) ;
54+
55+ Task ( "Package-Squirrel" )
56+ . IsDependentOn ( "Run-Unit-Tests" )
57+ . Does ( ( ) =>
58+ {
59+ var syncReleasesDir = toolsDir + Directory ( "squirrel.windows/tools" ) ;
60+
61+ EnsureDirectoryExists ( deployDir ) ;
62+ EnsureDirectoryExists ( squirrelDeployDir ) ;
63+
64+ // Create nuget package
65+ var appFiles = GetFiles ( buildDir . Path + "/**/*.*" ) . Select ( f => f . FullPath ) ;
66+ var deltaCompressionFiles = GetFiles ( $ "{ ( toolsDir + Directory ( "DeltaCompressionDotNet/lib/net45" ) ) . Path } /*.dll") . Select ( f => f . FullPath ) ;
67+ var monoCecilFiles = GetFiles ( $ "{ ( toolsDir + Directory ( "Mono.Cecil/lib/net45" ) ) . Path } /*.dll") . Select ( f => f . FullPath ) ;
68+ var splatFiles = GetFiles ( $ "{ ( toolsDir + Directory ( "Splat/lib/Net45" ) ) . Path } /*.dll") . Select ( f => f . FullPath ) ;
69+ var iCSharpCodeFiles = GetFiles ( $ "{ ( toolsDir + Directory ( "squirrel.windows/lib/Net45" ) ) . Path } /ICSharpCode.SharpZipLib.*") . Select ( f => f . FullPath ) ;
70+ var squirrelFiles = GetFiles ( $ "{ ( toolsDir + Directory ( "squirrel.windows/lib/Net45" ) ) . Path } /*Squirrel.dll") . Select ( f => f . FullPath ) ;
71+ var releaseFiles = new HashSet < string > (
72+ appFiles
73+ . Concat ( deltaCompressionFiles )
74+ . Concat ( monoCecilFiles )
75+ . Concat ( splatFiles )
76+ . Concat ( iCSharpCodeFiles )
77+ . Concat ( squirrelFiles )
78+ ) ;
79+ releaseFiles . RemoveWhere ( f => f . Contains ( ".vshost." ) || f . EndsWith ( ".pdb" ) ) ;
80+
81+ var nuGetPackSettings = new NuGetPackSettings
82+ {
83+ Version = version ,
84+ Files = releaseFiles . Select ( f => new NuSpecContent { Source = f , Target = "lib/net45" + ( f . Contains ( "Keymaps" ) ? "/Keymaps" : "" ) } ) . ToList ( ) ,
85+ BasePath = buildDir ,
86+ OutputDirectory = squirrelDeployDir ,
87+ NoPackageAnalysis = true
88+ } ;
89+ NuGetPack ( "./src/Carnac/Carnac.nuspec" , nuGetPackSettings ) ;
90+
91+ // Sync latest release to build new package
92+ var squirrelSyncReleasesExe = syncReleasesDir + File ( "SyncReleases.exe" ) ;
93+ StartProcess ( squirrelSyncReleasesExe , new ProcessSettings { Arguments = $ "--url { githubRepoUrl } --releaseDir { squirrelReleaseDir . Path } { ( ! string . IsNullOrEmpty ( githubAuthToken ) ? " --token " + githubAuthToken : "" ) } " } ) ;
94+
95+ // Create new squirrel package
96+ Squirrel (
97+ squirrelDeployDir + File ( $ "carnac.{ version } .nupkg") ,
98+ new SquirrelSettings
99+ {
100+ ReleaseDirectory = squirrelReleaseDir ,
101+ NoMsi = true ,
102+ Icon = "./src/Carnac/icon.ico" ,
103+ SetupIcon = "./src/Carnac/icon.ico" ,
104+ ShortCutLocations = "StartMenu" ,
105+ Silent = true
106+ }
107+ ) ;
108+ } ) ;
109+
110+ Task ( "Package-Zip" )
111+ . IsDependentOn ( "Package-Squirrel" )
112+ . Does ( ( ) =>
113+ {
114+ var gitHubDeployDir = deployDir + Directory ( "GitHub" ) ;
115+ var zipFile = gitHubDeployDir + File ( $ "carnac.{ version } .zip") ;
116+
117+ EnsureDirectoryExists ( deployDir ) ;
118+ EnsureDirectoryExists ( gitHubDeployDir ) ;
119+
120+ Zip ( squirrelReleaseDir , zipFile ) ;
121+ zipFileHash = CalculateFileHash ( zipFile , HashAlgorithm . SHA256 ) . ToHex ( ) ;
122+ } ) ;
123+
124+ Task ( "Package-Choco" )
125+ . IsDependentOn ( "Package-Zip" )
126+ . Does ( ( ) =>
127+ {
128+ var chocoSourceDir = Directory ( "./src/Chocolatey" ) ;
129+ var chocoToolsDir = chocoSourceDir + Directory ( "tools" ) ;
130+ var chocoInstallFile = chocoToolsDir + File ( "chocolateyinstall.ps1" ) ;
131+ var chocoSpecPath = chocoSourceDir + File ( "carnac.nuspec" ) ;
132+ var chocoDeployDir = deployDir + Directory ( "Chocolatey" ) ;
133+
134+ EnsureDirectoryExists ( deployDir ) ;
135+ EnsureDirectoryExists ( chocoDeployDir ) ;
136+
137+ var url = $ "{ githubRepoUrl } /releases/download/{ version } ";
138+
139+ ReplaceRegexInFiles ( chocoInstallFile , @"\$url = '.+'" , $ "$url = '{ url } /carnac.{ version } .zip'") ;
140+ ReplaceRegexInFiles ( chocoInstallFile , @"\$zipFileHash = '.+'" , $ "$zipFileHash = '{ zipFileHash } '") ;
141+
142+ ChocolateyPack ( chocoSpecPath , new ChocolateyPackSettings
143+ {
144+ Version = version
145+ } ) ;
146+ MoveFiles ( "./*.nupkg" , chocoDeployDir ) ;
147+ } ) ;
148+
149+ Task ( "Package" )
150+ . IsDependentOn ( "Package-Zip" )
151+ . IsDependentOn ( "Package-Squirrel" )
152+ . IsDependentOn ( "Package-Choco" )
153+ . Does ( ( ) =>
154+ {
155+ EnsureDirectoryExists ( deployDir ) ;
156+ } ) ;
157+
158+ Task ( "Default" )
159+ . IsDependentOn ( "Package" ) ;
160+
161+ RunTarget ( target ) ;
0 commit comments