/// <summary> /// Returns the build definitions for the <paramref name="settings"/>. /// </summary> /// <param name="log">The Cake log context.</param> /// <param name="settings">Settings for accessing Azure DevOps.</param> /// <returns>The build definitions for the the <paramref name="settings"/>.</returns> internal static IEnumerable <AzureDevOpsBuildDefinition> GetAzureDevOpsBuildDefinitions( ICakeLog log, AzureDevOpsBuildsSettings settings) { log.NotNull(nameof(log)); settings.NotNull(nameof(settings)); List <BuildDefinitionReference> buildDefinitions = null; using (var buildHttpClient = new BuildClientFactory().CreateBuildClient(settings.CollectionUrl, settings.Credentials)) { if (settings.ProjectGuid != Guid.Empty) { buildDefinitions = buildHttpClient .GetDefinitionsAsync(settings.ProjectGuid) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else if (!string.IsNullOrWhiteSpace(settings.ProjectName)) { buildDefinitions = buildHttpClient .GetDefinitionsAsync(settings.ProjectName) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else { throw new ArgumentOutOfRangeException( nameof(settings), "Either ProjectGuid or ProjectName needs to be set"); } log.Verbose( "{0} Build definitions found", buildDefinitions.Count); return(buildDefinitions .Select(x => x.ToAzureDevOpsBuildDefinition()) .ToList()); } }
/// <summary> /// Gets the builds for the parameter <paramref name="settings"/>. /// </summary> /// <param name="log">The Cake log context.</param> /// <param name="settings">Settings for getting the build.</param> /// <returns>The builds or an empty list of builds if no builds were found for the <paramref name="settings"/>.</returns> /// <exception cref="InvalidOperationException">If no build definition was found for the <paramref name="settings"/>.</exception> internal static IEnumerable <AzureDevOpsBuild> GetAzureDevOpsBuilds( ICakeLog log, AzureDevOpsBuildsSettings settings) { log.NotNull(nameof(log)); settings.NotNull(nameof(settings)); var azureDevOpsBuilds = new List <AzureDevOpsBuild>(); using (var buildHttpClient = new BuildClientFactory().CreateBuildClient(settings.CollectionUrl, settings.Credentials, out var authorizedIdenity)) { log.Verbose( "Authorized Identity:\n Id: {0}\n DisplayName: {1}", authorizedIdenity.Id, authorizedIdenity.DisplayName); AzureDevOpsBuildDefinition buildDefinition = null; if (!string.IsNullOrEmpty(settings.BuildDefinitionName)) { buildDefinition = GetBuildDefinition(log, settings); if (buildDefinition == null) { throw new InvalidOperationException($"Build definition '{settings.BuildDefinitionName}' not found"); } } List <int> buildsDefinitionIds = buildDefinition == null ? null : new List <int>() { buildDefinition.Id }; List <Build> builds = null; if (settings.ProjectGuid != Guid.Empty) { builds = buildHttpClient .GetBuildsAsync( settings.ProjectGuid, definitions: buildsDefinitionIds, statusFilter: settings.BuildStatus?.ToBuildStatus(), resultFilter: settings.BuildResult?.ToBuildResult(), queryOrder: settings.BuildQueryOrder?.ToBuildQueryOrder(), branchName: settings.BranchName, top: settings.Top, maxBuildsPerDefinition: settings.MaxBuildsPerDefinition) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else if (!string.IsNullOrWhiteSpace(settings.ProjectName)) { builds = buildHttpClient .GetBuildsAsync( settings.ProjectName, definitions: buildsDefinitionIds, statusFilter: settings.BuildStatus?.ToBuildStatus(), resultFilter: settings.BuildResult?.ToBuildResult(), queryOrder: settings.BuildQueryOrder?.ToBuildQueryOrder(), branchName: settings.BranchName, top: settings.Top, maxBuildsPerDefinition: settings.MaxBuildsPerDefinition) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else { throw new ArgumentOutOfRangeException( nameof(settings), "Either ProjectGuid or ProjectName needs to be set"); } azureDevOpsBuilds.AddRange(builds.Select(x => new AzureDevOpsBuild(log, settings, x))); } log.Verbose( "{0} builds found", azureDevOpsBuilds.Count); return(azureDevOpsBuilds); }