コード例 #1
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing)
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     VersioningMode = versioningMode;
     GitTagPrefix = gitTagPrefix;
     Tag = tag;
     NextVersion = nextVersion;
     Increment = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget = trackMergeTarget;
     MajorVersionBumpMessage = majorVersionBumpMessage;
     MinorVersionBumpMessage = minorVersionBumpMessage;
     PatchVersionBumpMessage = patchVersionBumpMessage;
     CommitMessageIncrementing = commitMessageIncrementing;
 }
コード例 #2
0
        private void VerifyAssemblyInfoFile(
            string assemblyFileContent,
            string fileName,
            AssemblyVersioningScheme versioningScheme     = AssemblyVersioningScheme.MajorMinorPatch,
            Action <IFileSystem, VersionVariables> verify = null)
        {
            fileSystem = Substitute.For <IFileSystem>();
            var version = new SemanticVersion
            {
                BuildMetaData = new SemanticVersionBuildMetaData("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now, 0),
                Major         = 2,
                Minor         = 3,
                Patch         = 1
            };

            fileSystem.Exists(fileName).Returns(true);
            fileSystem.ReadAllText(fileName).Returns(assemblyFileContent);
            fileSystem.When(f => f.WriteAllText(fileName, Arg.Any <string>())).Do(c =>
            {
                assemblyFileContent = c.ArgAt <string>(1);
                fileSystem.ReadAllText(fileName).Returns(assemblyFileContent);
            });

            var config    = new TestEffectiveConfiguration(assemblyVersioningScheme: versioningScheme);
            var variables = variableProvider.GetVariablesFor(version, config, false);

            verify?.Invoke(fileSystem, variables);
        }
コード例 #3
0
        private static void VerifyAssemblyInfoFile(
            string assemblyFileContent,
            string fileName,
            AssemblyVersioningScheme versioningScheme            = AssemblyVersioningScheme.MajorMinorPatch,
            Action <Mock <IFileSystem>, VersionVariables> verify = null)
        {
            var version = new SemanticVersion
                          (
                major: 2,
                minor: 3,
                patch: 1,
                buildMetadata: new BuildMetadata(3, "foo", "hash", DateTimeOffset.Now)
                          );

            var fileSystem = new Mock <IFileSystem>();

            fileSystem.Setup(f => f.Exists(fileName))
            .Returns(true);

            fileSystem.Setup(f => f.ReadAllText(fileName))
            .Returns(assemblyFileContent);

            fileSystem.Setup(f => f.WriteAllText(fileName, It.IsAny <string>()))
            .Callback <string, string>((name, content) =>
            {
                fileSystem.Setup(f => f.ReadAllText(name))
                .Returns(content);
            });

            var config    = new TestEffectiveConfiguration(assemblyVersioningScheme: versioningScheme);
            var variables = version.ToVersionVariables(config);

            verify?.Invoke(fileSystem, variables);
        }
コード例 #4
0
        public void GetAssemblyVersionTest(AssemblyVersioningScheme scheme, int major, int minor, int patch, int tag, string versionString)
        {
            var semVer          = new SemanticVersion(major, minor, patch, preReleaseTag: new PreReleaseTag("Test", tag));
            var assemblyVersion = semVer.GetAssemblyVersion(scheme);

            Assert.That(assemblyVersion, Is.EqualTo(versionString));
        }
コード例 #5
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     AssemblyFileVersioningScheme assemblyFileVersioningScheme,
     string?assemblyInformationalFormat,
     string?assemblyVersioningFormat,
     string?assemblyFileVersioningFormat,
     VersioningMode versioningMode, string?gitTagPrefix,
     string?tag, string?nextVersion, IncrementStrategy increment,
     string?branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string?tagNumberPattern,
     string?continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string?majorVersionBumpMessage,
     string?minorVersionBumpMessage,
     string?patchVersionBumpMessage,
     string?noBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing,
     int legacySemVerPaddding,
     int buildMetaDataPadding,
     int commitsSinceVersionSourcePadding,
     IEnumerable <IVersionFilter> versionFilters,
     bool tracksReleaseBranches,
     bool isCurrentBranchRelease,
     string?commitDateFormat,
     bool updateBuildNumber,
     int preReleaseWeight,
     int tagPreReleaseWeight)
 {
     AssemblyVersioningScheme     = assemblyVersioningScheme;
     AssemblyFileVersioningScheme = assemblyFileVersioningScheme;
     AssemblyInformationalFormat  = assemblyInformationalFormat;
     AssemblyVersioningFormat     = assemblyVersioningFormat;
     AssemblyFileVersioningFormat = assemblyFileVersioningFormat;
     VersioningMode     = versioningMode;
     GitTagPrefix       = gitTagPrefix;
     Tag                = tag;
     NextVersion        = nextVersion;
     Increment          = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget                 = trackMergeTarget;
     MajorVersionBumpMessage          = majorVersionBumpMessage;
     MinorVersionBumpMessage          = minorVersionBumpMessage;
     PatchVersionBumpMessage          = patchVersionBumpMessage;
     NoBumpMessage                    = noBumpMessage;
     CommitMessageIncrementing        = commitMessageIncrementing;
     LegacySemVerPadding              = legacySemVerPaddding;
     BuildMetaDataPadding             = buildMetaDataPadding;
     CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding;
     VersionFilters                   = versionFilters;
     TracksReleaseBranches            = tracksReleaseBranches;
     IsCurrentBranchRelease           = isCurrentBranchRelease;
     CommitDateFormat                 = commitDateFormat;
     UpdateBuildNumber                = updateBuildNumber;
     PreReleaseWeight                 = preReleaseWeight;
     TagPreReleaseWeight              = tagPreReleaseWeight;
 }
