public override async Task <IEnumerable <IIssueTrackerIssue> > EnumerateIssuesAsync(IIssueSourceEnumerationContext context)
        {
            var credentials = this.TryGetCredentials <GitLabCredentials>();

            if (credentials == null)
            {
                throw new InvalidOperationException("Credentials must be supplied to enumerate GitLab issues.");
            }

            string projectName = AH.CoalesceString(this.ProjectName, credentials.ProjectName);

            if (string.IsNullOrEmpty(projectName))
            {
                throw new InvalidOperationException("A project name must be defined in either the issue source or associated GitLab credentials in order to enumerate GitLab issues.");
            }

            var client = new GitLabClient(credentials.ApiUrl, credentials.UserName, credentials.Password, credentials.GroupName);

            var filter = new GitLabIssueFilter
            {
                Milestone = this.MilestoneTitle,
                Labels    = this.Labels,
                CustomFilterQueryString = this.CustomFilterQueryString
            };

            var issues = await client.GetIssuesAsync(projectName, filter, CancellationToken.None).ConfigureAwait(false);

            return(from i in issues
                   select new GitLabIssue(i));
        }