From 5ba59ae894e9674d78bc24e6e6eafea020a10c67 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Fri, 16 Nov 2018 12:44:10 +0000 Subject: [PATCH 1/9] Add Logging to Releasify The following refactor was brought about because we (Age Partnership) were running into difficulty using Squirrel in the Azure DevOps Build Pipelines and existing logging wasn't sufficient for our needs. I don't expect any functionality to have changed. The Releasify method in Update.exe has been broken up into; * ensureConsole * ReleasifyValidateBaseUrl * ReleasifyValidatePaths * ReleasifyPrepareFiles * ReleasifyProcessFiles * ReleasifyCleanupFiles * ReleasifyWriteReleaseFile * ReleasifyCreateSetupExe * ReleasifyGenerateMsi Breaking Releasify up into smaller methods allows stack traces to be more useful when identifying issues. The refactoring was done using ReSharper. Only significant change is the use of `out var` declarations and passing variables using `ref`. I expect a more significant refactor could make this cleaner. Debug logs have been added to the start of each method and the whole Releasify method is now in a "try / catch / log / throw" block. --- src/Update/Program.cs | 73 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 320e0cc94..6e1bd0bae 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -345,8 +345,27 @@ public async Task Uninstall(string appName = null) public void Releasify(string package, string targetDir = null, string packagesDir = null, string bootstrapperExe = null, string backgroundGif = null, string signingOpts = null, string baseUrl = null, string setupIcon = null, bool generateMsi = true, string frameworkVersion = null, bool generateDeltas = true) { - ensureConsole(); + try { + this.Log().Debug("Begin Releasify"); + ensureConsole(); + ReleasifyValidateBaseUrl(ref baseUrl); + ReleasifyValidatePaths(ref targetDir, ref packagesDir, ref bootstrapperExe); + ReleasifyPrepareFiles(package, targetDir, out var di, out var toProcess, out var processed, out var releaseFilePath, out var previousReleases); + ReleasifyProcessFiles(targetDir, packagesDir, signingOpts, generateDeltas, toProcess, di, processed, previousReleases); + ReleasifyCleanupFiles(toProcess); + ReleasifyWriteReleaseFile(baseUrl, processed, previousReleases, releaseFilePath, out var releaseEntries); + ReleasifyCreateSetupExe(package, bootstrapperExe, backgroundGif, signingOpts, setupIcon, frameworkVersion, di, releaseEntries, out var targetSetupExe); + ReleasifyGenerateMsi(package, signingOpts, generateMsi, targetSetupExe); + this.Log().Debug("Completed Releasify"); + } catch (Exception ex) { + this.Log().Error(ex); + throw; + } + } + private void ReleasifyValidateBaseUrl(ref string baseUrl) + { + this.Log().Debug("Validating BaseUrl"); if (baseUrl != null) { if (!Utility.IsHttpUrl(baseUrl)) { throw new Exception(string.Format("Invalid --baseUrl '{0}'. A base URL must start with http or https and be a valid URI.", baseUrl)); @@ -356,7 +375,11 @@ public void Releasify(string package, string targetDir = null, string packagesDi baseUrl += "/"; } } + } + private void ReleasifyValidatePaths(ref string targetDir, ref string packagesDir, ref string bootstrapperExe) + { + this.Log().Debug("Validating Paths"); targetDir = targetDir ?? Path.Combine(".", "Releases"); packagesDir = packagesDir ?? "."; bootstrapperExe = bootstrapperExe ?? Path.Combine(".", "Setup.exe"); @@ -370,24 +393,33 @@ public void Releasify(string package, string targetDir = null, string packagesDi Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Setup.exe"); } - this.Log().Info("Bootstrapper EXE found at:" + bootstrapperExe); + } - var di = new DirectoryInfo(targetDir); + private void ReleasifyPrepareFiles(string package, string targetDir, out DirectoryInfo di, + out IEnumerable toProcess, out List processed, out string releaseFilePath, out List previousReleases) + { + this.Log().Debug("Preparing Files"); + di = new DirectoryInfo(targetDir); File.Copy(package, Path.Combine(di.FullName, Path.GetFileName(package)), true); var allNuGetFiles = di.EnumerateFiles() .Where(x => x.Name.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase)); - var toProcess = allNuGetFiles.Where(x => !x.Name.Contains("-delta") && !x.Name.Contains("-full")); - var processed = new List(); + toProcess = allNuGetFiles.Where(x => !x.Name.Contains("-delta") && !x.Name.Contains("-full")); + processed = new List(); - var releaseFilePath = Path.Combine(di.FullName, "RELEASES"); - var previousReleases = new List(); + releaseFilePath = Path.Combine(di.FullName, "RELEASES"); + previousReleases = new List(); if (File.Exists(releaseFilePath)) { previousReleases.AddRange(ReleaseEntry.ParseReleaseFile(File.ReadAllText(releaseFilePath, Encoding.UTF8))); } + } + private void ReleasifyProcessFiles(string targetDir, string packagesDir, string signingOpts, bool generateDeltas, + IEnumerable toProcess, DirectoryInfo di, List processed, List previousReleases) + { + this.Log().Debug("Processing Files"); foreach (var file in toProcess) { this.Log().Info("Creating release package: " + file.FullName); @@ -428,19 +460,33 @@ public void Releasify(string package, string targetDir = null, string packagesDi processed.Insert(0, dp.InputPackageFile); } } + } + private void ReleasifyCleanupFiles(IEnumerable toProcess) + { + this.Log().Debug("Cleaning Up Files"); foreach (var file in toProcess) { File.Delete(file.FullName); } + } + private void ReleasifyWriteReleaseFile(string baseUrl, List processed, List previousReleases, string releaseFilePath, + out List releaseEntries) + { + this.Log().Debug("Writing RELEASES file"); var newReleaseEntries = processed .Select(packageFilename => ReleaseEntry.GenerateFromFile(packageFilename, baseUrl)) .ToList(); var distinctPreviousReleases = previousReleases .Where(x => !newReleaseEntries.Select(e => e.Version).Contains(x.Version)); - var releaseEntries = distinctPreviousReleases.Concat(newReleaseEntries).ToList(); + releaseEntries = distinctPreviousReleases.Concat(newReleaseEntries).ToList(); ReleaseEntry.WriteReleaseFile(releaseEntries, releaseFilePath); + } - var targetSetupExe = Path.Combine(di.FullName, "Setup.exe"); + private void ReleasifyCreateSetupExe(string package, string bootstrapperExe, string backgroundGif, string signingOpts, + string setupIcon, string frameworkVersion, DirectoryInfo di, List releaseEntries, out string targetSetupExe) + { + this.Log().Debug("Creating Setup.exe"); + targetSetupExe = Path.Combine(di.FullName, "Setup.exe"); var newestFullRelease = releaseEntries.MaxBy(x => x.Version).Where(x => !x.IsDelta).First(); File.Copy(bootstrapperExe, targetSetupExe, true); @@ -458,14 +504,20 @@ public void Releasify(string package, string targetDir = null, string packagesDi File.Delete(zipPath); } + // Alias parameter because cannot pass to anonymous lambda otherwise + var targetSetupExeAlias = targetSetupExe; Utility.Retry(() => - setPEVersionInfoAndIcon(targetSetupExe, new ZipPackage(package), setupIcon).Wait()); + setPEVersionInfoAndIcon(targetSetupExeAlias, new ZipPackage(package), setupIcon).Wait()); if (signingOpts != null) { signPEFile(targetSetupExe, signingOpts).Wait(); } + } + private void ReleasifyGenerateMsi(string package, string signingOpts, bool generateMsi, string targetSetupExe) + { if (generateMsi) { + this.Log().Debug("Generating .msi"); createMsiPackage(targetSetupExe, new ZipPackage(package)).Wait(); if (signingOpts != null) { @@ -474,6 +526,7 @@ public void Releasify(string package, string targetDir = null, string packagesDi } } + public void Shortcut(string exeName, string shortcutArgs, string processStartArgs, string icon) { if (String.IsNullOrWhiteSpace(exeName)) { From 875fe58571ca8bb847458d9fa181d08c55a1e559 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 16:42:43 +0000 Subject: [PATCH 2/9] Don't prefix method names. Remove private access modifiers. --- src/Update/Program.cs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 6e1bd0bae..c4d1bf12c 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -348,14 +348,14 @@ public void Releasify(string package, string targetDir = null, string packagesDi try { this.Log().Debug("Begin Releasify"); ensureConsole(); - ReleasifyValidateBaseUrl(ref baseUrl); - ReleasifyValidatePaths(ref targetDir, ref packagesDir, ref bootstrapperExe); - ReleasifyPrepareFiles(package, targetDir, out var di, out var toProcess, out var processed, out var releaseFilePath, out var previousReleases); - ReleasifyProcessFiles(targetDir, packagesDir, signingOpts, generateDeltas, toProcess, di, processed, previousReleases); - ReleasifyCleanupFiles(toProcess); - ReleasifyWriteReleaseFile(baseUrl, processed, previousReleases, releaseFilePath, out var releaseEntries); - ReleasifyCreateSetupExe(package, bootstrapperExe, backgroundGif, signingOpts, setupIcon, frameworkVersion, di, releaseEntries, out var targetSetupExe); - ReleasifyGenerateMsi(package, signingOpts, generateMsi, targetSetupExe); + ValidateBaseUrl(ref baseUrl); + ValidatePaths(ref targetDir, ref packagesDir, ref bootstrapperExe); + PrepareFiles(package, targetDir, out var di, out var toProcess, out var processed, out var releaseFilePath, out var previousReleases); + ProcessFiles(targetDir, packagesDir, signingOpts, generateDeltas, toProcess, di, processed, previousReleases); + CleanupFiles(toProcess); + WriteReleaseFile(baseUrl, processed, previousReleases, releaseFilePath, out var releaseEntries); + CreateSetupExe(package, bootstrapperExe, backgroundGif, signingOpts, setupIcon, frameworkVersion, di, releaseEntries, out var targetSetupExe); + GenerateMsi(package, signingOpts, generateMsi, targetSetupExe); this.Log().Debug("Completed Releasify"); } catch (Exception ex) { this.Log().Error(ex); @@ -363,7 +363,7 @@ public void Releasify(string package, string targetDir = null, string packagesDi } } - private void ReleasifyValidateBaseUrl(ref string baseUrl) + void ValidateBaseUrl(ref string baseUrl) { this.Log().Debug("Validating BaseUrl"); if (baseUrl != null) { @@ -377,7 +377,7 @@ private void ReleasifyValidateBaseUrl(ref string baseUrl) } } - private void ReleasifyValidatePaths(ref string targetDir, ref string packagesDir, ref string bootstrapperExe) + void ValidatePaths(ref string targetDir, ref string packagesDir, ref string bootstrapperExe) { this.Log().Debug("Validating Paths"); targetDir = targetDir ?? Path.Combine(".", "Releases"); @@ -396,7 +396,7 @@ private void ReleasifyValidatePaths(ref string targetDir, ref string packagesDir this.Log().Info("Bootstrapper EXE found at:" + bootstrapperExe); } - private void ReleasifyPrepareFiles(string package, string targetDir, out DirectoryInfo di, + void PrepareFiles(string package, string targetDir, out DirectoryInfo di, out IEnumerable toProcess, out List processed, out string releaseFilePath, out List previousReleases) { this.Log().Debug("Preparing Files"); @@ -416,7 +416,7 @@ private void ReleasifyPrepareFiles(string package, string targetDir, out Directo } } - private void ReleasifyProcessFiles(string targetDir, string packagesDir, string signingOpts, bool generateDeltas, + void ProcessFiles(string targetDir, string packagesDir, string signingOpts, bool generateDeltas, IEnumerable toProcess, DirectoryInfo di, List processed, List previousReleases) { this.Log().Debug("Processing Files"); @@ -462,13 +462,13 @@ private void ReleasifyProcessFiles(string targetDir, string packagesDir, string } } - private void ReleasifyCleanupFiles(IEnumerable toProcess) + void CleanupFiles(IEnumerable toProcess) { this.Log().Debug("Cleaning Up Files"); foreach (var file in toProcess) { File.Delete(file.FullName); } } - private void ReleasifyWriteReleaseFile(string baseUrl, List processed, List previousReleases, string releaseFilePath, + void WriteReleaseFile(string baseUrl, List processed, List previousReleases, string releaseFilePath, out List releaseEntries) { this.Log().Debug("Writing RELEASES file"); @@ -482,7 +482,7 @@ private void ReleasifyWriteReleaseFile(string baseUrl, List processed, L ReleaseEntry.WriteReleaseFile(releaseEntries, releaseFilePath); } - private void ReleasifyCreateSetupExe(string package, string bootstrapperExe, string backgroundGif, string signingOpts, + void CreateSetupExe(string package, string bootstrapperExe, string backgroundGif, string signingOpts, string setupIcon, string frameworkVersion, DirectoryInfo di, List releaseEntries, out string targetSetupExe) { this.Log().Debug("Creating Setup.exe"); @@ -514,7 +514,7 @@ private void ReleasifyCreateSetupExe(string package, string bootstrapperExe, str } } - private void ReleasifyGenerateMsi(string package, string signingOpts, bool generateMsi, string targetSetupExe) + void GenerateMsi(string package, string signingOpts, bool generateMsi, string targetSetupExe) { if (generateMsi) { this.Log().Debug("Generating .msi"); From df3e46c5d01848f22233dd6a08e78c1ddc3a2a35 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:02:17 +0000 Subject: [PATCH 3/9] Introduce instance variables instead of passing many arguments. --- src/Update/Program.cs | 95 +++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 44 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index c4d1bf12c..83673863f 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -57,6 +57,18 @@ int main(string[] args) } } + string target = default(string); + string releaseDir = default(string); + string packagesDir = default(string); + string bootstrapperExe = default(string); + string backgroundGif = default(string); + string signingParameters = default(string); + string baseUrl = default(string); + string setupIcon = default(string); + string frameworkVersion = "net45"; + bool noMsi = (Environment.OSVersion.Platform != PlatformID.Win32NT); // NB: WiX doesn't work under Mono / Wine + bool noDelta = false; + int executeCommandLine(string[] args) { var animatedGifWindowToken = new CancellationTokenSource(); @@ -84,22 +96,11 @@ int executeCommandLine(string[] args) bool silentInstall = false; var updateAction = default(UpdateAction); - string target = default(string); - string releaseDir = default(string); - string packagesDir = default(string); - string bootstrapperExe = default(string); - string backgroundGif = default(string); - string signingParameters = default(string); - string baseUrl = default(string); string processStart = default(string); string processStartArgs = default(string); - string setupIcon = default(string); string icon = default(string); string shortcutArgs = default(string); - string frameworkVersion = "net45"; bool shouldWait = false; - bool noMsi = (Environment.OSVersion.Platform != PlatformID.Win32NT); // NB: WiX doesn't work under Mono / Wine - bool noDelta = false; opts = new OptionSet() { "Usage: Squirrel.exe command [OPTS]", @@ -184,7 +185,7 @@ int executeCommandLine(string[] args) break; #endif case UpdateAction.Releasify: - Releasify(target, releaseDir, packagesDir, bootstrapperExe, backgroundGif, signingParameters, baseUrl, setupIcon, !noMsi, frameworkVersion, !noDelta); + Releasify(); break; } } @@ -343,19 +344,30 @@ public async Task Uninstall(string appName = null) } } - public void Releasify(string package, string targetDir = null, string packagesDir = null, string bootstrapperExe = null, string backgroundGif = null, string signingOpts = null, string baseUrl = null, string setupIcon = null, bool generateMsi = true, string frameworkVersion = null, bool generateDeltas = true) + string package; + string signingOpts; + string targetDir; + DirectoryInfo targetDirInfo; + string targetSetupExe; + IEnumerable toProcess; + List processed; + string releaseFilePath; + List releaseEntries; + List previousReleases; + + public void Releasify() { try { this.Log().Debug("Begin Releasify"); ensureConsole(); - ValidateBaseUrl(ref baseUrl); - ValidatePaths(ref targetDir, ref packagesDir, ref bootstrapperExe); - PrepareFiles(package, targetDir, out var di, out var toProcess, out var processed, out var releaseFilePath, out var previousReleases); - ProcessFiles(targetDir, packagesDir, signingOpts, generateDeltas, toProcess, di, processed, previousReleases); - CleanupFiles(toProcess); - WriteReleaseFile(baseUrl, processed, previousReleases, releaseFilePath, out var releaseEntries); - CreateSetupExe(package, bootstrapperExe, backgroundGif, signingOpts, setupIcon, frameworkVersion, di, releaseEntries, out var targetSetupExe); - GenerateMsi(package, signingOpts, generateMsi, targetSetupExe); + ValidateBaseUrl(); + ValidatePaths(); + PrepareFiles(); + ProcessFiles(); + CleanupFiles(); + WriteReleaseFile(); + CreateSetupExe(); + GenerateMsi(); this.Log().Debug("Completed Releasify"); } catch (Exception ex) { this.Log().Error(ex); @@ -363,7 +375,7 @@ public void Releasify(string package, string targetDir = null, string packagesDi } } - void ValidateBaseUrl(ref string baseUrl) + void ValidateBaseUrl() { this.Log().Debug("Validating BaseUrl"); if (baseUrl != null) { @@ -377,7 +389,7 @@ void ValidateBaseUrl(ref string baseUrl) } } - void ValidatePaths(ref string targetDir, ref string packagesDir, ref string bootstrapperExe) + void ValidatePaths() { this.Log().Debug("Validating Paths"); targetDir = targetDir ?? Path.Combine(".", "Releases"); @@ -396,35 +408,33 @@ void ValidatePaths(ref string targetDir, ref string packagesDir, ref string boot this.Log().Info("Bootstrapper EXE found at:" + bootstrapperExe); } - void PrepareFiles(string package, string targetDir, out DirectoryInfo di, - out IEnumerable toProcess, out List processed, out string releaseFilePath, out List previousReleases) + void PrepareFiles() { this.Log().Debug("Preparing Files"); - di = new DirectoryInfo(targetDir); - File.Copy(package, Path.Combine(di.FullName, Path.GetFileName(package)), true); + targetDirInfo = new DirectoryInfo(targetDir); + File.Copy(package, Path.Combine(targetDirInfo.FullName, Path.GetFileName(package)), true); - var allNuGetFiles = di.EnumerateFiles() + var allNuGetFiles = targetDirInfo.EnumerateFiles() .Where(x => x.Name.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase)); toProcess = allNuGetFiles.Where(x => !x.Name.Contains("-delta") && !x.Name.Contains("-full")); processed = new List(); - releaseFilePath = Path.Combine(di.FullName, "RELEASES"); + releaseFilePath = Path.Combine(targetDirInfo.FullName, "RELEASES"); previousReleases = new List(); if (File.Exists(releaseFilePath)) { previousReleases.AddRange(ReleaseEntry.ParseReleaseFile(File.ReadAllText(releaseFilePath, Encoding.UTF8))); } } - void ProcessFiles(string targetDir, string packagesDir, string signingOpts, bool generateDeltas, - IEnumerable toProcess, DirectoryInfo di, List processed, List previousReleases) + void ProcessFiles() { this.Log().Debug("Processing Files"); foreach (var file in toProcess) { this.Log().Info("Creating release package: " + file.FullName); var rp = new ReleasePackage(file.FullName); - rp.CreateReleasePackage(Path.Combine(di.FullName, rp.SuggestedReleaseFileName), packagesDir, contentsPostProcessHook: pkgPath => { + rp.CreateReleasePackage(Path.Combine(targetDirInfo.FullName, rp.SuggestedReleaseFileName), packagesDir, contentsPostProcessHook: pkgPath => { new DirectoryInfo(pkgPath).GetAllFilesRecursively() .Where(x => x.Name.ToLowerInvariant().EndsWith(".exe")) .Where(x => !x.Name.ToLowerInvariant().Contains("squirrel.exe")) @@ -452,24 +462,23 @@ void ProcessFiles(string targetDir, string packagesDir, string signingOpts, bool processed.Add(rp.ReleasePackageFile); var prev = ReleaseEntry.GetPreviousRelease(previousReleases, rp, targetDir); - if (prev != null && generateDeltas) { + if (prev != null && !noDelta) { var deltaBuilder = new DeltaPackageBuilder(null); var dp = deltaBuilder.CreateDeltaPackage(prev, rp, - Path.Combine(di.FullName, rp.SuggestedReleaseFileName.Replace("full", "delta"))); + Path.Combine(targetDirInfo.FullName, rp.SuggestedReleaseFileName.Replace("full", "delta"))); processed.Insert(0, dp.InputPackageFile); } } } - void CleanupFiles(IEnumerable toProcess) + void CleanupFiles() { this.Log().Debug("Cleaning Up Files"); foreach (var file in toProcess) { File.Delete(file.FullName); } } - void WriteReleaseFile(string baseUrl, List processed, List previousReleases, string releaseFilePath, - out List releaseEntries) + void WriteReleaseFile() { this.Log().Debug("Writing RELEASES file"); var newReleaseEntries = processed @@ -482,15 +491,14 @@ void WriteReleaseFile(string baseUrl, List processed, List ReleaseEntry.WriteReleaseFile(releaseEntries, releaseFilePath); } - void CreateSetupExe(string package, string bootstrapperExe, string backgroundGif, string signingOpts, - string setupIcon, string frameworkVersion, DirectoryInfo di, List releaseEntries, out string targetSetupExe) + void CreateSetupExe() { this.Log().Debug("Creating Setup.exe"); - targetSetupExe = Path.Combine(di.FullName, "Setup.exe"); + targetSetupExe = Path.Combine(targetDirInfo.FullName, "Setup.exe"); var newestFullRelease = releaseEntries.MaxBy(x => x.Version).Where(x => !x.IsDelta).First(); File.Copy(bootstrapperExe, targetSetupExe, true); - var zipPath = createSetupEmbeddedZip(Path.Combine(di.FullName, newestFullRelease.Filename), di.FullName, backgroundGif, signingOpts, setupIcon).Result; + var zipPath = createSetupEmbeddedZip(Path.Combine(targetDirInfo.FullName, newestFullRelease.Filename), targetDirInfo.FullName, backgroundGif, signingOpts, setupIcon).Result; var writeZipToSetup = Utility.FindHelperExecutable("WriteZipToSetup.exe"); @@ -514,9 +522,9 @@ void CreateSetupExe(string package, string bootstrapperExe, string backgroundGif } } - void GenerateMsi(string package, string signingOpts, bool generateMsi, string targetSetupExe) + void GenerateMsi() { - if (generateMsi) { + if (!noMsi) { this.Log().Debug("Generating .msi"); createMsiPackage(targetSetupExe, new ZipPackage(package)).Wait(); @@ -526,7 +534,6 @@ void GenerateMsi(string package, string signingOpts, bool generateMsi, string ta } } - public void Shortcut(string exeName, string shortcutArgs, string processStartArgs, string icon) { if (String.IsNullOrWhiteSpace(exeName)) { From 67fa86ea88074b7c667f48178cfe33ab4147a9f5 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:06:05 +0000 Subject: [PATCH 4/9] Alias workaround no longer required. --- src/Update/Program.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 83673863f..0f1e20968 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -512,10 +512,8 @@ void CreateSetupExe() File.Delete(zipPath); } - // Alias parameter because cannot pass to anonymous lambda otherwise - var targetSetupExeAlias = targetSetupExe; Utility.Retry(() => - setPEVersionInfoAndIcon(targetSetupExeAlias, new ZipPackage(package), setupIcon).Wait()); + setPEVersionInfoAndIcon(targetSetupExe, new ZipPackage(package), setupIcon).Wait()); if (signingOpts != null) { signPEFile(targetSetupExe, signingOpts).Wait(); From df8d964a7b5de68594886337de04779449f0a920 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:06:12 +0000 Subject: [PATCH 5/9] Revert "Build: Fix Reference HintPaths." This reverts commit d3b0deb22ed2ac8af19ae4e73d6fc3e126504583. --- src/Update/Update.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Update/Update.csproj b/src/Update/Update.csproj index bc4732f42..788bdab97 100644 --- a/src/Update/Update.csproj +++ b/src/Update/Update.csproj @@ -39,13 +39,13 @@ - ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.dll + ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net45\DeltaCompressionDotNet.dll - ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.MsDelta.dll + ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net45\DeltaCompressionDotNet.MsDelta.dll - ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.PatchApi.dll + ..\..\packages\DeltaCompressionDotNet.1.1.0\lib\net45\DeltaCompressionDotNet.PatchApi.dll ..\..\packages\Microsoft.Web.Xdt.2.1.1\lib\net40\Microsoft.Web.XmlTransform.dll From 17314f2bc257906cb08e1581749e776f1e12368a Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:12:33 +0000 Subject: [PATCH 6/9] Sort and move instance variables based on when they're used. --- src/Update/Program.cs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 0f1e20968..cb2b6bfb6 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -58,11 +58,9 @@ int main(string[] args) } string target = default(string); - string releaseDir = default(string); string packagesDir = default(string); string bootstrapperExe = default(string); string backgroundGif = default(string); - string signingParameters = default(string); string baseUrl = default(string); string setupIcon = default(string); string frameworkVersion = "net45"; @@ -97,10 +95,12 @@ int executeCommandLine(string[] args) var updateAction = default(UpdateAction); string processStart = default(string); - string processStartArgs = default(string); + bool shouldWait = false; + string releaseDir = default(string); string icon = default(string); + string signingParameters = default(string); + string processStartArgs = default(string); string shortcutArgs = default(string); - bool shouldWait = false; opts = new OptionSet() { "Usage: Squirrel.exe command [OPTS]", @@ -344,17 +344,6 @@ public async Task Uninstall(string appName = null) } } - string package; - string signingOpts; - string targetDir; - DirectoryInfo targetDirInfo; - string targetSetupExe; - IEnumerable toProcess; - List processed; - string releaseFilePath; - List releaseEntries; - List previousReleases; - public void Releasify() { try { @@ -389,6 +378,7 @@ void ValidateBaseUrl() } } + string targetDir; void ValidatePaths() { this.Log().Debug("Validating Paths"); @@ -408,6 +398,12 @@ void ValidatePaths() this.Log().Info("Bootstrapper EXE found at:" + bootstrapperExe); } + DirectoryInfo targetDirInfo; + string package; + IEnumerable toProcess; + List processed; + string releaseFilePath; + List previousReleases; void PrepareFiles() { this.Log().Debug("Preparing Files"); @@ -427,6 +423,7 @@ void PrepareFiles() } } + string signingOpts; void ProcessFiles() { this.Log().Debug("Processing Files"); @@ -478,6 +475,7 @@ void CleanupFiles() foreach (var file in toProcess) { File.Delete(file.FullName); } } + List releaseEntries; void WriteReleaseFile() { this.Log().Debug("Writing RELEASES file"); @@ -491,6 +489,7 @@ void WriteReleaseFile() ReleaseEntry.WriteReleaseFile(releaseEntries, releaseFilePath); } + string targetSetupExe; void CreateSetupExe() { this.Log().Debug("Creating Setup.exe"); From f184389f6cf5e9aa4f8517b47317f786f4c5236c Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:19:00 +0000 Subject: [PATCH 7/9] Remove signingOpts and just use signingParameters. --- src/Update/Program.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index cb2b6bfb6..130209b68 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -62,6 +62,7 @@ int main(string[] args) string bootstrapperExe = default(string); string backgroundGif = default(string); string baseUrl = default(string); + string signingParameters = default(string); string setupIcon = default(string); string frameworkVersion = "net45"; bool noMsi = (Environment.OSVersion.Platform != PlatformID.Win32NT); // NB: WiX doesn't work under Mono / Wine @@ -98,7 +99,6 @@ int executeCommandLine(string[] args) bool shouldWait = false; string releaseDir = default(string); string icon = default(string); - string signingParameters = default(string); string processStartArgs = default(string); string shortcutArgs = default(string); @@ -423,7 +423,6 @@ void PrepareFiles() } } - string signingOpts; void ProcessFiles() { this.Log().Debug("Processing Files"); @@ -440,7 +439,7 @@ void ProcessFiles() .ForEachAsync(x => createExecutableStubForExe(x.FullName)) .Wait(); - if (signingOpts == null) return; + if (signingParameters == null) return; new DirectoryInfo(pkgPath).GetAllFilesRecursively() .Where(x => Utility.FileIsLikelyPEImage(x.Name)) @@ -451,7 +450,7 @@ void ProcessFiles() } this.Log().Info("About to sign {0}", x.FullName); - await signPEFile(x.FullName, signingOpts); + await signPEFile(x.FullName, signingParameters); }, 1) .Wait(); }); @@ -497,7 +496,7 @@ void CreateSetupExe() var newestFullRelease = releaseEntries.MaxBy(x => x.Version).Where(x => !x.IsDelta).First(); File.Copy(bootstrapperExe, targetSetupExe, true); - var zipPath = createSetupEmbeddedZip(Path.Combine(targetDirInfo.FullName, newestFullRelease.Filename), targetDirInfo.FullName, backgroundGif, signingOpts, setupIcon).Result; + var zipPath = createSetupEmbeddedZip(Path.Combine(targetDirInfo.FullName, newestFullRelease.Filename), targetDirInfo.FullName, backgroundGif, signingParameters, setupIcon).Result; var writeZipToSetup = Utility.FindHelperExecutable("WriteZipToSetup.exe"); @@ -514,8 +513,8 @@ void CreateSetupExe() Utility.Retry(() => setPEVersionInfoAndIcon(targetSetupExe, new ZipPackage(package), setupIcon).Wait()); - if (signingOpts != null) { - signPEFile(targetSetupExe, signingOpts).Wait(); + if (signingParameters != null) { + signPEFile(targetSetupExe, signingParameters).Wait(); } } @@ -525,8 +524,8 @@ void GenerateMsi() this.Log().Debug("Generating .msi"); createMsiPackage(targetSetupExe, new ZipPackage(package)).Wait(); - if (signingOpts != null) { - signPEFile(targetSetupExe.Replace(".exe", ".msi"), signingOpts).Wait(); + if (signingParameters != null) { + signPEFile(targetSetupExe.Replace(".exe", ".msi"), signingParameters).Wait(); } } } From ed4714893f20098278bb3538848789fff4e2b98b Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Wed, 2 Jan 2019 17:20:41 +0000 Subject: [PATCH 8/9] Rearrange to reduce diff. --- src/Update/Program.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 130209b68..77efa635a 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -95,12 +95,12 @@ int executeCommandLine(string[] args) bool silentInstall = false; var updateAction = default(UpdateAction); - string processStart = default(string); - bool shouldWait = false; string releaseDir = default(string); - string icon = default(string); + string processStart = default(string); string processStartArgs = default(string); + string icon = default(string); string shortcutArgs = default(string); + bool shouldWait = false; opts = new OptionSet() { "Usage: Squirrel.exe command [OPTS]", From 06fc423fe73d6f5a497a0efb3bace823202545a0 Mon Sep 17 00:00:00 2001 From: Adam Morgan Date: Thu, 3 Jan 2019 09:39:55 +0000 Subject: [PATCH 9/9] Remove package instance variable. Use target instead. --- src/Update/Program.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Update/Program.cs b/src/Update/Program.cs index 77efa635a..137ff66d8 100644 --- a/src/Update/Program.cs +++ b/src/Update/Program.cs @@ -399,7 +399,6 @@ void ValidatePaths() } DirectoryInfo targetDirInfo; - string package; IEnumerable toProcess; List processed; string releaseFilePath; @@ -408,7 +407,7 @@ void PrepareFiles() { this.Log().Debug("Preparing Files"); targetDirInfo = new DirectoryInfo(targetDir); - File.Copy(package, Path.Combine(targetDirInfo.FullName, Path.GetFileName(package)), true); + File.Copy(target, Path.Combine(targetDirInfo.FullName, Path.GetFileName(target)), true); var allNuGetFiles = targetDirInfo.EnumerateFiles() .Where(x => x.Name.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase)); @@ -511,7 +510,7 @@ void CreateSetupExe() } Utility.Retry(() => - setPEVersionInfoAndIcon(targetSetupExe, new ZipPackage(package), setupIcon).Wait()); + setPEVersionInfoAndIcon(targetSetupExe, new ZipPackage(target), setupIcon).Wait()); if (signingParameters != null) { signPEFile(targetSetupExe, signingParameters).Wait(); @@ -522,7 +521,7 @@ void GenerateMsi() { if (!noMsi) { this.Log().Debug("Generating .msi"); - createMsiPackage(targetSetupExe, new ZipPackage(package)).Wait(); + createMsiPackage(targetSetupExe, new ZipPackage(target)).Wait(); if (signingParameters != null) { signPEFile(targetSetupExe.Replace(".exe", ".msi"), signingParameters).Wait();