private void OnBuildCompletionEvent(BuildCompletionEvent2 e) { Debug.instance().Write("Process Build Number " + e.BuildNumber + " from " + e.TeamProject); var tfs = Utils.ConnectToTFS(); var buildStore = (IBuildServer) tfs.GetService(typeof(IBuildServer)); var url = new Uri(e.Url); var buildUri = HttpUtility.ParseQueryString(url.Query).Get("builduri"); var detail = buildStore.GetBuild(new Uri(buildUri)); detail.RefreshAllDetails(); var changeSetsData = InformationNodeConverters.GetAssociatedChangesets(detail); Debug.instance().Write("Number of ChangeSets: " + changeSetsData.Count); var reference = e.DefinitionPath; var index = reference.LastIndexOf("\\"); if(index >= 0) { reference = reference.Substring(index + 1); } var results = v1Component.Value.GetBuildProjects(reference); if(results.Count == 0) { Debug.instance().Write("No results for reference " + reference); } foreach (var buildProject in results) { var ts = DateTime.Parse(e.FinishTime) - DateTime.Parse(e.StartTime); var buildRun = v1Component.Value.CreateBuildRun(buildProject, e.BuildNumber, DateTime.Parse(e.FinishTime), ts.Seconds); var statuses = v1Component.Value.GetBuildRunStatuses(); var status = e.StatusCode == "Succeeded" ? statuses.First(x => x.Name == "Passed") : statuses.First(x => x.Name == "Failed"); buildRun.Status = status; v1Component.Value.CreateLink(new Link(e.Url, "TFS Build Results", true), buildRun); var descriptionBuilder = new StringBuilder(); foreach (var csd in changeSetsData) { var changeSets = v1Component.Value.GetChangeSets("TFS:" + csd.ChangesetId); foreach (var changeSet in changeSets) { if(descriptionBuilder.Length > 0) { descriptionBuilder.Append(Environment.NewLine); } descriptionBuilder.Append(changeSet.Description); foreach (var primaryWorkitem in v1Component.Value.GetPrimaryWorkitems(changeSet)) { var remove = v1Component.Value.GetBuildRuns(primaryWorkitem, buildProject); v1Component.Value.RemoveBuildRunsFromWorkitem(primaryWorkitem, remove); v1Component.Value.Save(primaryWorkitem); v1Component.Value.AddBuildRunsToWorkitem(primaryWorkitem, new[]{buildRun}); v1Component.Value.Save(primaryWorkitem); } } v1Component.Value.AddChangeSetsToBuildRun(buildRun, changeSets); v1Component.Value.Save(buildRun); } buildRun.Description = descriptionBuilder.ToString(); v1Component.Value.Save(buildRun); } Debug.instance().Write("BuildRun Save Successful"); }
private void OnBuildCompletionEvent(BuildCompletionEvent2 e) { Debug.instance().Write("Process Build Number " + e.BuildNumber + " from " + e.TeamProject); var tfs = Utils.ConnectToTFS(); var buildStore = (IBuildServer)tfs.GetService(typeof(IBuildServer)); var url = new Uri(e.Url); var buildUri = HttpUtility.ParseQueryString(url.Query).Get("builduri"); var detail = buildStore.GetBuild(new Uri(buildUri)); detail.RefreshAllDetails(); var changeSetsData = InformationNodeConverters.GetAssociatedChangesets(detail); Debug.instance().Write("Number of ChangeSets: " + changeSetsData.Count); var reference = e.DefinitionPath; var index = reference.LastIndexOf("\\"); if (index >= 0) { reference = reference.Substring(index + 1); } var results = v1Component.Value.GetBuildProjects(reference); if (results.Count == 0) { Debug.instance().Write("No results for reference " + reference); } foreach (var buildProject in results) { var ts = DateTime.Parse(e.FinishTime) - DateTime.Parse(e.StartTime); var buildRun = v1Component.Value.CreateBuildRun(buildProject, e.BuildNumber, DateTime.Parse(e.FinishTime), ts.Seconds); var statuses = v1Component.Value.GetBuildRunStatuses(); var status = e.StatusCode == "Succeeded" ? statuses.First(x => x.Name == "Passed") : statuses.First(x => x.Name == "Failed"); buildRun.Status = status; v1Component.Value.CreateLink(new Link(e.Url, "TFS Build Results", true), buildRun); var descriptionBuilder = new StringBuilder(); foreach (var csd in changeSetsData) { var changeSets = v1Component.Value.GetChangeSets("TFS:" + csd.ChangesetId); foreach (var changeSet in changeSets) { if (descriptionBuilder.Length > 0) { descriptionBuilder.Append(Environment.NewLine); } descriptionBuilder.Append(changeSet.Description); foreach (var primaryWorkitem in v1Component.Value.GetPrimaryWorkitems(changeSet)) { var remove = v1Component.Value.GetBuildRuns(primaryWorkitem, buildProject); v1Component.Value.RemoveBuildRunsFromWorkitem(primaryWorkitem, remove); v1Component.Value.Save(primaryWorkitem); v1Component.Value.AddBuildRunsToWorkitem(primaryWorkitem, new[] { buildRun }); v1Component.Value.Save(primaryWorkitem); } } v1Component.Value.AddChangeSetsToBuildRun(buildRun, changeSets); v1Component.Value.Save(buildRun); } buildRun.Description = descriptionBuilder.ToString(); v1Component.Value.Save(buildRun); } Debug.instance().Write("BuildRun Save Successful"); }