diff --git a/src/GitVersion.Core/Core/RegexPatterns.cs b/src/GitVersion.Core/Core/RegexPatterns.cs index 57d805fdab..9bdb704808 100644 --- a/src/GitVersion.Core/Core/RegexPatterns.cs +++ b/src/GitVersion.Core/Core/RegexPatterns.cs @@ -29,6 +29,7 @@ public static Regex GetOrAdd([StringSyntax(StringSyntaxAttribute.Regex)] string [Common.SwitchArgumentRegexPattern] = Common.SwitchArgumentRegex, [Common.ObscurePasswordRegexPattern] = Common.ObscurePasswordRegex, [Common.ExpandTokensRegexPattern] = Common.ExpandTokensRegex, + [Common.SanitizeNameRegexPattern] = Common.SanitizeNameRegex, [Configuration.DefaultTagPrefixRegexPattern] = Configuration.DefaultTagPrefixRegex, [Configuration.DefaultVersionInBranchRegexPattern] = Configuration.DefaultVersionInBranchRegex, [Configuration.MainBranchRegexPattern] = Configuration.MainBranchRegex, @@ -50,6 +51,7 @@ public static Regex GetOrAdd([StringSyntax(StringSyntaxAttribute.Regex)] string [Output.AssemblyVersionRegexPattern] = Output.AssemblyVersionRegex, [Output.AssemblyInfoVersionRegexPattern] = Output.AssemblyInfoVersionRegex, [Output.AssemblyFileVersionRegexPattern] = Output.AssemblyFileVersionRegex, + [Output.SanitizeAssemblyInfoRegexPattern] = Output.SanitizeAssemblyInfoRegex, [Output.CsharpAssemblyAttributeRegexPattern] = Output.CsharpAssemblyAttributeRegex, [Output.FsharpAssemblyAttributeRegexPattern] = Output.FsharpAssemblyAttributeRegex, [Output.VisualBasicAssemblyAttributeRegexPattern] = Output.VisualBasicAssemblyAttributeRegex, @@ -84,6 +86,9 @@ internal static partial class Common [StringSyntax(StringSyntaxAttribute.Regex)] internal const string ExpandTokensRegexPattern = """{((env:(?\w+))|(?\w+))(\s+(\?\?)??\s+((?\w+)|"(?.*)"))??}"""; + [StringSyntax(StringSyntaxAttribute.Regex, Options)] + internal const string SanitizeNameRegexPattern = "[^a-zA-Z0-9-]"; + [GeneratedRegex(SwitchArgumentRegexPattern, Options)] public static partial Regex SwitchArgumentRegex(); @@ -92,6 +97,9 @@ internal static partial class Common [GeneratedRegex(ExpandTokensRegexPattern, Options)] public static partial Regex ExpandTokensRegex(); + + [GeneratedRegex(SanitizeNameRegexPattern, Options)] + public static partial Regex SanitizeNameRegex(); } internal static partial class Configuration @@ -231,6 +239,9 @@ internal static partial class Output [StringSyntax(StringSyntaxAttribute.Regex)] internal const string SanitizeParticipantRegexPattern = "[^a-zA-Z0-9]"; + [StringSyntax(StringSyntaxAttribute.Regex)] + internal const string SanitizeAssemblyInfoRegexPattern = "[^0-9A-Za-z-.+]"; + [GeneratedRegex(AssemblyVersionRegexPattern, Options)] public static partial Regex AssemblyVersionRegex(); @@ -251,6 +262,9 @@ internal static partial class Output [GeneratedRegex(SanitizeParticipantRegexPattern, Options)] public static partial Regex SanitizeParticipantRegex(); + + [GeneratedRegex(SanitizeAssemblyInfoRegexPattern, RegexOptions.IgnorePatternWhitespace | Options)] + public static partial Regex SanitizeAssemblyInfoRegex(); } internal static partial class VersionCalculation diff --git a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs index 6f794c91d1..20d51dbdcc 100644 --- a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs @@ -110,7 +110,7 @@ public static bool IsReleaseBranch(this IGitVersionConfiguration configuration, return label; } - private static string EscapeInvalidCharacters(string groupValue) => groupValue.RegexReplace("[^a-zA-Z0-9-]", "-"); + private static string EscapeInvalidCharacters(string groupValue) => groupValue.RegexReplace(RegexPatterns.Common.SanitizeNameRegexPattern, "-"); public static (string GitDirectory, string WorkingTreeDirectory)? FindGitDir(this IFileSystem fileSystem, string? path) { diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs index 1da7195708..64913a061c 100644 --- a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs +++ b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs @@ -1,5 +1,6 @@ using System.Globalization; using GitVersion.Configuration; +using GitVersion.Core; using GitVersion.Extensions; namespace GitVersion; @@ -41,7 +42,7 @@ public class SemanticVersionFormatValues(SemanticVersion semver, IGitVersionConf public string? BranchName => semver.BuildMetaData.Branch; - public string? EscapedBranchName => semver.BuildMetaData.Branch?.RegexReplace("[^a-zA-Z0-9-]", "-"); + public string? EscapedBranchName => semver.BuildMetaData.Branch?.RegexReplace(RegexPatterns.Common.SanitizeNameRegexPattern, "-"); public string? Sha => semver.BuildMetaData.Sha; diff --git a/src/GitVersion.Core/VersionCalculation/VariableProvider.cs b/src/GitVersion.Core/VersionCalculation/VariableProvider.cs index 0cb26fa7a7..0e677163a2 100644 --- a/src/GitVersion.Core/VersionCalculation/VariableProvider.cs +++ b/src/GitVersion.Core/VersionCalculation/VariableProvider.cs @@ -1,4 +1,5 @@ using GitVersion.Configuration; +using GitVersion.Core; using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.OutputVariables; @@ -79,7 +80,8 @@ public GitVersionVariables GetVariablesFor( { try { - formattedString = formatString.FormatWith(source, this.environment).RegexReplace("[^0-9A-Za-z-.+]", "-"); + formattedString = formatString.FormatWith(source, this.environment) + .RegexReplace(RegexPatterns.Output.SanitizeAssemblyInfoRegexPattern, "-"); } catch (ArgumentException exception) {