コード例 #6
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs)
    {
        var semanticVersion = new SemanticVersion
        {
            Major         = 2,
            Minor         = 3,
            Patch         = 4,
            BuildMetaData = new SemanticVersionBuildMetaData(5,
                                                             "master",
                                                             new ReleaseDate
            {
                OriginalCommitSha = "originalCommitSha",
                OriginalDate      = DateTimeOffset.Parse("2014-03-01 00:00:01Z"),
                CommitSha         = "commitSha",
                Date = DateTimeOffset.Parse("2014-03-06 23:59:59Z")
            }),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder
        {
            SemanticVersion          = semanticVersion,
            AssemblyVersioningScheme = avs,
        };

        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText();

        Approvals.Verify(assemblyInfoText);
        var syntaxTree  = SyntaxTree.ParseText(assemblyInfoText);
        var references  = new[] { new MetadataFileReference(typeof(object).Assembly.Location), };
        var compilation = Compilation.Create("Greeter.dll", new CompilationOptions(OutputKind.NetModule), new[] { syntaxTree }, references);
        var emitResult  = compilation.Emit(new MemoryStream());

        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Info)));
    }
コード例 #7
0
        public static AssemblyMetaData Process(
            SemanticVersion sv,
            AssemblyVersioningScheme scheme,
            bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion)
        {
            var    fileVersion = GetStrictAssemblyFileVersion(sv, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);
            string version;

            switch (scheme)
            {
            case AssemblyVersioningScheme.None:
                version = "1.0.0.0";
                break;

            case AssemblyVersioningScheme.Major:
                version = string.Format("{0}.0.0.0", sv.Major);
                break;

            case AssemblyVersioningScheme.MajorMinorPatch:
                version = GetStrictAssemblyFileVersion(sv, false);
                break;

            default:
                throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
            }

            return(new AssemblyMetaData(version, fileVersion));
        }
コード例 #8
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs, string assemblyInformationalFormat = null)
    {
        var semanticVersion = new SemanticVersion
        {
            Major         = 2,
            Minor         = 3,
            Patch         = 4,
            PreReleaseTag = "beta.5",
            BuildMetaData = new SemanticVersionBuildMetaData(6,
                                                             "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder();


        var config = new TestEffectiveConfiguration(assemblyVersioningScheme: avs, assemblyInformationalFormat: assemblyInformationalFormat);

        var versionVariables = VariableProvider.GetVariablesFor(semanticVersion, config, false);
        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText(versionVariables, "Fake");

        Approvals.Verify(assemblyInfoText);

        var compilation = CSharpCompilation.Create("Fake.dll")
                          .WithOptions(new CSharpCompilationOptions(OutputKind.NetModule))
                          .AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
                          .AddSyntaxTrees(CSharpSyntaxTree.ParseText(assemblyInfoText));

        var emitResult = compilation.Emit(new MemoryStream());

        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }
コード例 #9
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
     AssemblyInformationalVersioningScheme assemblyInformationalVersioningScheme = AssemblyInformationalVersioningScheme.FullInformationalVersion,
     VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
     string gitTagPrefix           = "v",
     string tag                = "",
     string nextVersion        = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false,
     string majorMessage   = null,
     string minorMessage   = null,
     string patchMessage   = null,
     CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
     int legacySemVerPadding  = 4,
     int buildMetaDataPadding = 4) :
     base(assemblyVersioningScheme, assemblyInformationalVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
          branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
          trackMergeTarget,
          majorMessage, minorMessage, patchMessage,
          commitMessageMode, legacySemVerPadding, buildMetaDataPadding)
 {
 }
コード例 #10
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs)
    {
        var semanticVersion = new SemanticVersion
        {
            Major = 2,
            Minor = 3,
            Patch = 4,
            BuildMetaData = new SemanticVersionBuildMetaData(5,
                "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder
        {
            CachedVersion = new CachedVersion
            {
                SemanticVersion = semanticVersion
            },
        };

        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText(new TestEffectiveConfiguration(assemblyVersioningScheme: avs));
        Approvals.Verify(assemblyInfoText);

        var compilation = CSharpCompilation.Create("Fake.dll")
        .WithOptions(new CSharpCompilationOptions(OutputKind.NetModule))
        .AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
        .AddSyntaxTrees(CSharpSyntaxTree.ParseText(assemblyInfoText));

        var emitResult = compilation.Emit(new MemoryStream());
        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }
コード例 #11
0
        public void AssemblyVersion(
            int major, int minor, int patch, string buildMetadata,
            AssemblyVersioningScheme versioningScheme, bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion,
            string version, string fileVersion)
        {
            var semVer = new SemanticVersion
            {
                Major = major,
                Minor = minor,
                Patch = patch,
                BuildMetaData = buildMetadata
            };

            semVer.BuildMetaData.ReleaseDate = new ReleaseDate
                            {
                                OriginalCommitSha = "originalCommitSha",
                                OriginalDate = DateTimeOffset.Parse("2014-03-01 00:00:01Z"),
                                CommitSha = "commitSha",
                                Date = DateTimeOffset.Parse("2014-03-06 23:59:59Z")
                            };

            var vars = VariableProvider.GetVariablesFor(semVer, versioningScheme, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);

            vars[VariableProvider.AssemblyVersion].ShouldBe(version);
            vars[VariableProvider.AssemblyFileVersion].ShouldBe(fileVersion);
        }
コード例 #12
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme         = AssemblyVersioningScheme.MajorMinorPatch,
     AssemblyFileVersioningScheme assemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
     string?assemblyVersioningFormat     = null,
     string?assemblyFileVersioningFormat = null,
     string?assemblyInformationalFormat  = null,
     VersioningMode versioningMode       = VersioningMode.ContinuousDelivery,
     string gitTagPrefix       = "v",
     string tag                = "",
     string?nextVersion        = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string?tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false,
     string?majorMessage   = null,
     string?minorMessage   = null,
     string?patchMessage   = null,
     string?noBumpMessage  = null,
     CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
     int legacySemVerPadding                     = 4,
     int buildMetaDataPadding                    = 4,
     int commitsSinceVersionSourcePadding        = 4,
     IEnumerable <IVersionFilter>?versionFilters = null,
     bool tracksReleaseBranches                  = false,
     bool isRelease          = false,
     string commitDateFormat = "yyyy-MM-dd",
     bool updateBuildNumber  = false) :
     base(assemblyVersioningScheme,
          assemblyFileVersioningScheme,
          assemblyInformationalFormat,
          assemblyVersioningFormat,
          assemblyFileVersioningFormat,
          versioningMode,
          gitTagPrefix,
          tag,
          nextVersion,
          IncrementStrategy.Patch,
          branchPrefixToTrim,
          preventIncrementForMergedBranchVersion,
          tagNumberPattern,
          continuousDeploymentFallbackTag,
          trackMergeTarget,
          majorMessage,
          minorMessage,
          patchMessage,
          noBumpMessage,
          commitMessageMode,
          legacySemVerPadding,
          buildMetaDataPadding,
          commitsSinceVersionSourcePadding,
          versionFilters ?? Enumerable.Empty <IVersionFilter>(),
          tracksReleaseBranches,
          isRelease,
          commitDateFormat,
          updateBuildNumber,
          0,
          0)
 {
 }
コード例 #13
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing)
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     VersioningMode           = versioningMode;
     GitTagPrefix             = gitTagPrefix;
     Tag                = tag;
     NextVersion        = nextVersion;
     Increment          = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget          = trackMergeTarget;
     MajorVersionBumpMessage   = majorVersionBumpMessage;
     MinorVersionBumpMessage   = minorVersionBumpMessage;
     PatchVersionBumpMessage   = patchVersionBumpMessage;
     CommitMessageIncrementing = commitMessageIncrementing;
 }
