public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged) { if (config.VersioningMode == VersioningMode.ContinuousDeployment && !isCurrentCommitTagged) { semanticVersion = new SemanticVersion(semanticVersion); // Continuous Deployment always requires a pre-release tag unless the commit is tagged if (!semanticVersion.PreReleaseTag.HasTag()) { semanticVersion.PreReleaseTag.Name = config.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 semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); string informationalVersion; if (string.IsNullOrEmpty(config.AssemblyInformationalFormat)) { informationalVersion = semverFormatValues.DefaultInformationalVersion; } else { try { informationalVersion = config.AssemblyInformationalFormat.FormatWith(semverFormatValues); } catch (FormatException formex) { throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message)); } } var variables = new VersionVariables( semverFormatValues.Major, semverFormatValues.Minor, semverFormatValues.Patch, semverFormatValues.BuildMetaData, semverFormatValues.BuildMetaDataPadded, semverFormatValues.FullBuildMetaData, semverFormatValues.BranchName, semverFormatValues.Sha, semverFormatValues.MajorMinorPatch, semverFormatValues.SemVer, semverFormatValues.LegacySemVer, semverFormatValues.LegacySemVerPadded, semverFormatValues.FullSemVer, semverFormatValues.AssemblySemVer, semverFormatValues.PreReleaseTag, semverFormatValues.PreReleaseTagWithDash, informationalVersion, semverFormatValues.CommitDate, semverFormatValues.NuGetVersion, semverFormatValues.NuGetVersionV2); return variables; }
void CalculateEffectiveConfiguration() { var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, configuration, CurrentBranch); if (!currentBranchConfig.Value.VersioningMode.HasValue) { throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.Increment.HasValue) { throw new Exception(string.Format("Configuration value for 'Increment' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.HasValue) { throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.TrackMergeTarget.HasValue) { throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!configuration.AssemblyVersioningScheme.HasValue) { throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); } if (!configuration.CommitMessageIncrementing.HasValue) { throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); } var versioningMode = currentBranchConfig.Value.VersioningMode.Value; var tag = currentBranchConfig.Value.Tag; var tagNumberPattern = currentBranchConfig.Value.TagNumberPattern; var incrementStrategy = currentBranchConfig.Value.Increment.Value; var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.Value; var trackMergeTarget = currentBranchConfig.Value.TrackMergeTarget.Value; var nextVersion = configuration.NextVersion; var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; var assemblyInformationalFormat = configuration.AssemblyInformationalFormat; var gitTagPrefix = configuration.TagPrefix; var majorMessage = configuration.MajorVersionBumpMessage; var minorMessage = configuration.MinorVersionBumpMessage; var patchMessage = configuration.PatchVersionBumpMessage; var commitMessageVersionBump = currentBranchConfig.Value.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key, preventIncrementForMergedBranchVersion, tagNumberPattern, configuration.ContinuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, commitMessageVersionBump, configuration.LegacySemVerPadding.Value, configuration.BuildMetaDataPadding.Value, configuration.CommitsSinceVersionSourcePadding.Value); }
public GitVersionContext(Branch currentBranch, Commit currentCommit, Config configuration, EffectiveConfiguration effectiveConfiguration, SemanticVersion currentCommitTaggedVersion) { CurrentCommit = currentCommit; CurrentBranch = currentBranch; FullConfiguration = configuration; Configuration = effectiveConfiguration; CurrentCommitTaggedVersion = currentCommitTaggedVersion; }
public GitVersionContext(Branch currentBranch, Commit currentCommit, Config configuration, EffectiveConfiguration effectiveConfiguration, SemanticVersion currentCommitTaggedVersion, int numberOfUncommittedChanges) { CurrentCommit = currentCommit; CurrentBranch = currentBranch; FullConfiguration = configuration; Configuration = effectiveConfiguration; CurrentCommitTaggedVersion = currentCommitTaggedVersion; NumberOfUncommittedChanges = numberOfUncommittedChanges; }
public static void OverrideVersionManuallyIfNeeded(this SemanticVersion version, IRepository repository, EffectiveConfiguration configuration) { SemanticVersion manualNextVersion; if (!string.IsNullOrEmpty(configuration.NextVersion) && SemanticVersion.TryParse(configuration.NextVersion, configuration.GitTagPrefix, out manualNextVersion)) { if (manualNextVersion > version) { version.Major = manualNextVersion.Major; version.Minor = manualNextVersion.Minor; version.Patch = manualNextVersion.Patch; } } }
void CalculateEffectiveConfiguration() { var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, configuration, CurrentBranch); if (!currentBranchConfig.Value.VersioningMode.HasValue) { throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.Increment.HasValue) { throw new Exception(string.Format("Configuration value for 'Increment' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.HasValue) { throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!currentBranchConfig.Value.TrackMergeTarget.HasValue) { throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); } if (!configuration.AssemblyVersioningScheme.HasValue) { throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); } var versioningMode = currentBranchConfig.Value.VersioningMode.Value; var tag = currentBranchConfig.Value.Tag; var tagNumberPattern = currentBranchConfig.Value.TagNumberPattern; var incrementStrategy = currentBranchConfig.Value.Increment.Value; var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.Value; var trackMergeTarget = currentBranchConfig.Value.TrackMergeTarget.Value; var nextVersion = configuration.NextVersion; var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; var gitTagPrefix = configuration.TagPrefix; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key, preventIncrementForMergedBranchVersion, tagNumberPattern, configuration.ContinuousDeploymentFallbackTag, trackMergeTarget); }
void CalculateEffectiveConfiguration() { var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, configuration, CurrentBranch); var versioningMode = currentBranchConfig.Value.VersioningMode ?? configuration.VersioningMode ?? VersioningMode.ContinuousDelivery; var tag = currentBranchConfig.Value.Tag ?? "useBranchName"; var nextVersion = configuration.NextVersion; var incrementStrategy = currentBranchConfig.Value.Increment ?? IncrementStrategy.Patch; var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion ?? false; var assemblyVersioningScheme = configuration.AssemblyVersioningScheme; var gitTagPrefix = configuration.TagPrefix; var tagNumberPattern = currentBranchConfig.Value.TagNumberPattern; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key, preventIncrementForMergedBranchVersion, tagNumberPattern, configuration.ContinuousDeploymentFallbackTag, currentBranchConfig.Value.TrackMergeTarget); }
public string GetAssemblyInfoText(EffectiveConfiguration configuration) { var semanticVersion = CachedVersion.SemanticVersion; var vars = VariableProvider.GetVariablesFor(semanticVersion, configuration.AssemblyVersioningScheme, configuration.VersioningMode, "ci", false); var assemblyInfo = string.Format(@" using System; using System.Reflection; [assembly: AssemblyVersion(""{0}"")] [assembly: AssemblyFileVersion(""{1}"")] [assembly: AssemblyInformationalVersion(""{2}"")] [assembly: ReleaseDate(""{3}"")] [System.Runtime.CompilerServices.CompilerGenerated] sealed class ReleaseDateAttribute : System.Attribute {{ public string Date {{ get; private set; }} public ReleaseDateAttribute(string date) {{ Date = date; }} }} [System.Runtime.CompilerServices.CompilerGenerated] static class GitVersionInformation {{ {4} }} ", vars.AssemblySemVer, vars.MajorMinorPatch + ".0", semanticVersion.ToString("i"), semanticVersion.BuildMetaData.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"), GenerateVariableMembers(vars)); return assemblyInfo; }
void CalculateEffectiveConfiguration() { var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, FullConfiguration, CurrentBranch); if (!currentBranchConfig.VersioningMode.HasValue) throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!currentBranchConfig.Increment.HasValue) throw new Exception(string.Format("Configuration value for 'Increment' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!currentBranchConfig.PreventIncrementOfMergedBranchVersion.HasValue) throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!currentBranchConfig.TrackMergeTarget.HasValue) throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!currentBranchConfig.TracksReleaseBranches.HasValue) throw new Exception(string.Format("Configuration value for 'TracksReleaseBranches' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!currentBranchConfig.IsReleaseBranch.HasValue) throw new Exception(string.Format("Configuration value for 'IsReleaseBranch' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name)); if (!FullConfiguration.AssemblyVersioningScheme.HasValue) throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); if (!FullConfiguration.CommitMessageIncrementing.HasValue) throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); if (!FullConfiguration.LegacySemVerPadding.HasValue) throw new Exception("Configuration value for 'LegacySemVerPadding' has no value. (this should not happen, please report an issue)"); if (!FullConfiguration.BuildMetaDataPadding.HasValue) throw new Exception("Configuration value for 'BuildMetaDataPadding' has no value. (this should not happen, please report an issue)"); if (!FullConfiguration.CommitsSinceVersionSourcePadding.HasValue) throw new Exception("Configuration value for 'CommitsSinceVersionSourcePadding' has no value. (this should not happen, please report an issue)"); var versioningMode = currentBranchConfig.VersioningMode.Value; var tag = currentBranchConfig.Tag; var tagNumberPattern = currentBranchConfig.TagNumberPattern; var incrementStrategy = currentBranchConfig.Increment.Value; var preventIncrementForMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion.Value; var trackMergeTarget = currentBranchConfig.TrackMergeTarget.Value; var nextVersion = FullConfiguration.NextVersion; var assemblyVersioningScheme = FullConfiguration.AssemblyVersioningScheme.Value; var assemblyInformationalFormat = FullConfiguration.AssemblyInformationalFormat; var gitTagPrefix = FullConfiguration.TagPrefix; var majorMessage = FullConfiguration.MajorVersionBumpMessage; var minorMessage = FullConfiguration.MinorVersionBumpMessage; var patchMessage = FullConfiguration.PatchVersionBumpMessage; var noBumpMessage = FullConfiguration.NoBumpMessage; var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Regex, preventIncrementForMergedBranchVersion, tagNumberPattern, FullConfiguration.ContinuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageVersionBump, FullConfiguration.LegacySemVerPadding.Value, FullConfiguration.BuildMetaDataPadding.Value, FullConfiguration.CommitsSinceVersionSourcePadding.Value, FullConfiguration.Ignore.ToFilters(), currentBranchConfig.TracksReleaseBranches.Value, currentBranchConfig.IsReleaseBranch.Value); }
public static void OverrideVersionManuallyIfNeeded(this SemanticVersion version, EffectiveConfiguration configuration) { if (!string.IsNullOrEmpty(configuration.NextVersion) && SemanticVersion.TryParse(configuration.NextVersion, configuration.GitTagPrefix, out var manualNextVersion)) { if (manualNextVersion > version) { version.Major = manualNextVersion.Major; version.Minor = manualNextVersion.Minor; version.Patch = manualNextVersion.Patch; } } }
void CalculateEffectiveConfiguration() { var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, configuration, CurrentBranch); if (!currentBranchConfig.Value.VersioningMode.HasValue) throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); if (!currentBranchConfig.Value.Increment.HasValue) throw new Exception(string.Format("Configuration value for 'Increment' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); if (!currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.HasValue) throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); if (!currentBranchConfig.Value.TrackMergeTarget.HasValue) throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key)); if (!configuration.AssemblyVersioningScheme.HasValue) throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); if (!configuration.CommitMessageIncrementing.HasValue) throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); var versioningMode = currentBranchConfig.Value.VersioningMode.Value; var tag = currentBranchConfig.Value.Tag; var tagNumberPattern = currentBranchConfig.Value.TagNumberPattern; var incrementStrategy = currentBranchConfig.Value.Increment.Value; var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.Value; var trackMergeTarget = currentBranchConfig.Value.TrackMergeTarget.Value; var nextVersion = configuration.NextVersion; var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; var gitTagPrefix = configuration.TagPrefix; var majorMessage = configuration.MajorVersionBumpMessage; var minorMessage = configuration.MinorVersionBumpMessage; var patchMessage = configuration.MinorVersionBumpMessage; var commitMessageVersionBump = currentBranchConfig.Value.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key, preventIncrementForMergedBranchVersion, tagNumberPattern, configuration.ContinuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, commitMessageVersionBump); }
public SemanticVersionFormatValues(SemanticVersion semver, EffectiveConfiguration config) { _semver = semver; _config = config; }
void CreateTempAssemblyInfo(CachedVersion semanticVersion, EffectiveConfiguration configuration) { if (IntermediateOutputPath == null) { var tempFileName = string.Format("AssemblyInfo_{0}_{1}.g.cs", Path.GetFileNameWithoutExtension(ProjectFile), Path.GetRandomFileName()); AssemblyInfoTempFilePath = Path.Combine(TempFileTracker.TempPath, tempFileName); } else { AssemblyInfoTempFilePath = Path.Combine(IntermediateOutputPath, "GitVersionTaskAssemblyInfo.g.cs"); } var assemblyInfoBuilder = new AssemblyInfoBuilder { CachedVersion = semanticVersion }; var assemblyInfo = assemblyInfoBuilder.GetAssemblyInfoText(configuration); File.WriteAllText(AssemblyInfoTempFilePath, assemblyInfo); }
public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged) { var isContinuousDeploymentMode = config.VersioningMode == VersioningMode.ContinuousDeployment && !isCurrentCommitTagged; if (isContinuousDeploymentMode) { semanticVersion = new SemanticVersion(semanticVersion); // Continuous Deployment always requires a pre-release tag unless the commit is tagged if (!semanticVersion.PreReleaseTag.HasTag()) { semanticVersion.PreReleaseTag.Name = NextVersionCalculator.GetBranchSpecificTag(config, semanticVersion.BuildMetaData.Branch, null); if (string.IsNullOrEmpty(semanticVersion.PreReleaseTag.Name)) { semanticVersion.PreReleaseTag.Name = config.ContinuousDeploymentFallbackTag; } } } // Evaluate tag number pattern and append to prerelease tag, preserving build metadata var appendTagNumberPattern = !string.IsNullOrEmpty(config.TagNumberPattern) && semanticVersion.PreReleaseTag.HasTag(); if (appendTagNumberPattern) { var match = Regex.Match(semanticVersion.BuildMetaData.Branch, config.TagNumberPattern); var numberGroup = match.Groups["number"]; if (numberGroup.Success) { semanticVersion.PreReleaseTag.Name += numberGroup.Value.PadLeft(config.BuildMetaDataPadding, '0'); } } if (isContinuousDeploymentMode || appendTagNumberPattern || config.VersioningMode == VersioningMode.Mainline) { PromoteNumberOfCommitsToTagNumber(semanticVersion); } var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); string informationalVersion; if (string.IsNullOrEmpty(config.AssemblyInformationalFormat)) { informationalVersion = semverFormatValues.DefaultInformationalVersion; } else { try { informationalVersion = config.AssemblyInformationalFormat.FormatWith(semverFormatValues); } catch (FormatException formex) { throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message)); } } var variables = new VersionVariables( semverFormatValues.Major, semverFormatValues.Minor, semverFormatValues.Patch, semverFormatValues.BuildMetaData, semverFormatValues.BuildMetaDataPadded, semverFormatValues.FullBuildMetaData, semverFormatValues.BranchName, semverFormatValues.Sha, semverFormatValues.MajorMinorPatch, semverFormatValues.SemVer, semverFormatValues.LegacySemVer, semverFormatValues.LegacySemVerPadded, semverFormatValues.FullSemVer, semverFormatValues.AssemblySemVer, semverFormatValues.PreReleaseTag, semverFormatValues.PreReleaseTagWithDash, semverFormatValues.PreReleaseLabel, semverFormatValues.PreReleaseNumber, informationalVersion, semverFormatValues.CommitDate, semverFormatValues.NuGetVersion, semverFormatValues.NuGetVersionV2, semverFormatValues.NuGetPreReleaseTag, semverFormatValues.NuGetPreReleaseTagV2, semverFormatValues.CommitsSinceVersionSource, semverFormatValues.CommitsSinceVersionSourcePadded); return variables; }
public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged) { var isContinuousDeploymentMode = config.VersioningMode == VersioningMode.ContinuousDeployment && !isCurrentCommitTagged; if (isContinuousDeploymentMode) { semanticVersion = new SemanticVersion(semanticVersion); // Continuous Deployment always requires a pre-release tag unless the commit is tagged if (!semanticVersion.PreReleaseTag.HasTag()) { semanticVersion.PreReleaseTag.Name = NextVersionCalculator.GetBranchSpecificTag(config, semanticVersion.BuildMetaData.Branch, null); if (string.IsNullOrEmpty(semanticVersion.PreReleaseTag.Name)) { semanticVersion.PreReleaseTag.Name = config.ContinuousDeploymentFallbackTag; } } } // Evaluate tag number pattern and append to prerelease tag, preserving build metadata var appendTagNumberPattern = !string.IsNullOrEmpty(config.TagNumberPattern) && semanticVersion.PreReleaseTag.HasTag(); if (appendTagNumberPattern) { var match = Regex.Match(semanticVersion.BuildMetaData.Branch, config.TagNumberPattern); var numberGroup = match.Groups["number"]; if (numberGroup.Success) { semanticVersion.PreReleaseTag.Name += numberGroup.Value.PadLeft(config.BuildMetaDataPadding, '0'); } } if (isContinuousDeploymentMode || appendTagNumberPattern || config.VersioningMode == VersioningMode.Mainline) { PromoteNumberOfCommitsToTagNumber(semanticVersion); } var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); string informationalVersion; if (string.IsNullOrEmpty(config.AssemblyInformationalFormat)) { informationalVersion = semverFormatValues.DefaultInformationalVersion; } else { try { informationalVersion = config.AssemblyInformationalFormat.FormatWith <SemanticVersionFormatValues>(semverFormatValues); } catch (ArgumentException formex) { throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message)); } } var variables = new VersionVariables( semverFormatValues.Major, semverFormatValues.Minor, semverFormatValues.Patch, semverFormatValues.BuildMetaData, semverFormatValues.BuildMetaDataPadded, semverFormatValues.FullBuildMetaData, semverFormatValues.BranchName, semverFormatValues.Sha, semverFormatValues.MajorMinorPatch, semverFormatValues.SemVer, semverFormatValues.LegacySemVer, semverFormatValues.LegacySemVerPadded, semverFormatValues.FullSemVer, semverFormatValues.AssemblySemVer, semverFormatValues.AssemblyFileSemVer, semverFormatValues.PreReleaseTag, semverFormatValues.PreReleaseTagWithDash, semverFormatValues.PreReleaseLabel, semverFormatValues.PreReleaseNumber, informationalVersion, semverFormatValues.CommitDate, semverFormatValues.NuGetVersion, semverFormatValues.NuGetVersionV2, semverFormatValues.NuGetPreReleaseTag, semverFormatValues.NuGetPreReleaseTagV2, semverFormatValues.CommitsSinceVersionSource, semverFormatValues.CommitsSinceVersionSourcePadded); return(variables); }
private void CalculateEffectiveConfiguration() { IBranchConfigurationCalculator calculator = new BranchConfigurationCalculator(log, this); var currentBranchConfig = calculator.GetBranchConfiguration(CurrentBranch); if (!currentBranchConfig.VersioningMode.HasValue) { throw new Exception($"Configuration value for 'Versioning mode' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!currentBranchConfig.Increment.HasValue) { throw new Exception($"Configuration value for 'Increment' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!currentBranchConfig.PreventIncrementOfMergedBranchVersion.HasValue) { throw new Exception($"Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!currentBranchConfig.TrackMergeTarget.HasValue) { throw new Exception($"Configuration value for 'TrackMergeTarget' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!currentBranchConfig.TracksReleaseBranches.HasValue) { throw new Exception($"Configuration value for 'TracksReleaseBranches' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!currentBranchConfig.IsReleaseBranch.HasValue) { throw new Exception($"Configuration value for 'IsReleaseBranch' for branch {currentBranchConfig.Name} has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.AssemblyVersioningScheme.HasValue) { throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.AssemblyFileVersioningScheme.HasValue) { throw new Exception("Configuration value for 'AssemblyFileVersioningScheme' has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.CommitMessageIncrementing.HasValue) { throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.LegacySemVerPadding.HasValue) { throw new Exception("Configuration value for 'LegacySemVerPadding' has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.BuildMetaDataPadding.HasValue) { throw new Exception("Configuration value for 'BuildMetaDataPadding' has no value. (this should not happen, please report an issue)"); } if (!FullConfiguration.CommitsSinceVersionSourcePadding.HasValue) { throw new Exception("Configuration value for 'CommitsSinceVersionSourcePadding' has no value. (this should not happen, please report an issue)"); } var versioningMode = currentBranchConfig.VersioningMode.Value; var tag = currentBranchConfig.Tag; var tagNumberPattern = currentBranchConfig.TagNumberPattern; var incrementStrategy = currentBranchConfig.Increment.Value; var preventIncrementForMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion.Value; var trackMergeTarget = currentBranchConfig.TrackMergeTarget.Value; var preReleaseWeight = currentBranchConfig.PreReleaseWeight ?? 0; var nextVersion = FullConfiguration.NextVersion; var assemblyVersioningScheme = FullConfiguration.AssemblyVersioningScheme.Value; var assemblyFileVersioningScheme = FullConfiguration.AssemblyFileVersioningScheme.Value; var assemblyInformationalFormat = FullConfiguration.AssemblyInformationalFormat; var assemblyVersioningFormat = FullConfiguration.AssemblyVersioningFormat; var assemblyFileVersioningFormat = FullConfiguration.AssemblyFileVersioningFormat; var gitTagPrefix = FullConfiguration.TagPrefix; var majorMessage = FullConfiguration.MajorVersionBumpMessage; var minorMessage = FullConfiguration.MinorVersionBumpMessage; var patchMessage = FullConfiguration.PatchVersionBumpMessage; var noBumpMessage = FullConfiguration.NoBumpMessage; var commitDateFormat = FullConfiguration.CommitDateFormat; var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Regex, preventIncrementForMergedBranchVersion, tagNumberPattern, FullConfiguration.ContinuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageVersionBump, FullConfiguration.LegacySemVerPadding.Value, FullConfiguration.BuildMetaDataPadding.Value, FullConfiguration.CommitsSinceVersionSourcePadding.Value, FullConfiguration.Ignore.ToFilters(), currentBranchConfig.TracksReleaseBranches.Value, currentBranchConfig.IsReleaseBranch.Value, commitDateFormat, preReleaseWeight); }
public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged) { if (config.VersioningMode == VersioningMode.ContinuousDeployment && !isCurrentCommitTagged) { semanticVersion = new SemanticVersion(semanticVersion); // Continuous Deployment always requires a pre-release tag unless the commit is tagged if (!semanticVersion.PreReleaseTag.HasTag()) { semanticVersion.PreReleaseTag.Name = config.ContinuousDeploymentFallbackTag; } // For continuous deployment the commits since tag gets promoted to the pre-release number semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag; semanticVersion.BuildMetaData.CommitsSinceVersionSource = semanticVersion.BuildMetaData.CommitsSinceTag ?? 0; semanticVersion.BuildMetaData.CommitsSinceTag = null; } var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); string informationalVersion; if (string.IsNullOrEmpty(config.AssemblyInformationalFormat)) { informationalVersion = semverFormatValues.DefaultInformationalVersion; } else { try { informationalVersion = config.AssemblyInformationalFormat.FormatWith(semverFormatValues); } catch (FormatException formex) { throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message)); } } var variables = new VersionVariables( semverFormatValues.Major, semverFormatValues.Minor, semverFormatValues.Patch, semverFormatValues.BuildMetaData, semverFormatValues.BuildMetaDataPadded, semverFormatValues.FullBuildMetaData, semverFormatValues.BranchName, semverFormatValues.Sha, semverFormatValues.MajorMinorPatch, semverFormatValues.SemVer, semverFormatValues.LegacySemVer, semverFormatValues.LegacySemVerPadded, semverFormatValues.FullSemVer, semverFormatValues.AssemblySemVer, semverFormatValues.PreReleaseTag, semverFormatValues.PreReleaseTagWithDash, semverFormatValues.PreReleaseLabel, semverFormatValues.PreReleaseNumber, informationalVersion, semverFormatValues.CommitDate, semverFormatValues.NuGetVersion, semverFormatValues.NuGetVersionV2, semverFormatValues.CommitsSinceVersionSource, semverFormatValues.CommitsSinceVersionSourcePadded); return(variables); }