From 81a44aee91dabe6ddcc0b70c47f8ec6c2e9ba9e6 Mon Sep 17 00:00:00 2001 From: Kevin Bost Date: Mon, 13 Jan 2025 22:19:47 -0800 Subject: [PATCH] Adding --signExclude parameter This allows the caller to specify a regex pattern to exclude files. When specified the default filter no longer applies --- src/vpk/Velopack.Build/PackTask.cs | 2 +- src/vpk/Velopack.Build/Velopack.Build.targets | 2 +- .../Commands/WindowsPackCommandRunner.cs | 4 +++- .../Commands/WindowsSigningOptions.cs | 2 +- .../Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs | 7 ++++--- .../Commands/WindowsCommandTests.cs | 6 +++--- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/vpk/Velopack.Build/PackTask.cs b/src/vpk/Velopack.Build/PackTask.cs index 30a590a6..27c6c974 100644 --- a/src/vpk/Velopack.Build/PackTask.cs +++ b/src/vpk/Velopack.Build/PackTask.cs @@ -82,7 +82,7 @@ public class PackTask : MSBuildAsyncTask public string? SignParameters { get; set; } public string? AzureTrustedSignFile { get; set; } - public bool SignSkipDll { get; set; } + public string? SignExclude { get; set; } public int SignParallel { get; set; } = 10; diff --git a/src/vpk/Velopack.Build/Velopack.Build.targets b/src/vpk/Velopack.Build/Velopack.Build.targets index c34e50f5..e732d79d 100644 --- a/src/vpk/Velopack.Build/Velopack.Build.targets +++ b/src/vpk/Velopack.Build/Velopack.Build.targets @@ -86,7 +86,7 @@ SplashImage="$(VelopackSplashImage)" SkipVelopackAppCheck="$(VelopackSkipVelopackAppCheck)" SignParameters="$(VelopackSignParameters)" - SignSkipDll="$(VelopackSignSkipDll)" + SignExclude="$(VelopackSignExclude)" SignParallel="$(VelopackSignParallel)" SignTemplate="$(VelopackSignTemplate)" Categories="$(VelopackCategories)" diff --git a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs index 5e6b32e3..e910f11f 100644 --- a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs +++ b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs @@ -1,4 +1,5 @@ using System.Runtime.Versioning; +using System.Text.RegularExpressions; using Microsoft.Extensions.Logging; using Velopack.Compression; using Velopack.Core; @@ -18,8 +19,9 @@ public class WindowsPackCommandRunner : PackageBuilder protected override Task CodeSign(Action progress, string packDir) { + Regex fileExcludeRegex = Options.SignExclude != null ? new Regex(Options.SignExclude) : null; var filesToSign = new DirectoryInfo(packDir).GetAllFilesRecursively() - .Where(x => Options.SignSkipDll ? PathUtil.PathPartEndsWith(x.Name, ".exe") : PathUtil.FileIsLikelyPEImage(x.Name)) + .Where(x => !fileExcludeRegex?.IsMatch(x.FullName) ?? PathUtil.FileIsLikelyPEImage(x.Name)) .Select(x => x.FullName) .ToArray(); diff --git a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsSigningOptions.cs b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsSigningOptions.cs index 8bcd4584..6f7f02ea 100644 --- a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsSigningOptions.cs +++ b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsSigningOptions.cs @@ -4,7 +4,7 @@ public class WindowsSigningOptions { public string SignParameters { get; set; } - public bool SignSkipDll { get; set; } + public string SignExclude { get; set; } public int SignParallel { get; set; } diff --git a/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs b/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs index 03354982..bd8e55bc 100644 --- a/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs +++ b/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs @@ -10,11 +10,12 @@ public class WindowsPackCommand : PackCommand public string SignParameters { get; private set; } - public bool SignSkipDll { get; private set; } + public string SignExclude { get; private set; } public int SignParallel { get; private set; } public string SignTemplate { get; private set; } + public string AzureTrustedSignFile { get; private set; } public string Shortcuts { get; private set; } @@ -42,8 +43,8 @@ public class WindowsPackCommand : PackCommand .SetDescription("Use a custom signing command. {{file}} will be substituted.") .SetArgumentHelpName("COMMAND"); - AddOption((v) => SignSkipDll = v, "--signSkipDll") - .SetDescription("Only signs EXE files, and skips signing DLL files.") + AddOption((v) => SignExclude = v, "--signExclude") + .SetDescription("A regex which excludes matched files from signing.") .SetHidden(); AddOption((v) => SignParallel = v, "--signParallel") diff --git a/test/Velopack.CommandLine.Tests/Commands/WindowsCommandTests.cs b/test/Velopack.CommandLine.Tests/Commands/WindowsCommandTests.cs index 1e1146a5..7792a126 100644 --- a/test/Velopack.CommandLine.Tests/Commands/WindowsCommandTests.cs +++ b/test/Velopack.CommandLine.Tests/Commands/WindowsCommandTests.cs @@ -265,14 +265,14 @@ public class PackWindowsCommandTests : ReleaseCommandTests } [WindowsOnlyFact] - public void SignSkipDll_BareOption_SetsFlag() + public void SignExclude_WithPattern_SetsOption() { var command = new WindowsPackCommand(); - string cli = GetRequiredDefaultOptions() + "--signSkipDll"; + string cli = GetRequiredDefaultOptions() + @"--signExclude \.dll$"; ParseResult parseResult = command.ParseAndApply(cli); - Assert.True(command.SignSkipDll); + Assert.Equal(@"\.dll$", command.SignExclude); } [WindowsOnlyFact]