コード例 #14
0
        public static string GetAssemblyVersion(
            this SemanticVersion sv,
            AssemblyVersioningScheme scheme)
        {
            switch (scheme)
            {
            case AssemblyVersioningScheme.Major:
                return($"{sv.Major}.0.0.0");

            case AssemblyVersioningScheme.MajorMinor:
                return($"{sv.Major}.{sv.Minor}.0.0");

            case AssemblyVersioningScheme.MajorMinorPatch:
                return($"{sv.Major}.{sv.Minor}.{sv.Patch}.0");

            case AssemblyVersioningScheme.MajorMinorPatchTag:
                return($"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag.Number ?? 0}");

            case AssemblyVersioningScheme.None:
                return(null);

            default:
                throw new ArgumentException($"Unexpected value ({scheme}).", nameof(scheme));
            }
        }
コード例 #15
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs)
    {
        var semanticVersion = new SemanticVersion
        {
            Major         = 2,
            Minor         = 3,
            Patch         = 4,
            BuildMetaData = new SemanticVersionBuildMetaData(5,
                                                             "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder
        {
            CachedVersion = new CachedVersion
            {
                SemanticVersion   = semanticVersion,
                MasterReleaseDate = DateTimeOffset.Parse("2014-03-01 00:00:01Z")
            },
        };

        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText(new Config {
            AssemblyVersioningScheme = avs
        });

        Approvals.Verify(assemblyInfoText);

        var compilation = CSharpCompilation.Create("Fake.dll")
                          .WithOptions(new CSharpCompilationOptions(OutputKind.NetModule))
                          .AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
                          .AddSyntaxTrees(CSharpSyntaxTree.ParseText(assemblyInfoText));

        var emitResult = compilation.Emit(new MemoryStream());

        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }
コード例 #16
0
        public void AssemblyVersion(
            int major, int minor, int patch, string buildMetadata,
            AssemblyVersioningScheme versioningScheme, bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion,
            string version, string fileVersion)
        {
            var semVer = new SemanticVersion
            {
                Major         = major,
                Minor         = minor,
                Patch         = patch,
                BuildMetaData = buildMetadata
            };

            semVer.BuildMetaData.ReleaseDate = new ReleaseDate
            {
                OriginalCommitSha = "originalCommitSha",
                OriginalDate      = DateTimeOffset.Parse("2014-03-01 00:00:01Z"),
                CommitSha         = "commitSha",
                Date = DateTimeOffset.Parse("2014-03-06 23:59:59Z")
            };

            var vars = VariableProvider.GetVariablesFor(semVer, versioningScheme, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);

            vars[VariableProvider.AssemblyVersion].ShouldBe(version);
            vars[VariableProvider.AssemblyFileVersion].ShouldBe(fileVersion);
        }
コード例 #17
0
    static void VerifyAssemblyVersion(ICompiler compiler, AssemblyVersioningScheme avs, string assemblyInformationalFormat = null)
    {
        var semanticVersion = new SemanticVersion
        {
            Major         = 2,
            Minor         = 3,
            Patch         = 4,
            PreReleaseTag = "beta.5",
            BuildMetaData = new SemanticVersionBuildMetaData(6,
                                                             "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };

        var config = new TestEffectiveConfiguration(assemblyVersioningScheme: avs, assemblyInformationalFormat: assemblyInformationalFormat);

        var versionVariables = VariableProvider.GetVariablesFor(semanticVersion, config, false);
        var assemblyInfoText = compiler.Builder.GetAssemblyInfoText(versionVariables, "Fake");

        assemblyInfoText.ShouldMatchApproved(c => c.UseCallerLocation().SubFolder(compiler.ApprovedSubFolder));

        var compilation = compiler.Compile(assemblyInfoText);

        var emitResult = compilation.Emit(new MemoryStream());

        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }
コード例 #18
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs)
    {
        var semanticVersion = new SemanticVersion
        {
            Major = 2,
            Minor = 3,
            Patch = 4,
            BuildMetaData = new SemanticVersionBuildMetaData(5,
                "master",
                new ReleaseDate
                {
                    OriginalCommitSha = "originalCommitSha",
                    OriginalDate = DateTimeOffset.Parse("2014-03-01 00:00:01Z"),
                    CommitSha = "commitSha",
                    Date = DateTimeOffset.Parse("2014-03-06 23:59:59Z")
                }),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder
        {
            SemanticVersion = semanticVersion,
            AssemblyVersioningScheme = avs,
        };

        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText();
        Approvals.Verify(assemblyInfoText);
        var syntaxTree = SyntaxTree.ParseText(assemblyInfoText);
        var references = new[] { new MetadataFileReference(typeof(object).Assembly.Location), };
        var compilation = Compilation.Create("Greeter.dll", new CompilationOptions(OutputKind.NetModule), new[] { syntaxTree }, references);
        var emitResult = compilation.Emit(new MemoryStream());
        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Info)));
    }
コード例 #19
0
        public static AssemblyMetaData Process(
            SemanticVersion sv,
            AssemblyVersioningScheme scheme,
            bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion)
        {
            var fileVersion = GetStrictAssemblyFileVersion(sv, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);
            string version;

            switch (scheme)
            {
                case AssemblyVersioningScheme.None:
                    version = "1.0.0.0";
                    break;

                case AssemblyVersioningScheme.Major:
                    version = string.Format("{0}.0.0.0", sv.Major);
                    break;

                case AssemblyVersioningScheme.MajorMinor:
                    version = string.Format("{0}.{1}.0.0", sv.Major, sv.Minor);
                    break;

                case AssemblyVersioningScheme.MajorMinorPatch:
                    version = GetStrictAssemblyFileVersion(sv, false);
                    break;

                default:
                    throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
            }

            return new AssemblyMetaData(version, fileVersion);
        }
コード例 #20
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch, 
     string assemblyInformationalFormat = null,
     VersioningMode versioningMode = VersioningMode.ContinuousDelivery, 
     string gitTagPrefix = "v", 
     string tag = "",
     string nextVersion = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false,
     string majorMessage = null,
     string minorMessage = null,
     string patchMessage = null,
     CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
     int legacySemVerPadding = 4,
     int buildMetaDataPadding = 4,
     int commitsSinceVersionSourcePadding = 4) : 
         base(assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, 
             branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
             trackMergeTarget,
             majorMessage, minorMessage, patchMessage,
             commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding)
 {
 }
