private static async Task ListBuildsFullAsync() { var server = new DevOpsServer("dnceng"); var builds1 = await server.ListBuildsAsync("public", new[] { 15 }); var builds2 = await server.ListBuildsAsync("public", top : 10); }
private static async Task Scratch2() { var server = new DevOpsServer("dnceng", await GetToken("dnceng")); var builds = await server.ListBuildsAsync("public", definitions : new[] { 686 }, top : 3000); var buildTimes = new List <(int BuildNumber, DateTime StartTime, DateTime EndTime)>(); GetBuildTimes(); var firstDay = buildTimes.Min(x => x.StartTime).Date; var lastDay = DateTime.UtcNow.Date; var maxCapacity = GetCapacity(); Console.WriteLine($"Max capacity is {maxCapacity}"); void GetBuildTimes() { using var writer = new StreamWriter(@"p:\temp\builds.csv", append: false); writer.WriteLine("Build Number,Start Time, End Time"); foreach (var build in builds) { if (build.FinishTime is null) { continue; } if (!DateTime.TryParse(build.StartTime, out var startTime) || !DateTime.TryParse(build.FinishTime, out var endTime)) { continue; } writer.WriteLine($"{build.Id},{build.StartTime},{build.FinishTime}"); buildTimes.Add((build.Id, startTime, endTime)); } } int GetCapacity() { using var writer = new StreamWriter(@"p:\temp\capacity.csv", append: false); writer.WriteLine("Time,Build Count"); var current = firstDay; var max = 0; while (current.Date <= lastDay) { var count = buildTimes.Count(x => current >= x.StartTime && current <= x.EndTime); if (count > max) { max = count; } writer.WriteLine($"{current},{count}"); current = current.AddMinutes(15); } return(max); } }
public async Task UpdateDatabaseAsync(int?top = null) { var builds = await DevOpsServer.ListBuildsAsync(ProjectName, top : top); foreach (var build in builds) { try { await UploadBuild(build); } catch (Exception ex) { Logger.LogError($"Unable to upload {build.Id}: {ex.Message}"); } } }
public async Task <List <Build> > ListBuildsAsync(int top) => await DevOpsServer.ListBuildsAsync(ProjectName, new[] { BuildDefinitionId }, top : top);
private static async Task ListStaleChecks() { var gitHub = new GitHubClient(new ProductHeaderValue("MyAmazingApp")); gitHub.Credentials = new Credentials(await GetToken("github")); var apiConnection = new ApiConnection(gitHub.Connection); var checksClient = new ChecksClient(apiConnection); var server = new DevOpsServer("dnceng"); var list = new List <string>(); foreach (var build in await server.ListBuildsAsync("public", new[] { 196 }, top: 500)) { if (build.Status == BuildStatus.Completed && build.Reason == BuildReason.PullRequest && build.FinishTime is object && DateTimeOffset.UtcNow - DateTimeOffset.Parse(build.FinishTime) > TimeSpan.FromMinutes(5)) { try { Console.WriteLine($"Checking {build.Repository.Id} {build.SourceVersion}"); // Build is complete for at least five minutes. Results should be available var name = build.Repository.Id.Split("/"); var pullRequestId = int.Parse(build.SourceBranch.Split("/")[2]); var prUri = $"https://github.com/{build.Repository.Id}/pull/{pullRequestId}"; var repository = await gitHub.Repository.Get(name[0], name[1]); var pullRequest = await gitHub.PullRequest.Get(repository.Id, pullRequestId); if (pullRequest.MergeableState.Value == MergeableState.Dirty || pullRequest.MergeableState.Value == MergeableState.Unknown) { // There are merge conflicts. This seems to confuse things a bit below. continue; } // Need to use the HEAD of the PR not Build.SourceVersion here. The Build.SourceVersion // is the HEAD of the PR merged into HEAD of the target branch. The check suites only track // the HEAD of PR var response = await checksClient.Suite.GetAllForReference(repository.Id, pullRequest.Head.Sha); var devOpsResponses = response.CheckSuites.Where(x => x.App.Name == "Azure Pipelines").ToList(); var allDone = devOpsResponses.All(x => x.Status.Value == CheckStatus.Completed); if (!allDone) { // There are merge conflicts. This seems to confuse things a bit below. Console.WriteLine($"\t{DevOpsUtil.GetBuildUri(build)}"); Console.WriteLine($"\t{prUri}"); list.Add(prUri); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } foreach (var uri in list.ToHashSet()) { Console.WriteLine(uri); } }
public async Task <List <Build> > ListBuildsAsync(int?top = null) => await DevOpsServer.ListBuildsAsync(ProjectName, definitions : new[] { RoslynSignedBuildDefinitionId }, top : top, queryOrder : BuildQueryOrder.FinishTimeDescending);