public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommitsSinceVersionSourceShouldNotGoDownWhenMergingReleaseToDevelop()
        {
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDeployment,
                Branches       = new Dictionary <string, BranchConfig>
                {
                    { "develop", new BranchConfig {
                          PreventIncrementOfMergedBranchVersion = false
                      } },
                }
            };

            using var fixture = new EmptyRepositoryFixture();
            const string ReleaseBranch = "release/1.1.0";

            fixture.MakeACommit();
            fixture.BranchTo("develop");
            fixture.MakeATaggedCommit("1.0.0");
            fixture.Repository.MakeCommits(1);

            // Create a release branch and make some commits
            fixture.BranchTo(ReleaseBranch);
            fixture.Repository.MakeCommits(3);

            // Simulate a GitFlow release finish.
            fixture.Checkout("master");
            fixture.MergeNoFF(ReleaseBranch);
            fixture.ApplyTag("v1.1.0");
            fixture.Checkout("develop");
            // Simulate some work done on develop while the release branch was open.
            fixture.Repository.MakeCommits(2);
            fixture.MergeNoFF(ReleaseBranch);

            // Version numbers will still be correct when the release branch is around.
            fixture.AssertFullSemver("1.2.0-alpha.6");
            fixture.AssertFullSemver("1.2.0-alpha.6", config);

            var versionSourceBeforeReleaseBranchIsRemoved = fixture.GetVersion(config).Sha;

            fixture.Repository.Branches.Remove(ReleaseBranch);
            var versionSourceAfterReleaseBranchIsRemoved = fixture.GetVersion(config).Sha;

            Assert.AreEqual(versionSourceBeforeReleaseBranchIsRemoved, versionSourceAfterReleaseBranchIsRemoved);
            fixture.AssertFullSemver("1.2.0-alpha.6");
            fixture.AssertFullSemver("1.2.0-alpha.6", config);

            config.Branches = new Dictionary <string, BranchConfig>
            {
                { "develop", new BranchConfig {
                      PreventIncrementOfMergedBranchVersion = true
                  } },
            };
            fixture.AssertFullSemver("1.2.0-alpha.3", config);
        }
        public void AssemblySemFileVerShouldBeWeightedByPreReleaseWeight()
        {
            var config = new ConfigurationBuilder()
                         .Add(new Config
            {
                AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
                Branches =
                {
                    {
                        "release", new BranchConfig
                        {
                            PreReleaseWeight = 1000
                        }
                    }
                }
            })
                         .Build();

            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeATaggedCommit("1.0.3");
            fixture.Repository.MakeCommits(5);
            fixture.Repository.CreateBranch("release-2.0.0");
            fixture.Checkout("release-2.0.0");

            var variables = fixture.GetVersion(config);

            Assert.AreEqual(variables.AssemblySemFileVer, "2.0.0.1001");
        }
示例#3
0
    public void ShouldUseTagsAsVersionSourceWhenPossible()
    {
        using var fixture = new EmptyRepositoryFixture();
        fixture.Repository.MakeATaggedCommit("0.1.0");
        fixture.Checkout(MainBranch);
        fixture.Repository.CreateBranch("develop");
        fixture.Checkout("develop");
        fixture.MakeACommit("Feature commit 1");
        fixture.BranchTo("release/0.2.0");
        fixture.MakeACommit("Release commit 1");
        fixture.Checkout(MainBranch);
        fixture.MergeNoFF("release/0.2.0");
        fixture.ApplyTag("0.2.0");

        var tag = fixture.Repository.Head.Tip;

        fixture.Checkout("develop");
        fixture.MergeNoFF(MainBranch);

        fixture.AssertFullSemver("0.3.0-alpha.1");

        var version = fixture.GetVersion();

        version.VersionSourceSha.ShouldBeEquivalentTo(tag.Sha);
    }