コード例 #21
0
        public static string GetAssemblyVersion(
            this SemanticVersion sv,
            AssemblyVersioningScheme scheme)
        {
            switch (scheme)
            {
            case AssemblyVersioningScheme.Major:
                return(string.Format("{0}.0.0.0", sv.Major));

            case AssemblyVersioningScheme.MajorMinor:
                return(string.Format("{0}.{1}.0.0", sv.Major, sv.Minor));

            case AssemblyVersioningScheme.MajorMinorPatch:
                return(string.Format("{0}.{1}.{2}.0", sv.Major, sv.Minor, sv.Patch));

            case AssemblyVersioningScheme.MajorMinorPatchTag:
                return(string.Format("{0}.{1}.{2}.{3}", sv.Major, sv.Minor, sv.Patch, sv.PreReleaseTag.Number ?? 0));

            case AssemblyVersioningScheme.None:
                return(null);

            default:
                throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
            }
        }
コード例 #22
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme         = AssemblyVersioningScheme.MajorMinorPatch,
     AssemblyFileVersioningScheme assemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
     string assemblyInformationalFormat = null,
     VersioningMode versioningMode      = VersioningMode.ContinuousDelivery,
     string tagPrefix          = "v",
     string tag                = "",
     string nextVersion        = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false,
     string majorMessage   = null,
     string minorMessage   = null,
     string patchMessage   = null,
     string noBumpMessage  = null,
     CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
     int buildMetaDataPadding                    = 4,
     int commitsSinceVersionSourcePadding        = 4,
     IEnumerable <IVersionFilter> versionFilters = null,
     bool tracksReleaseBranches                  = false,
     bool isRelease          = false,
     string commitDateFormat = "yyyy-MM-dd",
     int taggedCommitsLimit  = 10) :
     base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, versioningMode, tagPrefix, tag, nextVersion, IncrementStrategyType.Patch,
          branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
          trackMergeTarget,
          majorMessage, minorMessage, patchMessage, noBumpMessage,
          commitMessageMode, buildMetaDataPadding, commitsSinceVersionSourcePadding,
          versionFilters ?? Enumerable.Empty <IVersionFilter>(),
          tracksReleaseBranches, isRelease, commitDateFormat,
          GetDefaultBaseVersionStrategies(), taggedCommitsLimit)
 {
 }
コード例 #23
0
 public static string GetAssemblyVersion(this SemanticVersion sv, AssemblyVersioningScheme scheme)
 {
     return(scheme switch
     {
         AssemblyVersioningScheme.Major => $"{sv.Major}.0.0.0",
         AssemblyVersioningScheme.MajorMinor => $"{sv.Major}.{sv.Minor}.0.0",
         AssemblyVersioningScheme.MajorMinorPatch => $"{sv.Major}.{sv.Minor}.{sv.Patch}.0",
         AssemblyVersioningScheme.MajorMinorPatchTag => $"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag.Number ?? 0}",
         AssemblyVersioningScheme.None => null,
         _ => throw new ArgumentException($"Unexpected value ({scheme}).", nameof(scheme))
     });
コード例 #24
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     AssemblyFileVersioningScheme assemblyFileVersioningScheme,
     string assemblyInformationalFormat,
     VersioningMode versioningMode, string tagPrefix,
     string tag, string nextVersion, IncrementStrategyType increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     string noBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing,
     int buildMetaDataPadding,
     int commitsSinceVersionSourcePadding,
     IEnumerable <IVersionFilter> versionFilters,
     bool tracksReleaseBranches,
     bool isCurrentBranchRelease,
     string commitDateFormat,
     IEnumerable <IBaseVersionStrategy> baseVersionStrategies,
     int taggedCommitsLimit)
 {
     AssemblyVersioningScheme     = assemblyVersioningScheme;
     AssemblyFileVersioningScheme = assemblyFileVersioningScheme;
     AssemblyInformationalFormat  = assemblyInformationalFormat;
     VersioningMode     = versioningMode;
     TagPrefix          = tagPrefix;
     Tag                = tag;
     NextVersion        = nextVersion;
     Increment          = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget                 = trackMergeTarget;
     MajorVersionBumpMessage          = majorVersionBumpMessage;
     MinorVersionBumpMessage          = minorVersionBumpMessage;
     PatchVersionBumpMessage          = patchVersionBumpMessage;
     NoBumpMessage                    = noBumpMessage;
     CommitMessageIncrementing        = commitMessageIncrementing;
     BuildMetaDataPadding             = buildMetaDataPadding;
     CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding;
     VersionFilters                   = versionFilters;
     TracksReleaseBranches            = tracksReleaseBranches;
     IsCurrentBranchRelease           = isCurrentBranchRelease;
     CommitDateFormat                 = commitDateFormat;
     BaseVersionStrategies            = baseVersionStrategies;
     TaggedCommitsLimit               = taggedCommitsLimit;
 }
