public async Task <SemanticReleaseNotes> GenerateReleaseNotesAsync(SemanticReleaseNotes releaseNotesToUpdate)
        {
            var           gitRepository  = new Repository(Repository.Discover(_generationParameters.WorkingDirectory));
            IIssueTracker issueTracker   = null;
            var           categories     = new Categories(_generationParameters.Categories, _generationParameters.AllLabels);
            var           tagToStartFrom = _generationParameters.AllTags
                ? gitRepository.GetFirstCommit()
                : gitRepository.GetLastTaggedCommit() ?? gitRepository.GetFirstCommit();
            var currentReleaseInfo = gitRepository.GetCurrentReleaseInfo();

            if (!string.IsNullOrEmpty(_generationParameters.Version))
            {
                currentReleaseInfo.Name = _generationParameters.Version;
                currentReleaseInfo.When = DateTimeOffset.Now;
            }
            else
            {
                currentReleaseInfo.Name = "vNext";
            }

            if (_generationParameters.UseIssueTracker)
            {
                if (_generationParameters.IssueTracker.Type.HasValue)
                {
                    issueTracker = IssueTrackerFactory.CreateIssueTracker(new IssueTrackerSettings(_generationParameters.IssueTracker.Server,
                                                                                                   _generationParameters.IssueTracker.Type.Value)
                    {
                        Project        = _generationParameters.IssueTracker.ProjectId,
                        Authentication = _generationParameters.IssueTracker.Authentication.ToIssueTrackerSettings()
                    });
                }
                else
                {
                    if (!TryRemote(gitRepository, "upstream", _generationParameters, out issueTracker) &&
                        !TryRemote(gitRepository, "origin", _generationParameters, out issueTracker))
                    {
                        throw new Exception("Unable to guess issue tracker through remote, specify issue tracker type on the command line");
                    }
                }
            }


            var releaseNotes = _generationParameters.UseIssueTracker ? await GenerateReleaseNotesAsync(_generationParameters, gitRepository, issueTracker, releaseNotesToUpdate, categories, tagToStartFrom, currentReleaseInfo)
                : await GenerateReleaseNotesAsync(
                _generationParameters, gitRepository,
                releaseNotesToUpdate, categories,
                tagToStartFrom, currentReleaseInfo);

            return(releaseNotes);
        }