Skip to content

Commit c4d9773

Browse files
authored
Merge pull request #137 from Code52/hello-squirrel
Move from ClickOnce to Squirrel.Windows
2 parents fef48d6 + 4172ffe commit c4d9773

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+533
-5306
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ deploy-to-ec2*
1919
*.orig
2020
Thumbs.db
2121
src/Carnac.sln.ide/
22+
23+
# Cake - Uncomment if you are using it
24+
tools/**
25+
!tools/packages.config

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,16 @@ You can install the latest version of Carnac via [Chocolatey](https://chocolatey
1515
cinst carnac
1616
```
1717

18-
Alternatively, you can grab the latest zip file from [here](https://github.com/Code52/carnac/releases/latest) and unpack it.
18+
Alternatively, you can grab the latest zip file from [here](https://github.com/Code52/carnac/releases/latest), unpack it and run `Setup.exe`.
1919

2020
**Note:** Carnac requires .NET 4.5.2 to work - you can install that from [here](https://www.microsoft.com/en-au/download/details.aspx?id=42643) if you don't have it already.
2121

22+
### Updating
23+
24+
We use `Squirrel.Windows` to update your `carnac` application.
25+
26+
The application will check for updates in the background, if a new version has been released, it will automatically install the new version and once you restart `carnac` you will be up-to-date.
27+
2228
### Usage
2329

2430
** Enabling silent mode **

appveyor.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: 2.0.0.{build}
1+
version: 2.1.{build}
22
configuration: Release
33
skip_branch_with_pr: true
44
skip_tags: true
@@ -11,16 +11,20 @@ assembly_info:
1111
environment:
1212
Version: $(APPVEYOR_BUILD_VERSION)
1313
GithubRepo: $(APPVEYOR_REPO_NAME)
14+
GithubAuthToken:
15+
secure: tvr7i0kJpT3SAdYG037M6zU1g6FYXHAUUaseqBTUzasqsUo6mumdcW+huf5/351p
1416
build_script:
15-
- build.cmd Release
17+
- cmd: PowerShell -Version 2.0 .\build.ps1 -Configuration Release -Experimental -ScriptArgs '--packageversion="%APPVEYOR_BUILD_VERSION%" --authtoken="%GithubAuthToken%"'
1618
test:
1719
assemblies:
1820
- '**\Carnac.Tests.dll'
1921
artifacts:
20-
- path: deploy\*.nupkg
22+
- path: deploy\Chocolatey\*.nupkg
2123
name: ChocoPackage
22-
- path: deploy\*.zip
24+
- path: deploy\GitHub\*.zip
2325
name: ZipPackage
26+
- path: deploy\Squirrel\Releases\*
27+
name: SquirrelPackage
2428
deploy:
2529
- provider: GitHub
2630
auth_token:
@@ -29,6 +33,13 @@ deploy:
2933
draft: false
3034
on:
3135
branch: master
36+
- provider: GitHub
37+
auth_token:
38+
secure: tvr7i0kJpT3SAdYG037M6zU1g6FYXHAUUaseqBTUzasqsUo6mumdcW+huf5/351p
39+
artifact: SquirrelPackage
40+
draft: false
41+
on:
42+
branch: master
3243
- provider: NuGet
3344
server: https://chocolatey.org/
3445
api_key:

build.cake

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
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);

build.cmd

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)