コード例 #25
0
        void CreateTempAssemblyInfo(SemanticVersion semanticVersion, AssemblyVersioningScheme avs)
        {
            var assemblyInfoBuilder = new AssemblyInfoBuilder
            {
                SemanticVersion          = semanticVersion,
                AssemblyVersioningScheme = avs,
                AppendRevision           = AppendRevision
            };
            var assemblyInfo = assemblyInfoBuilder.GetAssemblyInfoText();

            var tempFileName = string.Format("AssemblyInfo_{0}_{1}.g.cs", Path.GetFileNameWithoutExtension(ProjectFile), Path.GetRandomFileName());

            AssemblyInfoTempFilePath = Path.Combine(TempFileTracker.TempPath, tempFileName);
            File.WriteAllText(AssemblyInfoTempFilePath, assemblyInfo);
        }
コード例 #26
0
 public static string GetAssemblyFileVersion(
     this SemanticVersion sv,
     AssemblyVersioningScheme scheme)
 {
     switch (scheme)
     {
         case AssemblyVersioningScheme.Major:
         case AssemblyVersioningScheme.MajorMinor:
         case AssemblyVersioningScheme.MajorMinorPatch:
             return string.Format("{0}.{1}.{2}.0", sv.Major, sv.Minor, sv.Patch);
         case AssemblyVersioningScheme.MajorMinorPatchMetadata:
             return string.Format("{0}.{1}.{2}.{3}", sv.Major, sv.Minor, sv.Patch, sv.BuildMetaData.CommitsSinceTag ?? 0);
         default:
             throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
     }
 }
コード例 #27
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
     VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
     string gitTagPrefix           = "v",
     string tag                = "",
     string nextVersion        = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false) :
     base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
          branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
          trackMergeTarget)
 {
 }
コード例 #28
0
 public TestEffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
     VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
     string gitTagPrefix = "v",
     string tag = "",
     string nextVersion = null,
     string branchPrefixToTrim = "",
     bool preventIncrementForMergedBranchVersion = false,
     string tagNumberPattern = null,
     string continuousDeploymentFallbackTag = "ci",
     bool trackMergeTarget = false)
     : base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, 
             branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
             trackMergeTarget)
 {
 }
コード例 #29
0
        public static Dictionary <string, string> GetVariablesFor(
            SemanticVersion semanticVersion,
            AssemblyVersioningScheme assemblyVersioningScheme          = AssemblyVersioningScheme.MajorMinorPatch,
            bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion = true)
        {
            var bmd       = semanticVersion.BuildMetaData;
            var formatter = bmd.Branch == "develop" ? new CiFeedFormatter() : null;

            var assemblyMetaData = AssemblyVersionsGenerator.Process(
                semanticVersion, assemblyVersioningScheme, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);

            var variables = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase)
            {
                { Major, semanticVersion.Major.ToString() },
                { Minor, semanticVersion.Minor.ToString() },
                { Patch, semanticVersion.Patch.ToString() },
                { PreReleaseTag, semanticVersion.PreReleaseTag },
                { PreReleaseTagWithDash, semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null },
                { BuildMetaData, bmd },
                { FullBuildMetaData, bmd.ToString("f") },
                { MajorMinorPatch, string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch) },
                { SemVer, semanticVersion.ToString(null, formatter) },
                { LegacySemVer, semanticVersion.ToString("l", formatter) },
                { LegacySemVerPadded, semanticVersion.ToString("lp", formatter) },
                { AssemblySemVer, semanticVersion.ToString("j") + ".0" },
                { FullSemVer, semanticVersion.ToString("f", formatter) },
                { InformationalVersion, semanticVersion.ToString("i", formatter) },
                { ClassicVersion, string.Format("{0}.{1}", semanticVersion.ToString("j"), (bmd.CommitsSinceTag ?? 0)) },
                { ClassicVersionWithTag, string.Format("{0}.{1}{2}", semanticVersion.ToString("j"),
                                                       bmd.CommitsSinceTag ?? 0,
                                                       semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null) },
                { BranchName, bmd.Branch },
                { Sha, bmd.Sha },
                { AssemblyVersion, assemblyMetaData.Version },
                { AssemblyFileVersion, assemblyMetaData.FileVersion },
                { OriginalRelease, string.Format("{0}.{1}",
                                                 bmd.ReleaseDate.OriginalCommitSha,
                                                 bmd.ReleaseDate.OriginalDate.UtcDateTime.ToString("u")) },
            };

            // Use ToLower() to fix a bug where Beta and beta are different in NuGet
            variables[NuGetVersionV2] = variables[LegacySemVerPadded].ToLower();
            //variables[NuGetVersionV3] = variables[LegacySemVerPadded].ToLower(); // TODO: when v3 is released, determine what to use
            variables[NuGetVersion] = variables[NuGetVersionV2];

            return(variables);
        }
