diff --git a/CHANGELOG.md b/CHANGELOG.md index 9aa6b63..ae00e06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Update `GetToolInstallationPath` to use user temp folder. - Update `TestRunUtil` icons to circle with color. - Update `AzureSignToolUtils` sign to ignore exception. +- Update `AzureSignToolUtils` to ignore if file is already signed. ### Example - Add `Resource` and `Resource.pt-BR` to test sign files. ### Tests diff --git a/Directory.Build.props b/Directory.Build.props index 762838f..9012c01 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,5 @@ - 1.9.0-beta.2 + 1.9.0-beta.3 \ No newline at end of file diff --git a/ricaun.Nuke/Extensions/NuGetExtension.cs b/ricaun.Nuke/Extensions/NuGetExtension.cs index dd3945e..3d40d82 100644 --- a/ricaun.Nuke/Extensions/NuGetExtension.cs +++ b/ricaun.Nuke/Extensions/NuGetExtension.cs @@ -46,6 +46,21 @@ public static NugetVersionInfo Parse(string packageFileName) /// public static class NuGetExtension { + /// + /// NuGetFileExtension (.nupkg) + /// + public const string NuGetFileExtension = ".nupkg"; + + /// + /// Check if file has NuGet extension (.nupkg) + /// + /// + /// + public static bool IsNuGetFile(string filePath) + { + return Path.GetExtension(filePath).Equals(NuGetFileExtension, StringComparison.InvariantCultureIgnoreCase); + } + /// /// TryGetPackageNameAndVersion /// diff --git a/ricaun.Nuke/Extensions/SignExtension.cs b/ricaun.Nuke/Extensions/SignExtension.cs index c3701bd..7d605f1 100644 --- a/ricaun.Nuke/Extensions/SignExtension.cs +++ b/ricaun.Nuke/Extensions/SignExtension.cs @@ -81,7 +81,7 @@ public static bool CreateCerFile(string fileNamePfx, string passwordPfx, string /// NuGet files use . public static void Sign(string certPath, string certPassword, string filePath) { - if (Path.GetExtension(filePath) == ".nupkg") + if (NuGetExtension.IsNuGetFile(filePath)) { SignNuGet(certPath, certPassword, filePath); return; @@ -167,20 +167,20 @@ public static void SignNuGet(string certPath, string certPassword, string binary } /// - /// Has Signature + /// Has Signature in the file or NuGet /// - /// + /// /// - static bool HasSignature(string fileInfo) + public static bool HasSignature(string filePath) { - if (fileInfo.EndsWith(".nupkg")) + if (NuGetExtension.IsNuGetFile(filePath)) { - return NuGetExtension.NuGetVerifySignatures(fileInfo); + return NuGetExtension.NuGetVerifySignatures(filePath); } try { - System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromSignedFile(fileInfo); + System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromSignedFile(filePath); return true; } catch diff --git a/ricaun.Nuke/Tools/AzureSignToolUtils.cs b/ricaun.Nuke/Tools/AzureSignToolUtils.cs index f7a059f..eeb8eb8 100644 --- a/ricaun.Nuke/Tools/AzureSignToolUtils.cs +++ b/ricaun.Nuke/Tools/AzureSignToolUtils.cs @@ -9,6 +9,7 @@ using Nuke.Common.Tools.DotNet; using Nuke.Common.IO; using Nuke.Common.Tooling; +using ricaun.Nuke.Extensions; namespace ricaun.Nuke.Tools { @@ -19,7 +20,6 @@ public class AzureSignToolUtils { private const string TimestampUrlDefault = "http://timestamp.digicert.com"; private const string TimestampDigestDefault = "sha256"; - private const string NugetPackageExtension = ".nupkg"; /// /// Ensures that Azure Sign Tool and NuGet Key Vault Sign Tool are installed. @@ -112,23 +112,26 @@ public static void DownloadNuGetKeyVaultSignTool() /// /// Signs the specified file using Azure Sign Tool or NuGet Key Vault Sign Tool. /// - /// The name of the file to sign. + /// The name of the file to sign. /// The Azure Key Vault configuration. /// The Azure Key Vault client secret. /// The default timestamp URL. /// The default timestamp digest. - public static void Sign(string fileName, + public static void Sign(string filePath, AzureKeyVaultConfig azureKeyVaultConfig, string azureKeyVaultClientSecret, string timestampUrlDefault = TimestampUrlDefault, string timestampDigestDefault = TimestampDigestDefault) { try { - if (Path.GetExtension(fileName) == NugetPackageExtension) + if (SignExtension.HasSignature(filePath)) + return; + + if (NuGetExtension.IsNuGetFile(filePath)) { DownloadNuGetKeyVaultSignTool(); NuGetKeyVaultSignToolTasks.NuGetKeyVaultSignTool(x => x - .SetFile(fileName) + .SetFile(filePath) .SetKeyVaultCertificateName(azureKeyVaultConfig.AzureKeyVaultCertificate) .SetKeyVaultUrl(azureKeyVaultConfig.AzureKeyVaultUrl) .SetKeyVaultClientId(azureKeyVaultConfig.AzureKeyVaultClientId) @@ -142,7 +145,7 @@ public static void Sign(string fileName, DownloadAzureSignTool(); AzureSignToolTasks.AzureSignTool(x => x - .SetFiles(fileName) + .SetFiles(filePath) .SetKeyVaultCertificateName(azureKeyVaultConfig.AzureKeyVaultCertificate) .SetKeyVaultUrl(azureKeyVaultConfig.AzureKeyVaultUrl) .SetKeyVaultClientId(azureKeyVaultConfig.AzureKeyVaultClientId) @@ -154,7 +157,7 @@ public static void Sign(string fileName, } catch (Exception ex) { - Serilog.Log.Error($"Azure Sign Error: {Path.GetFileName(fileName)} - {ex.Message}"); + Serilog.Log.Error($"Azure Sign Error: {Path.GetFileName(filePath)} - {ex.Message}"); Serilog.Log.Information(ex.ToString()); } }