Ejemplo n.º 1
0
        private void RelatedWorkItems()
        {
            if (string.IsNullOrEmpty(this.BuildUri))
            {
                this.GetLatestInfo();
            }

            this.LogTaskMessage(string.Format(
                                    CultureInfo.CurrentCulture,
                                    "Retrieving Work Items related to Build {0}",
                                    this.BuildUri));

            var build             = this.buildServer.GetAllBuildDetails(new Uri(this.BuildUri));
            var workitemSummaries = InformationNodeConverters.GetAssociatedWorkItems(build);
            var taskItems         = new List <ITaskItem>();

            workitemSummaries.ForEach(
                x =>
            {
                ITaskItem item = new TaskItem(x.WorkItemId.ToString(CultureInfo.CurrentCulture));
                item.SetMetadata("Status", x.Status);
                item.SetMetadata("Title", x.Title ?? string.Empty);
                item.SetMetadata("Type", x.Type ?? string.Empty);
                item.SetMetadata("WorkItemUri", x.WorkItemUri != null ? x.WorkItemUri.ToString() : string.Empty);
                item.SetMetadata("AssignedTo", x.AssignedTo ?? string.Empty);

                taskItems.Add(item);
            });

            this.RelatedItems = taskItems.ToArray();
        }
Ejemplo n.º 2
0
        public static WorkItemDtoCollection GetWorkItemsFromTeamBuilds(this TfsConfigurationServer tfsConfigurationServer, Guid teamProjectCollectionId, Uri[] teamBuildUris)
        {
            if (tfsConfigurationServer == null)
            {
                throw new ArgumentNullException("tfsConfigurationServer");
            }

            TfsTeamProjectCollection tfsTeamProjectCollection = tfsConfigurationServer.GetTeamProjectCollection(teamProjectCollectionId);
            IBuildServer             buildServer   = tfsTeamProjectCollection.GetService <IBuildServer>();
            WorkItemStore            workItemStore = tfsTeamProjectCollection.GetService <WorkItemStore>();

            IBuildDetail[] buildDetails             = buildServer.QueryBuildsByUri(teamBuildUris, new[] { InformationTypes.AssociatedWorkItem }, QueryOptions.Definitions);
            Dictionary <int, WorkItemDto> workItems = new Dictionary <int, WorkItemDto>();

            foreach (IBuildDetail buildDetail in buildDetails)
            {
                List <IWorkItemSummary> workItemSummaries = InformationNodeConverters.GetAssociatedWorkItems(buildDetail);
                foreach (IWorkItemSummary workItemSummary in workItemSummaries)
                {
                    if (!workItems.ContainsKey(workItemSummary.WorkItemId))
                    {
                        WorkItem    workItem    = workItemStore.GetWorkItem(workItemSummary.WorkItemId);
                        WorkItemDto workItemDto = WorkItemDto.CreateFromWorkItem(workItem, buildDetail.BuildNumber);
                        workItems.Add(workItem.Id, workItemDto);
                    }
                }
            }

            WorkItemDtoCollection workItemDtoCollection = new WorkItemDtoCollection();

            foreach (KeyValuePair <int, WorkItemDto> keyValuePair in workItems)
            {
                workItemDtoCollection.Add(keyValuePair.Value);
            }

            return(workItemDtoCollection);
        }