コード例 #30
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     string assemblyInformationalFormat,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     string noBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing,
     int legacySemVerPaddding,
     int buildMetaDataPadding,
     int commitsSinceVersionSourcePadding,
     IEnumerable<IVersionFilter> versionFilters,
     bool isCurrentBranchDevelop,
     bool isCurrentBranchRelease)
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     AssemblyInformationalFormat = assemblyInformationalFormat;
     VersioningMode = versioningMode;
     GitTagPrefix = gitTagPrefix;
     Tag = tag;
     NextVersion = nextVersion;
     Increment = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget = trackMergeTarget;
     MajorVersionBumpMessage = majorVersionBumpMessage;
     MinorVersionBumpMessage = minorVersionBumpMessage;
     PatchVersionBumpMessage = patchVersionBumpMessage;
     NoBumpMessage = noBumpMessage;
     CommitMessageIncrementing = commitMessageIncrementing;
     LegacySemVerPadding = legacySemVerPaddding;
     BuildMetaDataPadding = buildMetaDataPadding;
     CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding;
     VersionFilters = versionFilters;
     IsCurrentBranchDevelop = isCurrentBranchDevelop;
     IsCurrentBranchRelease = isCurrentBranchRelease;
 }
コード例 #31
0
        private static void VerifyAssemblyInfoFile(
            string assemblyFileContent,
            string assemblyInfoFile,
            AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
            Action <string> verify = null)
        {
            var workingDir = Path.GetTempPath();
            var fileName   = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, versioningScheme, (mock, variables) =>
            {
                using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFile, workingDir, variables, mock.Object, false))
                {
                    assemblyInfoFileUpdater.Update();
                    verify?.Invoke(mock.Object.ReadAllText(fileName));
                }
            });
        }
コード例 #32
0
        public static string GetAssemblyFileVersion(
            this SemanticVersion sv,
            AssemblyVersioningScheme scheme)
        {
            switch (scheme)
            {
            case AssemblyVersioningScheme.Major:
            case AssemblyVersioningScheme.MajorMinor:
            case AssemblyVersioningScheme.MajorMinorPatch:
                return(string.Format("{0}.{1}.{2}.0", sv.Major, sv.Minor, sv.Patch));

            case AssemblyVersioningScheme.MajorMinorPatchMetadata:
                return(string.Format("{0}.{1}.{2}.{3}", sv.Major, sv.Minor, sv.Patch, sv.BuildMetaData.CommitsSinceTag ?? 0));

            default:
                throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
            }
        }
コード例 #33
0
 public static string GetAssemblyVersion(
     this SemanticVersion sv,
     AssemblyVersioningScheme scheme)
 {
     switch (scheme)
     {
         case AssemblyVersioningScheme.Major:
             return string.Format("{0}.0.0.0", sv.Major);
         case AssemblyVersioningScheme.MajorMinor:
             return string.Format("{0}.{1}.0.0", sv.Major, sv.Minor);
         case AssemblyVersioningScheme.MajorMinorPatch:
             return string.Format("{0}.{1}.{2}.0", sv.Major, sv.Minor, sv.Patch);
         case AssemblyVersioningScheme.MajorMinorPatchTag:
             return string.Format("{0}.{1}.{2}.{3}", sv.Major, sv.Minor, sv.Patch, sv.PreReleaseTag.Number ?? 0);
         default:
             throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
     }
 }
コード例 #34
0
        public static Dictionary<string, string> GetVariablesFor(
            SemanticVersion semanticVersion,
            AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
            bool addNumberOfCommitsSinceTagOnMasterBranchToFileVersion = true)
        {
            var bmd = semanticVersion.BuildMetaData;
            var formatter = bmd.Branch == "develop" ? new CiFeedFormatter() : null;

            var assemblyMetaData = AssemblyVersionsGenerator.Process(
                semanticVersion, assemblyVersioningScheme, addNumberOfCommitsSinceTagOnMasterBranchToFileVersion);

            var variables = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
            {
                {Major, semanticVersion.Major.ToString()},
                {Minor, semanticVersion.Minor.ToString()},
                {Patch, semanticVersion.Patch.ToString()},
                {PreReleaseTag, semanticVersion.PreReleaseTag},
                {PreReleaseTagWithDash, semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null},
                {BuildMetaData, bmd},
                {FullBuildMetaData, bmd.ToString("f")},
                {MajorMinorPatch, string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch)},
                {SemVer, semanticVersion.ToString(null, formatter)},
                {LegacySemVer, semanticVersion.ToString("l", formatter)},
                {LegacySemVerPadded, semanticVersion.ToString("lp", formatter)},
                {AssemblySemVer, semanticVersion.ToString("j") + ".0"},
                {FullSemVer, semanticVersion.ToString("f", formatter)},
                {InformationalVersion, semanticVersion.ToString("i", formatter)},
                {ClassicVersion, string.Format("{0}.{1}", semanticVersion.ToString("j"), (bmd.CommitsSinceTag ?? 0))},
                {ClassicVersionWithTag, string.Format("{0}.{1}{2}", semanticVersion.ToString("j"),
                    bmd.CommitsSinceTag ?? 0,
                    semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null)},
                {BranchName, bmd.Branch},
                {Sha, bmd.Sha},
                {AssemblyVersion, assemblyMetaData.Version},
                {AssemblyFileVersion, assemblyMetaData.FileVersion},
                {OriginalRelease, string.Format("{0}.{1}",
                    bmd.ReleaseDate.OriginalCommitSha,
                    bmd.ReleaseDate.OriginalDate.UtcDateTime.ToString("u"))},
            };

            return variables;
        }
