private static int DivineDiversion(Options options) { try { WriteLine(options, Verbosity.Normal, ConsoleColor.White, "Divining the semantic version based on the diversion from the latest release..."); var diversion = new AssemblyDiversionDiviner(new NvAssemblyInfoFactory(), new DiversionDiviner()).Divine(options.ReleasedPath, options.Target); if (options.GenerateFile) { using (var writer = new StreamWriter(File.Create(Path.Combine(options.WorkingDirectory, Path.GetFileNameWithoutExtension(options.Target), "diversion.json")))) JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }).Serialize(writer, diversion); } var version = new NextVersion().Determine(diversion); if (version == diversion.Old.Version) { WriteLine(options, Verbosity.Minimal, ConsoleColor.White, "The target project has not diverged from the released version."); return(1); } else if (version > diversion.New.Version) { if (!options.Correct) { WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkRed, "{0} {1} [Currently {2}]", Path.GetFileNameWithoutExtension(options.Target), version, diversion.New.Version); return(2); } else { WriteLine(options, Verbosity.Normal, ConsoleColor.White, "Updating the assembly info in the target project..."); File.WriteAllText(options.AssemblyInfoFile, string.Format(Regex.Replace(File.ReadAllText(options.AssemblyInfoFile), "(Assembly(?:File|Informational)?Version)\\s*\\(\\s*\"([0-9.]*)\"\\s*\\)", "$1(\"{0}\")"), version), Encoding.UTF8); WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkCyan, "{0} {1} [Was {2}]", Path.GetFileNameWithoutExtension(options.Target), version, diversion.New.Version); } } else if (version == diversion.New.Version) { WriteLine(options, Verbosity.Minimal, ConsoleColor.Green, "{0} {1}", Path.GetFileNameWithoutExtension(options.Target), version); } else { WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkGreen, "{0} {1} [Determined {2}]", Path.GetFileNameWithoutExtension(options.Target), diversion.New.Version, version); } return(0); } catch (Exception e) { WriteLine(options, Verbosity.Silent, ConsoleColor.Red, e.Message); return(-1); } }
public void GivenNextVersionHasBeenInitializedWithAMajorAndMinorVersionTriggersThatAlwaysTrigger() { NextVersion = new NextVersion() .WithMajorTriggers(Mock.Of <IVersionTrigger>(obj => obj.IsTriggered(It.IsAny <IAssemblyDiversion>()) == true)) .WithMinorTriggers(Mock.Of <IVersionTrigger>(obj => obj.IsTriggered(It.IsAny <IAssemblyDiversion>()) == true)); }
public override bool Execute() { Configuration = GetConfiguration(); if (string.IsNullOrWhiteSpace(TargetFramework)) { TargetFramework = TargetFrameworkVersion.Replace("v", "net").Replace(".", ""); } if (string.IsNullOrWhiteSpace(PackageId)) { PackageId = Path.GetFileNameWithoutExtension(TargetPath); } var releasePath = GetLatestReleasePath(); if (string.IsNullOrWhiteSpace(releasePath) || !File.Exists(releasePath)) { Log.LogMessage(MessageImportance.High, $"A release could not be located for {PackageId}; the assumption is that this will be the first published version for this framework."); HasDiverged = true; return(true); } var diversion = new AssemblyDiversionDiviner(new NvAssemblyInfoFactory(), new DiversionDiviner()).Divine(releasePath, TargetPath); if (Configuration.GenerateDiversionFile) { using (var writer = new StreamWriter(File.Create(Path.Combine(Path.GetDirectoryName(TargetPath), "diversion.output.json")))) JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }).Serialize(writer, diversion); Log.LogMessage(MessageImportance.High, "Generated diversion.output.json."); } var nextVersion = new NextVersion().Determine(diversion); var version = diversion.New.Version >= nextVersion ? diversion.New.Version : nextVersion; HasDiverged = diversion.HasDiverged(); Version = version.ToString(); Verified = version == diversion.New.Version; RequiresCorrection = !Verified && Configuration.IsCorrectionEnabled; if (!HasDiverged) { Log.LogMessage(MessageImportance.High, $"{diversion.Identity} has not diverged from its latest release."); } if (!Verified && !Configuration.IsCorrectionEnabled) { var message = $"Based on diversion's semantic version rules, the version of {diversion.Identity} being built should be at least {nextVersion}, but is set at {diversion.New.Version}."; if (Configuration.Warn) { Log.LogWarning(message); } else { Log.LogError(message); } } if (Verified && HasDiverged) { Log.LogMessage(MessageImportance.High, $"Based on diversion's semantic version rules, the version of {diversion.Identity} being built has the correct version of {diversion.New.Version}."); } if (RequiresCorrection) { Log.LogMessage(MessageImportance.High, $"Based on diversion's semantic version rules, the version of {diversion.Identity} will be changed from {diversion.Old.Version} to {nextVersion}."); } return(Configuration.IsCorrectionEnabled || Verified || Configuration.Warn); }
public DetermineNextVersionNumberSteps() { NextVersion = new NextVersion(); }