public void SetRetentionPolicies(IEnumerable <Uri> buildDefinitions, BuildRetentionPolicy policies) { const BuildReason Reason = BuildReason.Triggered | BuildReason.Manual; foreach (var bd in this.buildServer.QueryBuildDefinitionsByUri(buildDefinitions.ToArray())) { UpdateRetentionPolicy(bd, Reason, policies.StoppedKeep, policies.StoppedDeleteOptions, BuildStatus.Stopped); UpdateRetentionPolicy(bd, Reason, policies.FailedKeep, policies.FailedDeleteOptions, BuildStatus.Failed); UpdateRetentionPolicy(bd, Reason, policies.PartiallySucceededKeep, policies.PartiallySucceededDeleteOptions, BuildStatus.PartiallySucceeded); UpdateRetentionPolicy(bd, Reason, policies.SucceededKeep, policies.SucceededDeleteOptions, BuildStatus.Succeeded); bd.Save(); } }
private static void UpdateRetentionPolicy(IBuildDefinition bd, BuildReason reason, int keep, DeleteOptions options, BuildStatus status) { var rp = bd.RetentionPolicyList.FirstOrDefault(r => r.BuildReason == reason && r.BuildStatus == status); if (rp == null) { bd.AddRetentionPolicy(reason, BuildStatus.Stopped, keep, options); } else { rp.NumberToKeep = keep; rp.DeleteOptions = options; } }
public Microsoft.TeamFoundation.Build.Server.BuildReason ConvertReason(BuildReason reason) { if (reason <= BuildReason.UserCreated) { switch (reason) { case BuildReason.None: return(Microsoft.TeamFoundation.Build.Server.BuildReason.None); case BuildReason.Manual: return(Microsoft.TeamFoundation.Build.Server.BuildReason.Manual); case BuildReason.IndividualCI: return(Microsoft.TeamFoundation.Build.Server.BuildReason.IndividualCI); case (BuildReason)3: case (BuildReason)5: case (BuildReason)6: case (BuildReason)7: break; case BuildReason.BatchedCI: return(Microsoft.TeamFoundation.Build.Server.BuildReason.BatchedCI); case BuildReason.Schedule: return(Microsoft.TeamFoundation.Build.Server.BuildReason.Schedule); default: if (reason == BuildReason.UserCreated) { return(Microsoft.TeamFoundation.Build.Server.BuildReason.UserCreated); } break; } } else { if (reason == BuildReason.ValidateShelveset) { return(Microsoft.TeamFoundation.Build.Server.BuildReason.ValidateShelveset); } if (reason == BuildReason.CheckInShelveset) { return(Microsoft.TeamFoundation.Build.Server.BuildReason.CheckInShelveset); } } return(Microsoft.TeamFoundation.Build.Server.BuildReason.Manual); }
public override IList <string> ToMessage(BotElement bot, Func <string, string> transform) { var formatter = new { TeamProjectCollection = transform(TeamProjectCollection), ProjectName = transform(ProjectName), BuildDefinition = transform(BuildDefinition), BuildStatus = transform(BuildStatus.ToString()), BuildUrl, BuildNumber = transform(BuildNumber), BuildReason = transform(BuildReason.ToString()), RequestedFor = transform(RequestedFor), RequestedForDisplayName = transform(RequestedForDisplayName), DisplayName = transform(RequestedForDisplayName), StartTime, FinishTime, UserName = transform(UserName), BuildDuration = FormatBuildDuration(bot), DropLocation }; return(new[] { bot.Text.BuildFormat.FormatWith(formatter), transform(BuildStatus.ToString()) }); }
public override IList <string> ToMessage(BotElement bot, Func <string, string> transform) { var formatter = new { TeamProjectCollection = transform(TeamProjectCollection), ProjectName = transform(ProjectName), BuildDefinition = transform(BuildDefinition), BuildStatus = transform(BuildStatus.ToString()), BuildUrl, BuildNumber = transform(BuildNumber), BuildReason = transform(BuildReason.ToString()), RequestedFor = transform(RequestedForUniqueName), RequestedForDisplayName = transform(RequestedForDisplayName), DisplayName = transform(RequestedForDisplayName), StartTime, FinishTime, UserName = transform(UserName), BuildDuration = FormatBuildDuration(bot), DropLocation, NewValue = NewValue == null ? bot.Text.BuildQualityNotSet : transform(NewValue), OldValue = OldValue == null ? bot.Text.BuildQualityNotSet : transform(OldValue), }; return(new[] { bot.Text.BuildQualityChangedFormat.FormatWith(formatter) }); }
public IRetentionPolicy AddRetentionPolicy(BuildReason reason, BuildStatus status, int numberToKeep, DeleteOptions deleteOptions) { throw new NotImplementedException(); }
/// <summary> /// Request a build /// </summary> /// <param name="projectName"></param> /// <param name="buildDefinitionId"></param> /// <param name="reason"></param> /// <param name="priority"></param> /// <param name="queueId"></param> /// <returns></returns> public async Task <BuildRequest> RequestBuild(string projectName, int buildDefinitionId, BuildReason reason, BuildPriority priority, int?queueId = null) { string response = await PostResponse("requests", new { definition = new { id = buildDefinitionId }, reason = reason.ToString(), priority = priority.ToString(), queue = new { id = queueId } }, projectName); return(JsonConvert.DeserializeObject <BuildRequest>(response)); }
/// <summary> /// Request a build /// </summary> /// <param name="projectName"></param> /// <param name="buildDefinitionId"></param> /// <param name="reason"></param> /// <param name="priority"></param> /// <param name="queueId"></param> /// <returns></returns> public async Task<BuildRequest> RequestBuild(string projectName, int buildDefinitionId, BuildReason reason, BuildPriority priority, int? queueId = null) { string response = await PostResponse("requests", new { definition = new { id = buildDefinitionId }, reason = reason.ToString(), priority = priority.ToString(), queue = new { id = queueId } }, projectName); return JsonConvert.DeserializeObject<BuildRequest>(response); }
public Microsoft.TeamFoundation.Build.Server.BuildReason ConvertReason(BuildReason reason) { if (reason <= BuildReason.UserCreated) { switch (reason) { case BuildReason.None: return Microsoft.TeamFoundation.Build.Server.BuildReason.None; case BuildReason.Manual: return Microsoft.TeamFoundation.Build.Server.BuildReason.Manual; case BuildReason.IndividualCI: return Microsoft.TeamFoundation.Build.Server.BuildReason.IndividualCI; case (BuildReason)3: case (BuildReason)5: case (BuildReason)6: case (BuildReason)7: break; case BuildReason.BatchedCI: return Microsoft.TeamFoundation.Build.Server.BuildReason.BatchedCI; case BuildReason.Schedule: return Microsoft.TeamFoundation.Build.Server.BuildReason.Schedule; default: if (reason == BuildReason.UserCreated) { return Microsoft.TeamFoundation.Build.Server.BuildReason.UserCreated; } break; } } else { if (reason == BuildReason.ValidateShelveset) { return Microsoft.TeamFoundation.Build.Server.BuildReason.ValidateShelveset; } if (reason == BuildReason.CheckInShelveset) { return Microsoft.TeamFoundation.Build.Server.BuildReason.CheckInShelveset; } } return Microsoft.TeamFoundation.Build.Server.BuildReason.Manual; }
public override async Task ExecuteAsync() { StringBuilder notificationMarkdown = new(); string buildUrl = string.Empty; Dictionary <string, TaskResult?> taskResults = Options.TaskNames .ToDictionary(name => name, name => (TaskResult?)null); Dictionary <string, string> buildParameters = new(); BuildResult overallResult = BuildResult.Succeeded; BuildReason buildReason = BuildReason.None; string? correlatedQueueNotificationUrl = null; if (!Options.IsDryRun) { (Uri baseUrl, VssCredentials credentials) = Options.AzdoOptions.GetConnectionDetails(); using (IVssConnection connection = _connectionFactory.Create(baseUrl, credentials)) using (IProjectHttpClient projectHttpClient = connection.GetProjectHttpClient()) using (IBuildHttpClient buildClient = connection.GetBuildHttpClient()) { TeamProject project = await projectHttpClient.GetProjectAsync(Options.AzdoOptions.Project); TeamFoundation.Build.WebApi.Build build = await buildClient.GetBuildAsync(project.Id, Options.BuildId); buildUrl = build.GetWebLink(); buildReason = build.Reason; // Get the build's queue-time parameters if (build.Parameters is not null) { JObject parametersJson = JsonConvert.DeserializeObject <JObject>(build.Parameters); foreach (KeyValuePair <string, JToken?> pair in parametersJson) { buildParameters.Add(pair.Key, pair.Value?.ToString() ?? string.Empty); } } overallResult = await GetBuildTaskResultsAsync(taskResults, buildClient, project); correlatedQueueNotificationUrl = await GetCorrelatedQueueNotificationUrlAsync(); } } notificationMarkdown.AppendLine($"# Publish Results"); notificationMarkdown.AppendLine(); WriteSummaryMarkdown(notificationMarkdown, buildUrl, overallResult, buildReason, correlatedQueueNotificationUrl); notificationMarkdown.AppendLine(); WriteTaskStatusesMarkdown(taskResults, notificationMarkdown); notificationMarkdown.AppendLine(); WriteBuildParameters(buildParameters, notificationMarkdown); notificationMarkdown.AppendLine(); WriteImagesMarkdown(notificationMarkdown); await _notificationService.PostAsync( $"Publish Result - {Options.SourceRepo}/{Options.SourceBranch}", notificationMarkdown.ToString(), new string[] { NotificationLabels.Publish, NotificationLabels.GetRepoLocationLabel(Options.SourceRepo, Options.SourceBranch) }.AppendIf(NotificationLabels.Failure, () => overallResult == BuildResult.Failed), Options.GitOptions.GetRepoUrl().ToString(), Options.GitOptions.AuthToken, Options.IsDryRun); }
private void WriteSummaryMarkdown( StringBuilder notificationMarkdown, string buildUrl, BuildResult overallResult, BuildReason buildReason, string?correlatedQueueNotificationUrl) { notificationMarkdown.AppendLine($"## Summary"); notificationMarkdown.AppendLine(); notificationMarkdown.AppendLine($"**Repo** - {Options.SourceRepo}"); notificationMarkdown.AppendLine($"**Branch** - {Options.SourceBranch}"); notificationMarkdown.AppendLine($"**Overall Result** - {ToEmoji(overallResult)} {overallResult}"); notificationMarkdown.AppendLine($"**Reason** - {buildReason}"); notificationMarkdown.AppendLine($"**Build** - [{Options.BuildId}]({buildUrl})"); if (correlatedQueueNotificationUrl is not null) { notificationMarkdown.AppendLine($"**Queued by** - [{correlatedQueueNotificationUrl}]({correlatedQueueNotificationUrl})"); } }