Ejemplo n.º 1
0
        public void CanDetectJiraFromUrl()
        {
            IIssueTracker issueTracker;
            var           created = IssueTrackerFactory.TryCreateIssueTrackerFromUrl("https://catelproject.atlassian.net/", "CTL", null, out issueTracker);

            created.ShouldBeTrue();
            var jiraIssueTracker = issueTracker.ShouldBeOfType <JiraIssueTracker>();

            jiraIssueTracker.ShouldNotBeNull();
        }
Ejemplo n.º 2
0
        public void CanDetectGitHubFromUrl()
        {
            IIssueTracker issueTracker;
            var           created = IssueTrackerFactory.TryCreateIssueTrackerFromUrl("https://github.com/GitTools/GitTools.IssueTrackers", null, null, out issueTracker);

            created.ShouldBeTrue();
            var githubIssueTracker = issueTracker.ShouldBeOfType <GitHubIssueTracker>();

            githubIssueTracker.Organisation.ShouldBe("GitTools");
            githubIssueTracker.Repository.ShouldBe("GitTools.IssueTrackers");
        }
        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);
        }
        private static bool TryRemote(Repository gitRepository, string name, ReleaseNotesGenerationParameters context,
                                      out IIssueTracker issueTracker)
        {
            var upstream = gitRepository.Network.Remotes[name];

            if (upstream == null)
            {
                issueTracker = null;
                return(false);
            }
            return(IssueTrackerFactory.TryCreateIssueTrackerFromUrl(
                       upstream.Url,
                       context.IssueTracker.Authentication.ToIssueTrackerSettings(),
                       out issueTracker));
        }