コード例 #35
0
        public static VersionVariables GetVariablesFor(
            SemanticVersion semanticVersion, AssemblyVersioningScheme assemblyVersioningScheme,
            VersioningMode mode, string continuousDeploymentFallbackTag,
            bool currentCommitIsTagged)
        {
            var bmd = semanticVersion.BuildMetaData;

            if (mode == VersioningMode.ContinuousDeployment && !currentCommitIsTagged)
            {
                semanticVersion = new SemanticVersion(semanticVersion);
                // Continuous Delivery always requires a pre-release tag unless the commit is tagged
                if (!semanticVersion.PreReleaseTag.HasTag())
                {
                    semanticVersion.PreReleaseTag.Name = continuousDeploymentFallbackTag;
                }

                // For continuous deployment the commits since tag gets promoted to the pre-release number
                semanticVersion.PreReleaseTag.Number          = semanticVersion.BuildMetaData.CommitsSinceTag;
                semanticVersion.BuildMetaData.CommitsSinceTag = null;
            }

            var variables = new VersionVariables(
                major: semanticVersion.Major.ToString(),
                minor: semanticVersion.Minor.ToString(),
                patch: semanticVersion.Patch.ToString(),
                preReleaseTag: semanticVersion.PreReleaseTag,
                preReleaseTagWithDash: semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null,
                buildMetaData: bmd,
                fullBuildMetaData: bmd.ToString("f"),
                majorMinorPatch: string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch),
                semVer: semanticVersion.ToString(),
                legacySemVer: semanticVersion.ToString("l"),
                legacySemVerPadded: semanticVersion.ToString("lp"),
                assemblySemVer: semanticVersion.GetAssemblyVersion(assemblyVersioningScheme),
                fullSemVer: semanticVersion.ToString("f"),
                informationalVersion: semanticVersion.ToString("i"),
                branchName: bmd.Branch,
                sha: bmd.Sha,
                commitDate: bmd.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"));

            return(variables);
        }
コード例 #36
0
        private static void VerifyAssemblyInfoFile(
            string assemblyFileContent,
            string assemblyInfoFile,
            AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
            Expression <Func <string, bool> > match   = null)
        {
            var workingDir = Path.GetTempPath();
            var fileName   = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, versioningScheme, (mock, variables) =>
            {
                using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFile, workingDir, variables, mock.Object, false))
                {
                    assemblyInfoFileUpdater.Update();

                    mock.Verify(f => f.WriteAllText(fileName, It.Is(match)),
                                Times.Once());
                }
            });
        }
コード例 #37
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     string assemblyInformationalFormat,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing,
     int legacySemVerPaddding,
     int buildMetaDataPadding,
     int commitsSinceVersionSourcePadding,
     IEnumerable <IVersionFilter> versionFilters
     )
 {
     AssemblyVersioningScheme    = assemblyVersioningScheme;
     AssemblyInformationalFormat = assemblyInformationalFormat;
     VersioningMode     = versioningMode;
     GitTagPrefix       = gitTagPrefix;
     Tag                = tag;
     NextVersion        = nextVersion;
     Increment          = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget                 = trackMergeTarget;
     MajorVersionBumpMessage          = majorVersionBumpMessage;
     MinorVersionBumpMessage          = minorVersionBumpMessage;
     PatchVersionBumpMessage          = patchVersionBumpMessage;
     CommitMessageIncrementing        = commitMessageIncrementing;
     LegacySemVerPadding              = legacySemVerPaddding;
     BuildMetaDataPadding             = buildMetaDataPadding;
     CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding;
     VersionFilters = versionFilters;
 }
コード例 #38
0
        public static VersionVariables GetVariablesFor(
            SemanticVersion semanticVersion, AssemblyVersioningScheme assemblyVersioningScheme,
            VersioningMode mode, string continuousDeploymentFallbackTag,
            bool currentCommitIsTagged)
        {
            var bmd = semanticVersion.BuildMetaData;
            if (mode == VersioningMode.ContinuousDeployment && !currentCommitIsTagged)
            {
                semanticVersion = new SemanticVersion(semanticVersion);
                // Continuous Deployment always requires a pre-release tag unless the commit is tagged
                if (!semanticVersion.PreReleaseTag.HasTag())
                {
                    semanticVersion.PreReleaseTag.Name = continuousDeploymentFallbackTag;
                }

                // For continuous deployment the commits since tag gets promoted to the pre-release number
                semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag;
                semanticVersion.BuildMetaData.CommitsSinceTag = null;
            }

            var variables = new VersionVariables(
                major: semanticVersion.Major.ToString(),
                minor: semanticVersion.Minor.ToString(),
                patch: semanticVersion.Patch.ToString(),
                preReleaseTag: semanticVersion.PreReleaseTag,
                preReleaseTagWithDash: semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null,
                buildMetaData: bmd,
                fullBuildMetaData: bmd.ToString("f"),
                majorMinorPatch: string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch),
                semVer: semanticVersion.ToString(),
                legacySemVer: semanticVersion.ToString("l"),
                legacySemVerPadded: semanticVersion.ToString("lp"),
                assemblySemVer: semanticVersion.GetAssemblyVersion(assemblyVersioningScheme),
                fullSemVer: semanticVersion.ToString("f"),
                informationalVersion: semanticVersion.ToString("i"),
                branchName: bmd.Branch,
                sha: bmd.Sha,
                commitDate: bmd.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"));

            return variables;
        }
コード例 #39
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget)
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     VersioningMode           = versioningMode;
     GitTagPrefix             = gitTagPrefix;
     Tag                = tag;
     NextVersion        = nextVersion;
     Increment          = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget = trackMergeTarget;
 }
