diff --git a/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs b/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs index d14d9ec83c..c475922e48 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs +++ b/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs @@ -80,4 +80,43 @@ public void AzurePipelinesBuildNumberWithSemVer(string buildNumberFormat, string var logMessage = this.buildServer.GenerateSetVersionMessage(vars); logMessage.ShouldBe(logPrefix + expectedBuildNumber); } + + [Test] + public void GetCurrentBranchShouldHandleBranches() + { + // Arrange + this.environment.SetEnvironmentVariable("BUILD_SOURCEBRANCH", $"refs/heads/{MainBranch}"); + + // Act + var result = this.buildServer.GetCurrentBranch(false); + + // Assert + result.ShouldBe($"refs/heads/{MainBranch}"); + } + + [Test] + public void GetCurrentBranchShouldHandleTags() + { + // Arrange + this.environment.SetEnvironmentVariable("BUILD_SOURCEBRANCH", "refs/tags/1.0.0"); + + // Act + var result = this.buildServer.GetCurrentBranch(false); + + // Assert + result.ShouldBeNull(); + } + + [Test] + public void GetCurrentBranchShouldHandlePullRequests() + { + // Arrange + this.environment.SetEnvironmentVariable("BUILD_SOURCEBRANCH", "refs/pull/1/merge"); + + // Act + var result = this.buildServer.GetCurrentBranch(false); + + // Assert + result.ShouldBe("refs/pull/1/merge"); + } } diff --git a/src/GitVersion.Core/BuildAgents/AzurePipelines.cs b/src/GitVersion.Core/BuildAgents/AzurePipelines.cs index 30e08ee059..ca5eab0b24 100644 --- a/src/GitVersion.Core/BuildAgents/AzurePipelines.cs +++ b/src/GitVersion.Core/BuildAgents/AzurePipelines.cs @@ -21,7 +21,24 @@ public override string[] GenerateSetParameterMessage(string name, string value) $"##vso[task.setvariable variable=GitVersion.{name};isOutput=true]{value}" }; - public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("BUILD_SOURCEBRANCH"); + public override string? GetCurrentBranch(bool usingDynamicRepos) + { + var gitBranch = Environment.GetEnvironmentVariable("GIT_BRANCH"); + if (gitBranch is not null) + return gitBranch; + + var sourceBranch = Environment.GetEnvironmentVariable("BUILD_SOURCEBRANCH"); + + // https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml + // BUILD_SOURCEBRANCH must be used only for "real" branches, not for tags. + // Azure Pipelines sets BUILD_SOURCEBRANCH to refs/tags/ when the pipeline is triggered for a tag. + if (sourceBranch?.StartsWith("refs/tags", StringComparison.OrdinalIgnoreCase) == true) + { + return null; + } + + return sourceBranch; + } public override bool PreventFetch() => true;