From 5b3eaee64976e2da5803ec22606851487ff3f061 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Mon, 1 Feb 2021 21:56:49 +0000 Subject: [PATCH 1/3] (GH-2456) Fix issue asserting tagged commit on CI Ensure that an increment of the version number only occurs when the sha of the commit is different from the base version sha. --- .../VersionCalculation/NextVersionCalculator.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs index a4d50b0589..7589b16c53 100644 --- a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs @@ -56,6 +56,7 @@ public SemanticVersion FindVersion() } var baseVersion = baseVersionCalculator.GetBaseVersion(); + baseVersion.SemanticVersion.BuildMetaData = mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource); SemanticVersion semver; if (context.Configuration.VersioningMode == VersioningMode.Mainline) { @@ -63,8 +64,15 @@ public SemanticVersion FindVersion() } else { - semver = PerformIncrement(baseVersion); - semver.BuildMetaData = mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource); + if (taggedSemanticVersion?.BuildMetaData == null || (taggedSemanticVersion.BuildMetaData.Sha != baseVersion.SemanticVersion.BuildMetaData.Sha)) + { + semver = PerformIncrement(baseVersion); + semver.BuildMetaData = mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource); + } + else + { + semver = baseVersion.SemanticVersion; + } } var hasPreReleaseTag = semver.PreReleaseTag.HasTag(); From c4f4bff56bd3daeb7aa6180790f9aeb3fc980701 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Sat, 6 Feb 2021 16:29:42 +0000 Subject: [PATCH 2/3] (GH-2456) Add test to cover code change Without the code change, this test fails with an incorrectly asserted version number, similar to 0.3.0-tags-01, when it should be 0.2.0. --- .../TagCheckoutInBuildAgentTests.cs | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs diff --git a/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs new file mode 100644 index 0000000000..6a1dbb9fca --- /dev/null +++ b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using GitTools.Testing; +using GitVersion.BuildAgents; +using GitVersion.Core.Tests.Helpers; +using LibGit2Sharp; +using NUnit.Framework; +using Shouldly; + +namespace GitVersion.App.Tests +{ + [TestFixture] + public class TagCheckoutInBuildAgentTests + { + [Test] + public async Task VerifyTagCheckoutOnGitHubActions() + { + var env = new Dictionary + { + { GitHubActions.EnvironmentVariableName, "true" }, + { "GITHUB_REF", "ref/tags/0.2.0" }, + }; + + using var fixture = new EmptyRepositoryFixture(); + var remoteRepositoryPath = PathHelper.GetTempPath(); + RepositoryFixtureBase.Init(remoteRepositoryPath); + using (var remoteRepository = new Repository(remoteRepositoryPath)) + { + remoteRepository.Config.Set("user.name", "Test"); + remoteRepository.Config.Set("user.email", "test@email.com"); + fixture.Repository.Network.Remotes.Add("origin", remoteRepositoryPath); + Console.WriteLine("Created git repository at {0}", remoteRepositoryPath); + remoteRepository.MakeATaggedCommit("0.1.0"); + Commands.Checkout(remoteRepository, remoteRepository.CreateBranch("develop")); + remoteRepository.MakeACommit(); + Commands.Checkout(remoteRepository, remoteRepository.CreateBranch("release/0.2.0")); + remoteRepository.MakeACommit(); + Commands.Checkout(remoteRepository, TestBase.MainBranch); + remoteRepository.MergeNoFF("release/0.2.0", Generate.SignatureNow()); + remoteRepository.MakeATaggedCommit("0.2.0"); + + Commands.Fetch((Repository)fixture.Repository, "origin", new string[0], new FetchOptions(), null); + Commands.Checkout(fixture.Repository, "0.2.0"); + } + + var programFixture = new ProgramFixture(fixture.RepositoryPath); + programFixture.WithEnv(env.ToArray()); + + var result = await programFixture.Run(); + + result.ExitCode.ShouldBe(0); + result.OutputVariables.FullSemVer.ShouldBe("0.2.0"); + + // Cleanup repository files + DirectoryHelper.DeleteDirectory(remoteRepositoryPath); + } + } +} From 4709e469b391149e63eccd48b44735b89759a651 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Sat, 6 Feb 2021 17:29:56 +0000 Subject: [PATCH 3/3] (GH-2456) Add additional test for Azure Pipelines Since this is where the original issue was reported. --- .../TagCheckoutInBuildAgentTests.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs index 6a1dbb9fca..ba9e2c6ace 100644 --- a/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs +++ b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs @@ -14,6 +14,18 @@ namespace GitVersion.App.Tests [TestFixture] public class TagCheckoutInBuildAgentTests { + [Test] + public async Task VerifyTagCheckoutOnAzurePipelines() + { + var env = new Dictionary + { + { AzurePipelines.EnvironmentVariableName, "true" }, + { "BUILD_SOURCEBRANCH", "refs/tags/0.2.0" }, + }; + + await VerifyTagCheckoutVersionIsCalculatedProperly(env); + } + [Test] public async Task VerifyTagCheckoutOnGitHubActions() { @@ -23,6 +35,11 @@ public async Task VerifyTagCheckoutOnGitHubActions() { "GITHUB_REF", "ref/tags/0.2.0" }, }; + await VerifyTagCheckoutVersionIsCalculatedProperly(env); + } + + private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionary env) + { using var fixture = new EmptyRepositoryFixture(); var remoteRepositoryPath = PathHelper.GetTempPath(); RepositoryFixtureBase.Init(remoteRepositoryPath);