コード例 #40
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     string assemblyInformationalFormat,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     bool disableMergeMessageStrategy,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget,
     string majorVersionBumpMessage,
     string minorVersionBumpMessage,
     string patchVersionBumpMessage,
     CommitMessageIncrementMode commitMessageIncrementing,
     int legacySemVerPaddding,
     int buildMetaDataPadding
     )
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     AssemblyInformationalFormat = assemblyInformationalFormat;
     VersioningMode = versioningMode;
     GitTagPrefix = gitTagPrefix;
     Tag = tag;
     NextVersion = nextVersion;
     Increment = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     DisableMergeMessageStrategy = disableMergeMessageStrategy;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget = trackMergeTarget;
     MajorVersionBumpMessage = majorVersionBumpMessage;
     MinorVersionBumpMessage = minorVersionBumpMessage;
     PatchVersionBumpMessage = patchVersionBumpMessage;
     CommitMessageIncrementing = commitMessageIncrementing;
     LegacySemVerPadding = legacySemVerPaddding;
     BuildMetaDataPadding = buildMetaDataPadding;
 }
コード例 #41
0
 public EffectiveConfiguration(
     AssemblyVersioningScheme assemblyVersioningScheme,
     VersioningMode versioningMode, string gitTagPrefix,
     string tag, string nextVersion, IncrementStrategy increment,
     string branchPrefixToTrim,
     bool preventIncrementForMergedBranchVersion,
     string tagNumberPattern,
     string continuousDeploymentFallbackTag,
     bool trackMergeTarget)
 {
     AssemblyVersioningScheme = assemblyVersioningScheme;
     VersioningMode = versioningMode;
     GitTagPrefix = gitTagPrefix;
     Tag = tag;
     NextVersion = nextVersion;
     Increment = increment;
     BranchPrefixToTrim = branchPrefixToTrim;
     PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
     TagNumberPattern = tagNumberPattern;
     ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
     TrackMergeTarget = trackMergeTarget;
 }
コード例 #42
0
    static void VerifyAssemblyVersion(AssemblyVersioningScheme avs)
    {
        var semanticVersion = new SemanticVersion
        {
            Major = 2,
            Minor = 3,
            Patch = 4,
            PreReleaseTag = "beta.5",
            BuildMetaData = new SemanticVersionBuildMetaData(6,
                "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };
        var assemblyInfoBuilder = new AssemblyInfoBuilder();
        var versionVariables = VariableProvider.GetVariablesFor(semanticVersion, avs, VersioningMode.ContinuousDelivery, "ci", false);
        var assemblyInfoText = assemblyInfoBuilder.GetAssemblyInfoText(versionVariables);
        Approvals.Verify(assemblyInfoText);

        var compilation = CSharpCompilation.Create("Fake.dll")
        .WithOptions(new CSharpCompilationOptions(OutputKind.NetModule))
        .AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
        .AddSyntaxTrees(CSharpSyntaxTree.ParseText(assemblyInfoText));

        var emitResult = compilation.Emit(new MemoryStream());
        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }
コード例 #43
0
    private static void VerifyAssemblyInfoFile(
        string assemblyFileContent,
        string fileName,
        AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
        Action<IFileSystem, VersionVariables> verify = null)
    {
        var fileSystem = Substitute.For<IFileSystem>();
        var version = new SemanticVersion
        {
            BuildMetaData = new SemanticVersionBuildMetaData(3, "foo", "hash", DateTimeOffset.Now),
            Major = 2,
            Minor = 3,
            Patch = 1
        };

        fileSystem.Exists(fileName).Returns(true);
        fileSystem.ReadAllText(fileName).Returns(assemblyFileContent);
        fileSystem.When(f => f.WriteAllText(fileName, Arg.Any<string>())).Do(c =>
        {
            assemblyFileContent = c.ArgAt<string>(1);
            fileSystem.ReadAllText(fileName).Returns(assemblyFileContent);
        });

        var config = new TestEffectiveConfiguration(assemblyVersioningScheme: versioningScheme);
        var variables = VariableProvider.GetVariablesFor(version, config, false);

        verify(fileSystem, variables);
    }
コード例 #44
0
 public static string?GetAssemblyVersion(this SemanticVersion sv, AssemblyVersioningScheme scheme) =>
 scheme switch
 {
コード例 #45
0
        void CreateTempAssemblyInfo(SemanticVersion semanticVersion, AssemblyVersioningScheme avs)
        {
            var assemblyInfoBuilder = new AssemblyInfoBuilder
                                      {
                                          SemanticVersion = semanticVersion,
                                          AssemblyVersioningScheme = avs,
                                          AppendRevision = AppendRevision
                                      };
            var assemblyInfo = assemblyInfoBuilder.GetAssemblyInfoText();

            var tempFileName = string.Format("AssemblyInfo_{0}_{1}.g.cs", Path.GetFileNameWithoutExtension(ProjectFile), Path.GetRandomFileName());
            AssemblyInfoTempFilePath = Path.Combine(TempFileTracker.TempPath, tempFileName);
            File.WriteAllText(AssemblyInfoTempFilePath, assemblyInfo);
        }
コード例 #46
0
    static void VerifyAssemblyVersion(ICompiler compiler, AssemblyVersioningScheme avs, string assemblyInformationalFormat = null)
    {
        var semanticVersion = new SemanticVersion
        {
            Major = 2,
            Minor = 3,
            Patch = 4,
            PreReleaseTag = "beta.5",
            BuildMetaData = new SemanticVersionBuildMetaData(6,
                "master", "commitSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")),
        };

        var config = new TestEffectiveConfiguration(assemblyVersioningScheme: avs, assemblyInformationalFormat: assemblyInformationalFormat);

        var versionVariables = VariableProvider.GetVariablesFor(semanticVersion, config, false);
        var assemblyInfoText = compiler.Builder.GetAssemblyInfoText(versionVariables, "Fake");
        assemblyInfoText.ShouldMatchApproved(c => c.UseCallerLocation().SubFolder(compiler.ApprovedSubFolder));

        var compilation = compiler.Compile(assemblyInfoText);

        var emitResult = compilation.Emit(new MemoryStream());
        Assert.IsTrue(emitResult.Success, string.Join(Environment.NewLine, emitResult.Diagnostics.Select(x => x.Descriptor)));
    }