Ejemplo n.º 3
0
        private List <WordDocumentGenerator.Client.Entities.BuildDetail> GetDataContext()
        {
            var buildDetails = new List <BuildDetail>();

            foreach (var build in this.Builds)
            {
                var buildDetail = new BuildDetail()
                {
                    DocumentDetail              = new DocumentDetail(),
                    Build                       = new Build(),
                    BuildConfigurations         = new List <BuildConfiguration>(),
                    BuildConfigurationSolutions = new List <BuildConfigurationSolution>(),
                    Changesets                  = new List <Changeset>(),
                    ChangesetChangeDetails      = new List <ChangesetChangeDetail>(),
                    WorkItems                   = new List <WordDocumentGenerator.Client.Entities.WorkItem>(),
                    TestResult                  = new TestResult(),
                    TestResultPassedItems       = new List <TestResultPassedItem>(),
                    TestResultFailedItems       = new List <TestResultFailedItem>(),
                    TestResultInconclusiveItems = new List <TestResultInconclusiveItem>()
                };

                // Load Document Details into BuildDetails
                buildDetail.DocumentDetail.Title     = build.BuildNumber;
                buildDetail.DocumentDetail.CreatedOn = DateTime.Now.ToLongDateString();
                buildDetail.DocumentDetail.CreatedBy = Environment.UserName;

                // Load Build Details into BuildDetails
                buildDetail.Build.BuildDefinition = !string.IsNullOrEmpty(build.BuildDefinition.Name) ? build.BuildDefinition.Name : string.Empty;              // "Tailspin Toys";
                // Null check - only if the build controller was removed & the builds not deleted will the controller be null
                buildDetail.Build.BuildController  = build.BuildDefinition.BuildController != null ? build.BuildDefinition.BuildController.Name : "Unavilable"; // "WIN-GS9GMUJITS8 - Controller";
                buildDetail.Build.BuildNumber      = !string.IsNullOrEmpty(build.BuildNumber) ? build.BuildNumber : "Unavilable";                               // "Tailspin Toys - Iteration 2_20100318.2";
                buildDetail.Build.BuildQuality     = !string.IsNullOrEmpty(build.Quality) ? build.Quality : "Not Set";
                buildDetail.Build.BuildState       = build.Status.ToString();                                                                                   // "Succeeded";
                buildDetail.Build.BuildTeamProject = build.TeamProject;                                                                                         // "Tailspin Toys";
                buildDetail.Build.BuildTestStatus  = build.TestStatus.ToString();                                                                               // "Passed";

                // TODO: Add a new function to create this from start and finish time
                buildDetail.Build.BuildTotalExecutionTimeInSeconds = CalculateTotalBuildExecutionTime(build.StartTime, build.FinishTime);          // "86 seconds";

                buildDetail.Build.BuildUri                = build.Uri;                                                                             // new Uri(@"vstfs:///VersionControl/Build/17");
                buildDetail.Build.BuildStartTime          = build.StartTime.ToString("dd MM YYYY hh:mm:ss");                                       // "01-01-2011 12:09:07";
                buildDetail.Build.BuildSourceGetVersion   = !string.IsNullOrEmpty(build.SourceGetVersion) ? build.SourceGetVersion : "Unavilable"; // "70";
                buildDetail.Build.BuildShelvesetName      = !string.IsNullOrEmpty(build.ShelvesetName) ? build.ShelvesetName : "Not Shelved";      // @"Tailspin Toys\@2_20100318.2";
                buildDetail.Build.BuildRetainIndefinitely = build.KeepForever.ToString();                                                          // "false";
                buildDetail.Build.BuildRequestedBy        = !string.IsNullOrEmpty(build.RequestedBy) ? build.RequestedBy : "Unavilable";           // @"WIN-GS9GMUJITS8\abuobe";
                buildDetail.Build.BuildReason             = build.Reason.ToString();                                                               // "CI";
                buildDetail.Build.BuildLogLocation        = !string.IsNullOrEmpty(build.LogLocation) ? build.LogLocation : "Unavailable";          // @"\\Log\\Folder\abc\TailSpin Toys\Tailspin Toys - Iteration 2_20100318.2";
                buildDetail.Build.BuildLastChangedOn      = build.LastChangedOn.ToString();                                                        // "05-01-2012 13:01:37";
                buildDetail.Build.BuildLastChangedBy      = build.LastChangedBy;                                                                   // @"UK\tarora";

                // Todo: create a new function to generate the string for the last modified duration
                buildDetail.Build.BuildLastModifiedNoOfDaysAgo = CalculateTotalBuildExecutionTime(build.LastChangedOn, DateTime.Now);

                buildDetail.Build.BuildLabelName = !string.IsNullOrEmpty(build.LabelName) ? build.LabelName : "Not Labeled"; // @"Tailspin Toys@\Label\2_20100318.2";
                buildDetail.Build.BuildIsDeleted = build.IsDeleted.ToString();                                               // "false";
                buildDetail.Build.BuildEndTime   = build.FinishTime.ToString();                                              // "01-01-2011 12:10:35";

                // ToDo: create a new function to generate the string for the completed no of days ago
                buildDetail.Build.BuildCompletedNoOfDaysAgo = CalculateTotalBuildExecutionTime(build.FinishTime, DateTime.Now);

                buildDetail.Build.BuildDropLocation = !string.IsNullOrEmpty(build.DropLocation) ? build.DropLocation : "Unavailable"; // @"\\Drop\\Folder\abc\TailSpin Toys\Tailspin Toys - Iteration 2_20100318.2";

                if (!this.Exclusions.Contains("BuildConfiguration"))
                {
                    // Load Build Configuration into BuildDetails
                    foreach (IConfigurationSummary configSummary in InformationNodeConverters.GetConfigurationSummaries(build))
                    {
                        var buildConfigSummary = new BuildConfiguration();
                        buildConfigSummary.BuildConfigFlavor        = configSummary.Flavor;                              // "Mixed Platform";
                        buildConfigSummary.BuildConfigPlatform      = configSummary.Platform;                            // "Debug";
                        buildConfigSummary.BuildConfigTotalErrors   = configSummary.TotalCompilationErrors.ToString();   // "0";
                        buildConfigSummary.BuildConfigTotalWarnings = configSummary.TotalCompilationWarnings.ToString(); // "1";

                        buildDetail.BuildConfigurations.Add(buildConfigSummary);
                    }

                    // Load Build Configuration Solutions into BuildDetails
                    foreach (IBuildProjectNode buildConfig in InformationNodeConverters.GetTopLevelProjects(build.Information))
                    {
                        var buildConfigurationSolution = new BuildConfigurationSolution();
                        buildConfigurationSolution.BuildRootNodeSolutionServerPath = buildConfig.ServerPath;
                        buildConfigurationSolution.BuildRootNodeErrorCount         = buildConfig.CompilationErrors.ToString();
                        buildConfigurationSolution.BuildRootNodeWarningCount       = buildConfig.CompilationWarnings.ToString();
                        buildConfigurationSolution.BuildRootNodeLogFile            = buildConfig.LogFile != null ? buildConfig.LogFile.Url.AbsolutePath : string.Empty;

                        buildDetail.BuildConfigurationSolutions.Add(buildConfigurationSolution);
                    }
                }

                if (!this.Exclusions.Contains("Changesets"))
                {
                    // check if the user selected Changesets, Load changesets into BuildDetails
                    foreach (IChangesetSummary changesetInfo in InformationNodeConverters.GetAssociatedChangesets(build.Information))
                    {
                        var changesetDetail = this.VersionControlServer.GetChangeset(changesetInfo.ChangesetId);
                        buildDetail.Changesets.Add(new WordDocumentGenerator.Client.Entities.Changeset
                        {
                            ChangesetId          = changesetDetail.ChangesetId.ToString(),
                            ChangesetUri         = changesetDetail.ArtifactUri,             // new Uri(@"vstfs:///VersionControl/Changeset/63"),
                            ChangesetCommittedOn = changesetDetail.CreationDate.ToString(), // "01-01-2011 12:05:01",
                            ChangesetCommittedBy = changesetDetail.Owner,                   // @"UK\tarora",
                            ChangesetComment     = changesetDetail.Comment                  // "Refactoring code improvements"
                        });

                        var changes = new List <string>();
                        foreach (var ch in changesetDetail.Changes)
                        {
                            changes.Add(ch.Item.ServerItem);
                        }

                        buildDetail.ChangesetChangeDetails.Add(new ChangesetChangeDetail
                        {
                            ChangesetChangeId          = changesetDetail.ChangesetId.ToString(),
                            ChangesetChangeServerPaths = changes
                        });
                    }
                }

                if (!this.Exclusions.Contains("WorkItems"))
                {
                    // check if the user selected WorkItems
                    // Load workItems into BuildDetails
                    foreach (IWorkItemSummary workItemInfo in InformationNodeConverters.GetAssociatedWorkItems(build))
                    {
                        var workItemDetail = WorkItemStore.GetWorkItem(workItemInfo.WorkItemId);
                        buildDetail.WorkItems.Add(new WordDocumentGenerator.Client.Entities.WorkItem()
                        {
                            WorkItemId            = workItemDetail.Id.ToString(),
                            WorkItemUri           = workItemDetail.Uri,
                            WorkItemType          = workItemDetail.Type.Name,
                            WorkItemTitle         = workItemDetail.Title,
                            WorkItemState         = workItemDetail.State,
                            WorkItemIterationPath = workItemDetail.IterationPath,
                            WorkItemAreaPath      = workItemDetail.AreaPath,
                            WorkItemAssignedTo    = workItemInfo.AssignedTo
                        });
                    }

                    string introduction = string.Empty;
                    foreach (var wiT in buildDetail.WorkItems.Select(d => d.WorkItemType).Distinct())
                    {
                        introduction = string.Format("{0} {1}, ", buildDetail.WorkItems.Where(wi => wi.WorkItemType == wiT).ToList().Count, string.Format("{0}(s)", wiT));
                    }

                    if (introduction.Length != 0)
                    {
                        introduction = introduction.Remove(introduction.Length - 2);
                    }

                    buildDetail.WorkItemIntroduction = introduction;
                }

                if (!this.Exclusions.Contains("TestResults"))
                {
                    // check if user selected Test Results
                    // Load test results into BuildDetails
                    foreach (var tr in TestManagementService.GetTeamProject(buildDetail.Build.BuildTeamProject).TestRuns.ByBuild(build.Uri))
                    {
                        buildDetail.TestResult.TestResultId                    = tr.Id.ToString();
                        buildDetail.TestResult.TestResultTitle                 = tr.Title;
                        buildDetail.TestResult.TestResultStatus                = tr.State.ToString();                        // "Complete";
                        buildDetail.TestResult.TestResultTotalTest             = tr.Statistics.TotalTests.ToString();        // "24";
                        buildDetail.TestResult.TestResultTotalTestCompleted    = tr.Statistics.CompletedTests.ToString();    // "24";
                        buildDetail.TestResult.TestResultTotalTestPassed       = tr.Statistics.PassedTests.ToString();       // "22";
                        buildDetail.TestResult.TestResultTotalTestFailed       = tr.Statistics.FailedTests.ToString();       // "1";
                        buildDetail.TestResult.TestResultTotalTestInconclusive = tr.Statistics.InconclusiveTests.ToString(); // "1";

                        double result = 0.0;
                        if (tr.Statistics.TotalTests != 0)
                        {
                            // var passPerc = decimal.MinValue;
                            result = tr.Statistics.PassedTests * 100 / tr.Statistics.TotalTests;
                        }

                        buildDetail.TestResult.TestResultTotalTestPassRate = result.ToString();
                        buildDetail.TestResult.TestResultIsAutomated       = tr.IsAutomated.ToString(); // "false";

                        // Load testResultPassedItems into BuildDetails
                        // Check for passed tests
                        foreach (ITestCaseResult lp in tr.QueryResultsByOutcome(TestOutcome.Passed))
                        {
                            buildDetail.TestResultPassedItems.Add(new WordDocumentGenerator.Client.Entities.TestResultPassedItem()
                            {
                                TestResultPassedListStatus = "Passed",
                                TestResultPassedListTitle  = lp.TestCaseTitle
                            });
                        }

                        // Load testResultsFailedItems into BuildDetails
                        foreach (ITestCaseResult lf in tr.QueryResultsByOutcome(TestOutcome.Failed))
                        {
                            buildDetail.TestResultFailedItems.Add(new WordDocumentGenerator.Client.Entities.TestResultFailedItem()
                            {
                                TestResultFailedListStatus = "Failed",
                                TestResultFailedListTitle  = lf.TestCaseTitle,
                                TestResultFailedListReason = lf.ErrorMessage
                            });
                        }

                        // Load testResultsInconclusiveItems into BuildDetails
                        foreach (ITestCaseResult li in tr.QueryResultsByOutcome(TestOutcome.Inconclusive))
                        {
                            buildDetail.TestResultInconclusiveItems.Add(new WordDocumentGenerator.Client.Entities.TestResultInconclusiveItem()
                            {
                                TestResultInconclusiveListStatus = "Inconclusive",
                                TestResultInconclusiveListTitle  = li.TestCaseTitle
                            });
                        }
                    }
                }

                buildDetails.Add(buildDetail);
            }

            return(buildDetails);
        }