public void VerifyUnreleasedCommitsHaveUnreleasedVersion() { var expectedChange = new DefaultChange(new ChangeVersion("Unreleased"), "Added", "Some Summary", DateTimeOffset.Now); var parser = new DefaultCommitParser(_defaultParsingConfig); var actual = parser.Parse(MockCommit(expectedChange)); Assert.That(actual, Is.EqualTo(expectedChange)); }
public void VerifyParsesWithReference() { var expectedChange = new DefaultChange("Unreleased", "Added", "Some Summary", DateTimeOffset.Now, "REF-1234"); var parser = new DefaultCommitParser(_defaultPatterns); var actual = parser.Parse(MockCommit(expectedChange)); Assert.That(actual, Is.EqualTo(expectedChange)); }
public void VerifyParsesWithGitTagsNoTagMatch() { var gitTags = new Dictionary <string, string>(); gitTags.Add("THISCOULDBEASHA_OTHER", "0.0.0"); var expectedChange = new DefaultChange(new ChangeVersion("Unreleased"), "Added", "Some Summary", DateTimeOffset.Now); var parser = new DefaultCommitParser(_defaultParsingConfig, gitTags); var actual = parser.Parse(MockCommit(expectedChange)); Assert.That(actual, Is.EqualTo(expectedChange)); }
public void VerifyReleasedCommitsWithUnreleasedInVersionHaveCorrectVersion() { var releasedChange = new DefaultChange(new ChangeVersion("2.0.0"), "Added", "Some Released Summary", DateTimeOffset.Now); var unreleasedChange = new DefaultChange(new ChangeVersion("Unreleased"), "Added", "Some Unreleased Summary", DateTimeOffset.Now); var parser = new DefaultCommitParser(_defaultParsingConfig); parser.Parse(MockCommit(releasedChange)); var actual = parser.Parse(MockCommit(unreleasedChange)); Assert.That(actual.Version, Is.EqualTo(releasedChange.Version)); Assert.That(actual.ChangeType, Is.EqualTo(unreleasedChange.ChangeType)); Assert.That(actual.Summary, Is.EqualTo(unreleasedChange.Summary)); Assert.That(actual.Date, Is.EqualTo(unreleasedChange.Date)); Assert.That(actual.Reference, Is.EqualTo(unreleasedChange.Reference)); }
public void VerifyCommitsWithUnreleasedInVersionHaveCorrectVersionWhenPreceededByExplicitChange() { var explicitChange = new DefaultChange("2.0.0", "Added", "Some Released Summary", DateTimeOffset.Now); var unreleasedChange = new DefaultChange("Unreleased", "Added", "Some Unreleased Summary", DateTimeOffset.Now); var parser = new DefaultCommitParser(_defaultPatterns); parser.Parse(explicitChange); var actual = parser.Parse(MockCommit(unreleasedChange)); Assert.That(actual.Version, Is.EqualTo(explicitChange.Version)); Assert.That(actual.Tag, Is.EqualTo(unreleasedChange.Tag)); Assert.That(actual.Summary, Is.EqualTo(unreleasedChange.Summary)); Assert.That(actual.Date, Is.EqualTo(unreleasedChange.Date)); Assert.That(actual.Reference, Is.EqualTo(unreleasedChange.Reference)); }
static void Main(string[] args) { try { var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); Parser.Default.ParseArguments <Options>(args) .WithParsed(options => { var additionalSettings = new List <KeyValuePair <string, string> >(); if (!string.IsNullOrEmpty(options.CustomSettingsPath)) { configBuilder.AddJsonFile(options.CustomSettingsPath); } if (!string.IsNullOrEmpty(options.CustomTemplatePath)) { additionalSettings.Add(new KeyValuePair <string, string>("Template", options.CustomTemplatePath)); } if (!string.IsNullOrEmpty(options.ChangeTypesToExclude)) { additionalSettings.Add(new KeyValuePair <string, string>("ChangeTypesToExclude", options.ChangeTypesToExclude)); } if (!string.IsNullOrEmpty(options.MinVersion)) { additionalSettings.Add(new KeyValuePair <string, string>("MinVersion", options.MinVersion)); } if (!string.IsNullOrEmpty(options.RepositoryPath)) { additionalSettings.Add(new KeyValuePair <string, string>("Repository:Path", options.RepositoryPath)); } if (!string.IsNullOrEmpty(options.FileSourcePath)) { additionalSettings.Add(new KeyValuePair <string, string>("FileSource", options.FileSourcePath)); } configBuilder.AddInMemoryCollection(additionalSettings); }); var config = TryOrExit(() => configBuilder.Build(), "Failed to build configuration"); var appConfig = config.Get <AppConfig>(); var template = GetTemplate(appConfig.Template); var repo = TryOrExit(() => new Repository(appConfig.Repository.Path), "Failed to initialize repository"); var idToOverrideChange = new Dictionary <string, IChange>(); var changeTypesToExclude = appConfig.ChangeTypesToExclude.Split(","); var renderer = new StubbleBuilder().Build(); var minVersion = string.IsNullOrEmpty(appConfig.MinVersion) ? null : new ChangeVersion(appConfig.MinVersion); if (appConfig.MultiProject) { var readers = new List <IGenericReader <ProjectChange> >(); var idToProjectChange = new Dictionary <string, ProjectChange>(); if (!string.IsNullOrEmpty(appConfig.FileSource)) { var fileReader = new FileReader <ProjectChange>(appConfig.FileSource, new ProjectFileSourceRowParser(Console.Error)); readers.Add(fileReader); } if (!string.IsNullOrEmpty(appConfig.Repository.OverrideSource)) { var overrideFileReader = new FileReader <OverrideProjectChange>(appConfig.Repository.OverrideSource, new OverrideProjectSourceRowParser(Console.Error)); readers.Add(overrideFileReader); idToProjectChange = overrideFileReader.Values().ToDictionary <OverrideProjectChange, string, ProjectChange>(change => change.Id, change => change); } var parser = new ProjectCommitParser(appConfig.Parsing); var gitReader = new GitReader <ProjectChange>(repo, parser, idToProjectChange); readers.Add(gitReader); var generator = new ProjectChangelogGenerator(readers, template, renderer); var projectToOutput = generator.Generate(minVersion, changeTypesToExclude); foreach (var(project, output) in projectToOutput) { File.WriteAllText($@"{project}-changelog.md", output); } } else { var readers = new List <IGenericReader <IChange> >(); if (!string.IsNullOrEmpty(appConfig.FileSource)) { var fileReader = new FileReader <DefaultChange>(appConfig.FileSource, new DefaultFileSourceRowParser(Console.Error)); readers.Add(fileReader); } if (!string.IsNullOrEmpty(appConfig.Repository.OverrideSource)) { var overrideFileReader = new FileReader <OverrideChange>(appConfig.Repository.OverrideSource, new OverrideSourceRowParser(Console.Error)); idToOverrideChange = overrideFileReader.Values().ToDictionary <OverrideChange, string, IChange>(change => change.Id, change => change); } Dictionary <string, string> commitShaToTagName = null; if (UsesTagAsSource(appConfig.Parsing)) { commitShaToTagName = new Dictionary <string, string>(); foreach (var tag in repo.Tags) { commitShaToTagName.Add(tag.Target.Sha, tag.FriendlyName); } } var commitParser = new DefaultCommitParser(appConfig.Parsing, commitShaToTagName); var gitReader = new GitReader <IChange>(repo, commitParser, idToOverrideChange); readers.Add(gitReader); var cache = new ChangeCache(); var generator = new StringChangelogGenerator(readers, cache, template, renderer); var output = generator.Generate(minVersion, changeTypesToExclude); File.WriteAllText(@"changelog.md", output); } } catch (Exception e) { Console.WriteLine($"{e.Message}"); Environment.Exit(-1); } }