示例#4
0
        public void NoDirtyFlagInCleanRepository()
        {
            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeACommit();

            var version = fixture.GetVersion();
            var zero    = 0;

            version.UncommittedChanges.ShouldBe(zero.ToString(CultureInfo.InvariantCulture));
        }
        public void CanTakePreReleaseVersionFromReleasesBranchWithNumericPreReleaseTag()
        {
            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeCommits(5);
            fixture.Repository.CreateBranch("releases/2.0.0");
            fixture.Checkout("releases/2.0.0");
            fixture.Repository.ApplyTag("v2.0.0-1");

            var variables = fixture.GetVersion();

            Assert.AreEqual("2.0.0-1", variables.FullSemVer);
        }
        public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight()
        {
            var config = new Config
            {
                AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
            };

            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeATaggedCommit("1.0.3");
            fixture.Repository.MakeCommits(5);
            fixture.Repository.CreateBranch("release-2.0.0");
            fixture.Checkout("release-2.0.0");
            config.Reset();
            var variables = fixture.GetVersion(config);

            Assert.AreEqual(variables.AssemblySemFileVer, "2.0.0.30001");
        }
        public void ShouldNotGetVersionFromFeatureBranchIfNotMerged()
        {
            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeATaggedCommit("1.0.0-unstable.0"); // initial commit in main

            fixture.Repository.CreateBranch("feature");
            Commands.Checkout(fixture.Repository, "feature");
            fixture.Repository.MakeATaggedCommit("1.0.1-feature.1");

            Commands.Checkout(fixture.Repository, MainBranch);
            fixture.Repository.CreateBranch("develop");
            Commands.Checkout(fixture.Repository, "develop");
            fixture.Repository.MakeACommit();

            var version = fixture.GetVersion();

            version.SemVer.ShouldBe("1.0.0-alpha.1");
        }
        public void GitHubFlowMajorRelease()
        {
            using var fixture = new EmptyRepositoryFixture();
            fixture.SequenceDiagram.Participant("master");

            fixture.Repository.MakeACommit();
            fixture.ApplyTag("1.3.0");

            // Create release branch
            fixture.BranchTo("release/2.0.0", "release");
            fixture.SequenceDiagram.Activate("release/2.0.0");
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.1+1");
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.1+2");

            // Apply beta.1 tag should be exact tag
            fixture.ApplyTag("2.0.0-beta.1");
            fixture.AssertFullSemver("2.0.0-beta.1");

            // test that the CommitsSinceVersionSource should still return commit count
            var version = fixture.GetVersion();

            version.CommitsSinceVersionSource.ShouldBe("2");

            // Make a commit after a tag should bump up the beta
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.2+3");

            // Complete release
            fixture.Checkout("master");
            fixture.MergeNoFF("release/2.0.0");
            fixture.SequenceDiagram.Destroy("release/2.0.0");
            fixture.SequenceDiagram.NoteOver("Release branches are deleted once merged", "release/2.0.0");

            fixture.AssertFullSemver("2.0.0+0");
            fixture.ApplyTag("2.0.0");
            fixture.AssertFullSemver("2.0.0");
            fixture.MakeACommit();
            var fixtureRepository = new GitRepository(fixture.Repository);

            fixtureRepository.DumpGraph();
            fixture.AssertFullSemver("2.0.1+1");
        }
示例#9
0
    public void ShouldNotGetVersionFromFeatureBranchIfNotMerged()
    {
        using (var fixture = new EmptyRepositoryFixture())
        {
            fixture.Repository.MakeATaggedCommit("1.0.0-unstable.0"); // initial commit in master

            fixture.Repository.CreateBranch("feature");
            fixture.Repository.Checkout("feature");
            fixture.Repository.MakeATaggedCommit("1.0.1-feature.1");

            fixture.Repository.Checkout("master");
            fixture.Repository.CreateBranch("develop");
            fixture.Repository.Checkout("develop");
            fixture.Repository.MakeACommit();

            var version = fixture.GetVersion();
            version.SemVer.ShouldBe("1.0.0-unstable.1");
        }
    }
示例#10
0
        public void HasDirtyFlagWhenUncommittedChangesAreInRepo(bool stageFile, int numberOfFiles)
        {
            using var fixture = new EmptyRepositoryFixture();
            fixture.Repository.MakeACommit();

            for (int i = 0; i < numberOfFiles; i++)
            {
                var tempFile = Path.GetTempFileName();
                var repoFile = Path.Combine(fixture.RepositoryPath, Path.GetFileNameWithoutExtension(tempFile) + ".txt");
                File.Move(tempFile, repoFile);
                File.WriteAllText(repoFile, $"Hello world / testfile {i}");

                if (stageFile)
                {
                    Commands.Stage(fixture.Repository, repoFile);
                }
            }

            var version = fixture.GetVersion();

            version.UncommittedChanges.ShouldBe(numberOfFiles.ToString(CultureInfo.InvariantCulture));
        }
示例#11
0
    public void GitHubFlowMajorRelease()
    {
        using (var fixture = new EmptyRepositoryFixture())
        {
            fixture.SequenceDiagram.Participant("master");

            fixture.Repository.MakeACommit();
            fixture.ApplyTag("1.3.0");

            // Create release branch
            fixture.BranchTo("release/2.0.0", "release");
            fixture.SequenceDiagram.Activate("release/2.0.0");
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.1+1");
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.1+2");

            // Apply beta.1 tag should be exact tag
            fixture.ApplyTag("2.0.0-beta.1");
            fixture.AssertFullSemver("2.0.0-beta.1");

            // test that the CommitsSinceVersionSource should still return commit count
            var version = fixture.GetVersion(new Config());
            version.CommitsSinceVersionSource.ShouldBe("2");

            // Make a commit after a tag should bump up the beta
            fixture.MakeACommit();
            fixture.AssertFullSemver("2.0.0-beta.2+3");

            // Complete release
            fixture.Checkout("master");
            fixture.MergeNoFF("release/2.0.0");
            fixture.SequenceDiagram.Destroy("release/2.0.0");
            fixture.SequenceDiagram.NoteOver("Release branches are deleted once merged", "release/2.0.0");

            fixture.AssertFullSemver("2.0.0+0");
            fixture.ApplyTag("2.0.0");
            fixture.AssertFullSemver("2.0.0");
            fixture.MakeACommit();
            fixture.Repository.DumpGraph();
            fixture.AssertFullSemver("2.0.1+1");
        }
    }