public async IAsyncEnumerable <LightOption> ScanAsync(CancellationToken cancellationToken) { foreach (var query in Options.Jira.Queries) { var issues = await m_JiraClient.GetIssuesAsync( Options.Jira.BaseUrl, Options.Jira.Username, Options.Jira.Token, query.BoardId, query.Query, cancellationToken); if (!issues.Any()) { continue; } if (query.AlertLight != null) { yield return(query.AlertLight); } } foreach (var project in Options.TeamCity.Projects) { var include = project.IncludeBuildConfigIds? .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(value => value.Trim()) .ToArray(); var exclude = project.ExcludeBuildConfigIds? .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(value => value.Trim()) .ToArray(); var builds = await m_TeamCityClient.GetBuildsAsync( Options.TeamCity.BaseUrl, Options.TeamCity.Token, project.Id, include, exclude, project.IsRecursive, cancellationToken); var failingBuilds = builds.Where(build => !"SUCCESS".Equals(build.Status, StringComparison.InvariantCultureIgnoreCase)); if (!failingBuilds.Any()) { continue; } if (project.AlertLight != null) { yield return(project.AlertLight); } } }