From 86216744300f173f748a796f9422891c4349a0b1 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Thu, 2 Jul 2026 20:28:17 +1000 Subject: [PATCH 1/2] fix: sanitize labels correctly when using enviornment variables --- .../ConfigurationExtensionsTests.cs | 20 +++++++++++++++++++ .../Extensions/ConfigurationExtensions.cs | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs index 2c6b2fef35..e9998b1de5 100644 --- a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs @@ -143,4 +143,24 @@ public void EnsureGetBranchSpecificLabelThrowsWhenEnvVarMissing() Should.Throw(() => effectiveConfiguration.GetBranchSpecificLabel(ReferenceName.FromBranchName(BranchName), null, environment)); } + + [TestCase("case-00/my-branch", "case-00-my-branch")] + [TestCase("my-branch", "my-branch")] + [TestCase("my_branch/valid", "my-branch-valid")] + public void EnsureGetBranchSpecificLabelReturnsValidLabelForEnvironmentVariables(string variable, string expectedLabel) + { + var environment = new TestEnvironment(); + environment.SetEnvironmentVariable("GITHUB_HEAD_REF", variable); + + var configuration = GitFlowConfigurationBuilder.New + .WithoutBranches() + .WithBranch("feature/test-feature", builder => builder + .WithLabel("{env:GITHUB_HEAD_REF}") + .WithRegularExpression(@"^features?[\/-](?.+)")) + .Build(); + + var effectiveConfiguration = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("feature/test-feature")); + var actual = effectiveConfiguration.GetBranchSpecificLabel(ReferenceName.FromBranchName("feature/test-feature"), null, environment); + actual.ShouldBe(expectedLabel); + } } diff --git a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs index 97ffb4c88e..bd1c4436df 100644 --- a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs @@ -133,7 +133,8 @@ private static bool ShouldBeIgnored(ICommit commit, IIgnoreConfiguration ignore) var effectiveBranchName = branchNameOverride ?? branchName; var labelPlaceholders = BuildLabelPlaceholders(configuration.RegularExpression, effectiveBranchName); - return label.FormatWith(labelPlaceholders, environment); + return label.FormatWith(labelPlaceholders, environment) + .RegexReplace(RegexPatterns.SanitizeNameRegexPattern, "-"); } public TaggedSemanticVersions GetTaggedSemanticVersion() From ba1a7154a3a3e1b9da5e4aa30e5c19f37375b86b Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Thu, 2 Jul 2026 21:51:27 +1000 Subject: [PATCH 2/2] fix: allow period for label names --- src/GitVersion.Core/Core/RegexPatterns.cs | 3 +++ src/GitVersion.Core/Extensions/ConfigurationExtensions.cs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/GitVersion.Core/Core/RegexPatterns.cs b/src/GitVersion.Core/Core/RegexPatterns.cs index 79dc6da59f..f01b6e603e 100644 --- a/src/GitVersion.Core/Core/RegexPatterns.cs +++ b/src/GitVersion.Core/Core/RegexPatterns.cs @@ -34,6 +34,9 @@ internal static partial class RegexPatterns [StringSyntax(StringSyntaxAttribute.Regex, Options)] internal const string SanitizeNameRegexPattern = "[^a-zA-Z0-9-]"; + [StringSyntax(StringSyntaxAttribute.Regex, Options)] + internal const string SanitizeLabelRegexPattern = "[^a-zA-Z0-9-.]"; + #if NET9_0_OR_GREATER [GeneratedRegex(SwitchArgumentRegexPattern, Options)] public static partial Regex SwitchArgumentRegex { get; } diff --git a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs index bd1c4436df..3f4ac9a428 100644 --- a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs @@ -134,7 +134,7 @@ private static bool ShouldBeIgnored(ICommit commit, IIgnoreConfiguration ignore) var labelPlaceholders = BuildLabelPlaceholders(configuration.RegularExpression, effectiveBranchName); return label.FormatWith(labelPlaceholders, environment) - .RegexReplace(RegexPatterns.SanitizeNameRegexPattern, "-"); + .RegexReplace(RegexPatterns.SanitizeLabelRegexPattern, "-"); } public TaggedSemanticVersions GetTaggedSemanticVersion()