private static IBuildDetailSpec GetBuildDetailSpec(int maxDays, string teamProject, string buildDefinition, IBuildServer buildServer) { IBuildDetailSpec spec = string.IsNullOrEmpty(buildDefinition) ? buildServer.CreateBuildDetailSpec(teamProject) : buildServer.CreateBuildDetailSpec(teamProject, buildDefinition); spec.MinFinishTime = DateTime.Now.Subtract(TimeSpan.FromDays(maxDays)); spec.MaxFinishTime = DateTime.Now; spec.QueryDeletedOption = QueryDeletedOption.IncludeDeleted; return spec; }
public IEnumerable <BuildStatus> GetBuildStatuses(IEnumerable <MyTfsBuildDefinition> buildDefinitionsQuery, bool applyBuildQuality) { var buildDefinitionUris = buildDefinitionsQuery.Select(bd => bd.Uri).ToArray(); var inProgressQuery = _buildServer.CreateBuildDetailSpec(buildDefinitionUris); inProgressQuery.Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.InProgress; inProgressQuery.QueryOrder = BuildQueryOrder.FinishTimeDescending; inProgressQuery.InformationTypes = new[] { ASSOCIATED_CHANGESET, ASSOCIATED_COMMIT }; inProgressQuery.QueryOptions = _firstRequest ? QueryOptions.Process : QueryOptions.None; var mostRecentQuery = _buildServer.CreateBuildDetailSpec(buildDefinitionUris); mostRecentQuery.MaxBuildsPerDefinition = 1; mostRecentQuery.Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.Failed | Microsoft.TeamFoundation.Build.Client.BuildStatus.PartiallySucceeded | Microsoft.TeamFoundation.Build.Client.BuildStatus.Succeeded; mostRecentQuery.QueryOrder = BuildQueryOrder.FinishTimeDescending; mostRecentQuery.InformationTypes = new[] { ASSOCIATED_CHANGESET, ASSOCIATED_COMMIT }; mostRecentQuery.QueryOptions = _firstRequest ? QueryOptions.Process : QueryOptions.None; _firstRequest = false; var buildQueryResult = _buildServer.QueryBuilds(new [] { inProgressQuery, mostRecentQuery }); var buildStatuses = new Dictionary <String, BuildStatus>(); var buildDetail = new Dictionary <String, IBuildDetail>(); // Get last completed for each def foreach (var build in buildQueryResult[1].Builds) { buildDetail[GetBuildDefIdFromBuildDefUri(build.BuildDefinitionUri)] = build; } // Get current build (if any) and overwrite last completed foreach (var build in buildQueryResult[0].Builds) { buildDetail[GetBuildDefIdFromBuildDefUri(build.BuildDefinitionUri)] = build; } foreach (var build in buildDetail) { if (!buildStatuses.ContainsKey(build.Key)) { buildStatuses[build.Key] = CreateBuildStatus(build.Value, buildDefinitionsQuery, applyBuildQuality); } } return(buildStatuses.Values.ToArray()); }
public IEnumerable <BuildStatus> GetBuildStatuses(IEnumerable <MyTfsBuildDefinition> buildDefinitionsQuery, bool applyBuildQuality) { var buildDefinitionUris = buildDefinitionsQuery.Select(bd => bd.Uri); IBuildDetailSpec[] buildDetailSpec = new IBuildDetailSpec[2]; buildDetailSpec[0] = _buildServer.CreateBuildDetailSpec(buildDefinitionUris); buildDetailSpec[0].Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.InProgress; buildDetailSpec[0].QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec[0].InformationTypes = new string[] { "AssociatedChangeset" }; buildDetailSpec[0].QueryOptions = _firstRequest ? QueryOptions.Process : QueryOptions.None; buildDetailSpec[1] = _buildServer.CreateBuildDetailSpec(buildDefinitionUris); buildDetailSpec[1].MaxBuildsPerDefinition = 1; buildDetailSpec[1].Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.All; buildDetailSpec[1].QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec[1].InformationTypes = new string[] { "AssociatedChangeset" }; buildDetailSpec[1].QueryOptions = _firstRequest ? QueryOptions.Process : QueryOptions.None; _firstRequest = false; IBuildQueryResult[] buildQueryResult = _buildServer.QueryBuilds(buildDetailSpec); Dictionary <String, BuildStatus> buildStatuses = new Dictionary <String, BuildStatus>(); Dictionary <String, IBuildDetail> buildDetail = new Dictionary <String, IBuildDetail>(); // Get last completed for each def foreach (var build in buildQueryResult[1].Builds) { buildDetail[GetBuildDefIdFromBuildDefUri(build.BuildDefinitionUri)] = build; } // Get current build (if any) and overwrite last completed foreach (var build in buildQueryResult[0].Builds) { buildDetail[GetBuildDefIdFromBuildDefUri(build.BuildDefinitionUri)] = build; } foreach (var build in buildDetail) { if (!buildStatuses.ContainsKey(build.Key)) { buildStatuses[build.Key] = CreateBuildStatus(build.Value, applyBuildQuality); } } return(buildStatuses.Values.ToArray()); }
public static TeamBuildDtoCollection GetTeamBuilds(this TfsConfigurationServer tfsConfigurationServer, Guid teamProjectCollectionId, string teamProjectName, IEnumerable <string> teamBuildDefinitionNames) { if (tfsConfigurationServer == null) { throw new ArgumentNullException("tfsConfigurationServer"); } if (teamBuildDefinitionNames == null) { throw new ArgumentNullException("teamBuildDefinitionNames"); } TfsTeamProjectCollection tfsTeamProjectCollection = tfsConfigurationServer.GetTeamProjectCollection(teamProjectCollectionId); IBuildServer buildServer = tfsTeamProjectCollection.GetService <IBuildServer>(); TeamBuildDtoCollection teamBuildDtoCollection = new TeamBuildDtoCollection(); foreach (string teamBuildDefinitionName in teamBuildDefinitionNames) { IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(teamProjectName, teamBuildDefinitionName); buildDetailSpec.Reason = BuildReason.All; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec.QueryDeletedOption = QueryDeletedOption.ExcludeDeleted; IBuildQueryResult buildQueryResult = buildServer.QueryBuilds(buildDetailSpec); foreach (IBuildDetail buildDetail in buildQueryResult.Builds) { TeamBuildDto teamBuildDto = new TeamBuildDto(); teamBuildDto.BuildNumber = buildDetail.BuildNumber; teamBuildDto.Uri = buildDetail.Uri; teamBuildDto.DefinitionName = teamBuildDefinitionName; teamBuildDtoCollection.Add(teamBuildDto); } } return(teamBuildDtoCollection); }
public static SortedDictionary <string, string> GetBuilds(string projName, string defName) { SortedDictionary <string, string> lsBuildsQuery = new SortedDictionary <string, string>(); try { IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); ILinking iLinkingService = tfs.GetService <ILinking>(); //can be used later to get build URL link //Specify query IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(projName.Trim(), defName.Trim()); spec.InformationTypes = null; // for speed improvement spec.MinFinishTime = DateTime.Now.AddDays(-21); //to get only builds of last 2 weeks //spec.MaxBuildsPerDefinition = 1; //get only one build per build definintion spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; //get the latest build only spec.QueryOptions = QueryOptions.All; IBuildDetail[] bDetails = buildServer.QueryBuilds(spec).Builds; List <IBuildDetail> ibDetails = bDetails.OrderBy(x => x.CompilationStatus == BuildPhaseStatus.Succeeded).OrderByDescending(x => x.StartTime).Take(10).ToList(); foreach (IBuildDetail ibdet in ibDetails) { lsBuildsQuery.Add(ibdet.BuildNumber, ibdet.Uri.Port.ToString()); } } catch (Exception ex) { lsBuildsQuery.Add("Please Load the definition first", "-1"); } return(lsBuildsQuery); }
private IBuildDetailSpec GetBuildDetailSpec( IBuildServer buildServer, string project, string buildGroup, DateTime since) { IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(project, buildGroup); spec.MinFinishTime = since; spec.QueryOrder = BuildQueryOrder.StartTimeAscending; spec.InformationTypes = null; spec.InformationTypes = new[] { InformationTypes.ConfigurationSummary, InformationTypes.AssociatedCommit, InformationTypes.AssociatedChangeset, InformationTypes.CompilationSummary, InformationTypes.BuildError, InformationTypes.BuildWarning }; spec.Status = BuildStatus.Failed | BuildStatus.PartiallySucceeded | BuildStatus.Succeeded; spec.QueryDeletedOption = QueryDeletedOption.ExcludeDeleted; return(spec); }
public static void FeedBuildDefinition(ICollection <BuildDefinition> collection, IBuildServer bs, string projectName) { IBuildDefinition[] buildDefinitions = bs.QueryBuildDefinitions(projectName); foreach (IBuildDefinition buildDefinition in buildDefinitions) { IBuildDetailSpec buildDetailSpec = bs.CreateBuildDetailSpec(buildDefinition); buildDetailSpec.QueryDeletedOption = QueryDeletedOption.ExcludeDeleted; buildDetailSpec.MaxBuildsPerDefinition = 1; buildDetailSpec.Reason = BuildReason.All;; buildDetailSpec.Status = BuildStatus.Failed; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec.MinFinishTime = DateTime.Now.AddMonths(-1); IBuildQueryResult overallBuildDetailsQueryResults = bs.QueryBuilds(buildDetailSpec); IBuildDetail[] buildDetails = bs.QueryBuilds(buildDefinition); int failedOrPartialCount = buildDetails.Count(x => x.Status == BuildStatus.Failed || x.Status == BuildStatus.PartiallySucceeded); IBuildDetail lastFailedBuild = buildDetails.Where(x => x.Status == BuildStatus.Failed).OrderBy(x => x.FinishTime).LastOrDefault(); IBuildDetail lastSucceededBuild = buildDetails.Where(x => x.Status == BuildStatus.Succeeded).OrderBy(x => x.FinishTime).LastOrDefault(); int buildCount = buildDetails.Count(); BuildDefinition buildDef = new BuildDefinition() { Name = buildDefinition.Name, Enabled = buildDefinition.Enabled, ContinuousIntegrationType = buildDefinition.ContinuousIntegrationType.ToString(), FailedOrPartialRatio = buildCount != 0 ? failedOrPartialCount / buildCount : 0, RetainedBuild = buildCount, LastSuccess = lastSucceededBuild != null ? lastSucceededBuild.FinishTime : DateTime.MinValue, LastFail = lastFailedBuild != null ? lastFailedBuild.FinishTime : DateTime.MinValue }; collection.Add(buildDef); } }
private void LoadCbBuilds(object sender) { cbBuilds.Items.Clear(); // bdef is the selected build definition var bdef = (((ComboBox)sender).SelectedItem) as IBuildDefinition; _builddef = bdef; if (bdef != null) { // _bs = IBuildServer service, create a new query IBuildDetailSpec def = bs.CreateBuildDetailSpec(_teamFoundationContext.TeamProjectName); // only bring back the last 100 deleted builds def.MaxBuildsPerDefinition = 100; // query for only deleted builds def.QueryDeletedOption = QueryDeletedOption.OnlyDeleted; // Last deleted should be returned 1st def.QueryOrder = BuildQueryOrder.FinishTimeDescending; // Only look for deleted builds in the chosen build definition def.DefinitionSpec.Name = bdef.Name; // Bring back deleted builds from any state def.Status = BuildStatus.All; // Pass this query for processing to the build service IBuildDetail[] builds = tfs.GetService <IBuildServer>().QueryBuilds(def).Builds; foreach (IBuildDetail build in builds) { cbBuilds.Items.Add(build.BuildNumber); } cbBuilds.IsEnabled = true; } }
private TimeSpan GetLastSuccesfulBuildTime(IBuildServer buildServer, CatalogNode teamProjectNode, IBuildDefinition def) { var buildTime = new TimeSpan(); try { var inProgressBuildDetailSpec = buildServer.CreateBuildDetailSpec(teamProjectNode.Resource.DisplayName, def.Name); inProgressBuildDetailSpec.Status = BuildStatus.Succeeded; inProgressBuildDetailSpec.MaxBuildsPerDefinition = 1; inProgressBuildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; var lastSuccesfulBuild = buildServer.QueryBuilds(inProgressBuildDetailSpec).Builds.FirstOrDefault(); if (lastSuccesfulBuild != null) { buildTime = lastSuccesfulBuild.FinishTime - lastSuccesfulBuild.StartTime; } } catch (Exception e) { LogService.WriteError(e); throw; } return(buildTime); }
private static IBuildDetail Arrange(MockRepository mockRepository, IEnumerable <string> existingBuildNumbers) { IBuildDetail mockBuildDetailForCurrentBuild = mockRepository.DynamicMock <IBuildDetail>(); IBuildServer mockBuildServer = mockRepository.DynamicMock <IBuildServer>(); IBuildDetailSpec mockBuildDetailSpec = mockRepository.DynamicMock <IBuildDetailSpec>(); IBuildQueryResult mockBuildQueryResult = mockRepository.DynamicMock <IBuildQueryResult>(); ArrayList previousBuildsList = new ArrayList(); foreach (string existingBuildNumber in existingBuildNumbers) { IBuildDetail mockBuildDetailForPreviousBuild = mockRepository.DynamicMock <IBuildDetail>(); previousBuildsList.Add(mockBuildDetailForPreviousBuild); Expect.Call(mockBuildDetailForPreviousBuild.BuildNumber).Return(existingBuildNumber); } IBuildDetail[] previousBuilds = (IBuildDetail[])previousBuildsList.ToArray(typeof(IBuildDetail)); mockRepository.Record(); Expect.Call(mockBuildDetailForCurrentBuild.BuildServer).Return(mockBuildServer); Expect.Call(mockBuildDetailForCurrentBuild.TeamProject).Return("TeamProjectName"); Expect.Call(mockBuildServer.CreateBuildDetailSpec("TeamProjectName")).Return(mockBuildDetailSpec); Expect.Call(mockBuildServer.QueryBuilds(mockBuildDetailSpec)).Return(mockBuildQueryResult); Expect.Call(mockBuildQueryResult.Builds).Return(previousBuilds); return(mockBuildDetailForCurrentBuild); }
private IEnumerable <IBuildDetail> GetBuildDetailsFromServer(IEnumerable <MyTfsBuildDefinition> buildDefinitions) { var buildDefinitionUris = buildDefinitions.Select(bd => bd.Uri); IBuildDetailSpec buildDetailSpec = _buildServer.CreateBuildDetailSpec(buildDefinitionUris); buildDetailSpec.MaxBuildsPerDefinition = 1; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; IBuildQueryResult buildQueryResults; try { buildQueryResults = _buildServer.QueryBuilds(buildDetailSpec); } catch (DatabaseOperationTimeoutException ex) { Log.Debug(ex); throw new ServerUnavailableException(); } catch (Exception ex) { Log.Error("Error retrieving build details", ex); throw new ServerUnavailableException("Error retrieving build details", ex); } var latestBuilds = from build in buildQueryResults.Builds group build by build.BuildDefinition.Id into g select g.OrderByDescending(b => b.StartTime).First(); return(latestBuilds.ToList()); }
private IEnumerable<IBuildDetail> GetBuilds(IBuildServer server, string status, DateTime started, DateTime finished, string collection) { var query = server.CreateBuildDetailSpec(collection); query.Status = (BuildStatus)Enum.Parse(typeof(BuildStatus), status); query.MinFinishTime = started; query.MaxFinishTime = finished; return server.QueryBuilds(query).Builds; }
private IBuildDetail GetLatestBuildDetails(IBuildServer buildServer, IBuildDefinition def) { IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(_configuration.TfsTeamProjectName, def.Name); spec.MaxBuildsPerDefinition = 1; spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; var builds = buildServer.QueryBuilds(spec); return builds.Builds.FirstOrDefault(); }
/// <summary> /// This method gets all the builds for specified time period /// </summary> /// <param name="bd"></param> /// <param name="startTime"></param> /// <param name="endTime"></param> /// <returns></returns> public IBuildDetail[] GetBuildsForSpecifiedTimePeriod(BuildDefinition bd, DateTime startTime, DateTime endTime) { try { //Specify query var spec = _buildServer.CreateBuildDetailSpec(bd.TeamProject, bd.DefinitionName); spec.InformationTypes = null; // for speed improvement spec.MinFinishTime = startTime; //to get only builds of last 3 weeks spec.MaxFinishTime = endTime; spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; //get the latest build only spec.QueryOptions = QueryOptions.All; return(_buildServer.QueryBuilds(spec).Builds); } catch (Exception) { return(null); } }
private void MonitorBuilds(object state) { if (!_isBackgroundProcessRunning) { _isBackgroundProcessRunning = true; List <BuildDefinitionItem> crashedBuilds = new List <BuildDefinitionItem>(); foreach (var buildItem in BuildList) { BuildRunItem newLastRun = null; // get last run for particular build //var details = buildItem.TFSBuildDefInstance.QueryBuilds(); IBuildDetailSpec spec = BuildServer.CreateBuildDetailSpec("*"); spec.InformationTypes = null; // for speed improvement //spec.MinFinishTime = DateTime.Now.AddDays(-21); //to get only builds of last 3 weeks spec.MaxBuildsPerDefinition = 1; //get only one build per build definintion spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; //get the latest build only spec.QueryOptions = QueryOptions.All; spec.DefinitionSpec.Name = buildItem.Name; var details = BuildServer.QueryBuilds(spec).Builds; if (details != null) { newLastRun = GetBuildRunInfo(details); //check that status changed if (newLastRun != null && buildItem.LastRun != null && ( newLastRun.BuildNumber != buildItem.LastRun.BuildNumber || newLastRun.BuildStatus != buildItem.LastRun.BuildStatus ) ) { buildItem.LastRun = newLastRun; crashedBuilds.Add(buildItem); } } } if (BuildStatusChanged != null) { BuildStatusChanged(this, new BuildStatusChangedEventArgs() { BuildDefinitions = crashedBuilds.ToArray() }); } _isBackgroundProcessRunning = false; } }
public IList <IBuild> QueryBuilds(DateTime?sinceDate, bool?running) { var result = new List <IBuild>(); foreach (var buildDefinition in _buildDefinitions) { var buildSpec = _buildServer.CreateBuildDetailSpec(buildDefinition); buildSpec.InformationTypes = null; if (sinceDate.HasValue) { buildSpec.MinFinishTime = sinceDate.Value; } if (running.HasValue && running.Value) { buildSpec.Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.InProgress; } result.AddRange(_buildServer.QueryBuilds(buildSpec).Builds.Select(b => { var id = b.Uri.AbsoluteUri.Substring(b.Uri.AbsoluteUri.LastIndexOf('/') + 1); string duration = string.Empty; if (b.Status != Microsoft.TeamFoundation.Build.Client.BuildStatus.NotStarted && b.Status != Microsoft.TeamFoundation.Build.Client.BuildStatus.None && b.Status != Microsoft.TeamFoundation.Build.Client.BuildStatus.Stopped) { if (b.Status == Microsoft.TeamFoundation.Build.Client.BuildStatus.InProgress) { duration = " / " + GetDuration(DateTime.Now - b.StartTime); } else { duration = " / " + GetDuration(b.FinishTime - b.StartTime); } } return(new BuildInfo { Id = id, Label = b.BuildNumber, StartDate = b.StartTime, Status = ConvertStatus(b.Status), IsFinished = b.BuildFinished, Description = GetStatus(b) + duration, Revision = b.SourceGetVersion, Url = _urlPrefix + (_isWebServer ? Uri.EscapeDataString(b.Uri.AbsoluteUri) + "&_a=summary" : id), }); }).Cast <IBuild>().ToList()); } result = QueryBuilds2015(result, sinceDate, running); return(result); }
private IBuildDetail GetLatestBuildDetails(IBuildServer buildServer, IBuildDefinition def) { IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(_configuration.TfsTeamProjectName, def.Name); spec.MaxBuildsPerDefinition = 1; spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; var builds = buildServer.QueryBuilds(spec); return(builds.Builds.FirstOrDefault()); }
public static string GetLastSuccededDropLocation(string projName, string buildDefinitionName) { projName = GetProjectName(projName); var cred = new NetworkCredential("SERVICE_ACCOUNT_NAME", "SERVICE_ACCOUNT_PASSWORD", "SERVICE_ACCOUNT_DOMAIN"); var configurationServerUri = new Uri("TFS_URL_TILL_COLLECTION"); TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(configurationServerUri); CatalogNode configurationServerNode = configurationServer.CatalogNode; // Query the children of the configuration server node for all of the team project collection nodes ReadOnlyCollection <CatalogNode> tpcNodes = configurationServerNode.QueryChildren( new Guid[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None); foreach (CatalogNode tpcNode in tpcNodes) { ServiceDefinition tpcServiceDefinition = tpcNode.Resource.ServiceReferences["Location"]; ILocationService configLocationService = configurationServer.GetService <ILocationService>(); Uri tpcUri = new Uri(configLocationService.LocationForCurrentConnection(tpcServiceDefinition)); // Actually connect to the team project collection TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tpcUri); ITestManagementService tms = tpc.GetService <ITestManagementService>(); ITestManagementTeamProject proj = tms.GetTeamProject(projName); IBuildServer tfsBuildServer = tpc.GetService <IBuildServer>(); // Reading from XML try { IBuildServer buildServer = (IBuildServer)tpc.GetService(typeof(IBuildServer)); //Specify query IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(projName.Trim(), buildDefinitionName.Trim()); spec.InformationTypes = null; // for speed improvement spec.QueryOrder = BuildQueryOrder.FinishTimeAscending; //get the latest build only spec.QueryOptions = QueryOptions.All; IBuildDetail bDetail = buildServer.QueryBuilds(spec).Builds.OrderBy(x => x.CompilationStatus == BuildPhaseStatus.Succeeded).Last(); LatestTestBuild = bDetail.DropLocation; LoggerUtil.LogMessageToFile("The ip resolve"); IPAddress ip = null; string arr2 = LatestTestBuild.Split('\\')[2]; Network.GetResolvedConnecionIPAddress(LatestTestBuild.Split('\\')[2], out ip); string temp = string.Join(@"\", LatestTestBuild.Split('\\').Select(s => s.Replace(arr2, ip.ToString())).ToArray()); LatestTestBuild = temp; LoggerUtil.LogMessageToFile(LatestTestBuild); break; } catch { } } return(LatestTestBuild); }
private IBuildDetail GetLatestBuildDetails(IBuildServer buildServer, IBuildDefinition def, string teamProjectName) { IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(teamProjectName, def.Name); spec.MaxBuildsPerDefinition = 1; spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; spec.Status = BuildStatus.Succeeded; spec.Reason = BuildReason.All ^ BuildReason.ValidateShelveset; var builds = buildServer.QueryBuilds(spec); return(builds.Builds.FirstOrDefault()); }
static void QueryBuildHistory(IBuildServer buildServer) { Console.WriteLine(); Console.WriteLine("QueryBuildHistory:"); IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec("Contoso"); spec.MinFinishTime = DateTime.Now.AddDays(-5); IBuildDetail[] builds = buildServer.QueryBuilds(spec).Builds; foreach (IBuildDetail build in builds) { Console.WriteLine(build.BuildNumber); } }
public static string GetBuildPath(string buildTitle, string projName, string defName) { IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); //Specify query IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(projName.Trim(), defName.Trim()); spec.InformationTypes = null; // for speed improvement spec.MinFinishTime = DateTime.Now.AddDays(-21); //to get only builds of last 2 weeks //spec.MaxBuildsPerDefinition = 1; //get only one build per build definintion spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; //get the latest build only spec.QueryOptions = QueryOptions.All; IBuildDetail bDetail = buildServer.QueryBuilds(spec).Builds.Where(x => x.DropLocation.Contains(buildTitle)).First(); return(bDetail.DropLocation); }
private void updateBuildNumber(int testPlanId) { //Define the variables string serverurl = Collection; Uri configurationServerUri = new Uri(serverurl); string project = _ProjectName; int myPlansId = testPlanId; try { //Get the build uri needed from build number TfsTeamProjectCollection tfsserv = new TfsTeamProjectCollection(configurationServerUri); Uri buildUri = null; IBuildServer buildServer = (IBuildServer)tfsserv.GetService(typeof(IBuildServer)); IBuildDetailSpec detailSpec = buildServer.CreateBuildDetailSpec(project); detailSpec.MaxBuildsPerDefinition = 1; detailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; IBuildQueryResult results = buildServer.QueryBuilds(detailSpec); if (results.Builds.Length == 1) { IBuildDetail detail = results.Builds[0]; buildUri = detail.Uri; } //Update the test plan ITestManagementTeamProject proj = GetProject(serverurl, project); ITestPlan plan = proj.TestPlans.Find(myPlansId); Console.WriteLine("Test Plan: {0}", plan.Name); Console.WriteLine("Plan ID: {0}", plan.Id); Console.WriteLine("Previous Build Uri: {0}", plan.PreviousBuildUri); Console.WriteLine("Build Currently In Use: {0}", plan.BuildNumber); plan.BuildUri = buildUri; Console.WriteLine("\n Build updated in Test Plan \n"); Console.WriteLine("Build Currently In Use: {0}", plan.BuildNumber); plan.Save(); } catch (Exception e) { Console.WriteLine("\n There was an error \n"); Console.WriteLine(e); } }
private static IBuildDetail[] RetourneNbBuildDef(IBuildServer _bs, string TeamProject, IBuildDefinition buildDefinition, int nbMax) { IBuildDetailSpec def = _bs.CreateBuildDetailSpec(TeamProject); // only bring back the last 100 deleted builds def.MaxBuildsPerDefinition = nbMax; // query for only deleted builds def.QueryDeletedOption = QueryDeletedOption.OnlyDeleted; // Last deleted should be returned 1st def.QueryOrder = BuildQueryOrder.FinishTimeDescending; // Only look for deleted builds in the chosen build definition def.DefinitionSpec.Name = buildDefinition.Name; // Bring back deleted builds from any state def.Status = BuildStatus.All; // Pass this query for processing to the build service IBuildDetail[] builds = _bs.QueryBuilds(def).Builds; return(builds); }
/// <summary> /// Returns available builds in the form of build numbers for a given team project and build definition. /// </summary> /// <param name="teamProject">Team project name</param> /// <param name="buildDefinition">Build definition name</param> /// <returns>List of strings</returns> public IEnumerable <string> GetAvailableBuildNumbers(string teamProject, string buildDefinition) { if (null == teamProject) { throw new ArgumentNullException("teamProject"); } if (null == buildDefinition) { throw new ArgumentNullException("buildDefinition"); } var spec = _buildServer.CreateBuildDetailSpec(teamProject, buildDefinition); spec.InformationTypes = new string[] { }; return(new List <string>(_buildServer.QueryBuilds(spec).Builds.Select(x => x.BuildNumber))); }
private IBuildDetail GetBuild(IBuildServer buildServer, CatalogNode teamProjectNode, IBuildDefinition def, DateTime filterDate) { IBuildDetail build = null; try { var buildDetailSpec = buildServer.CreateBuildDetailSpec(teamProjectNode.Resource.DisplayName, def.Name); buildDetailSpec.MaxBuildsPerDefinition = 1; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; buildDetailSpec.MinFinishTime = filterDate; build = buildServer.QueryBuilds(buildDetailSpec).Builds.FirstOrDefault(); } catch (Exception e) { LogService.WriteError(e); throw; } return build; }
private static void DeleteBuildsForDefinition(ApplicationTask task, IBuildServer buildServer, int step, BuildDefinitionInfo buildDefinition) { var buildDetailSpec = buildServer.CreateBuildDetailSpec(new[] { buildDefinition.Uri, }); var buildsToDelete = buildServer.QueryBuilds(buildDetailSpec).Builds; if (buildsToDelete.Any()) { task.SetProgress(step, string.Format(CultureInfo.CurrentCulture, "Deleting {0} builds for definition \"{1}\" in Team Project \"{2}\"", buildsToDelete.Count(), buildDefinition.Name, buildDefinition.TeamProject)); foreach (var buildToDelete in buildsToDelete) { try { buildToDelete.Delete(DeleteOptions.All); } catch (Exception exc) { task.SetWarning(string.Format(CultureInfo.CurrentCulture, "An error occurred while deleting build number \"{0}\" for definition \"{1}\" in Team Project \"{2}\"", buildToDelete.BuildNumber, buildDefinition.Name, buildDefinition.TeamProject), exc); } } } }
/// <summary> /// Gets the latest build number /// </summary> /// <param name="projectName"></param> /// <returns></returns> public string GetLatestBuildNumber() { (new Logger()) .SetMessage("Querying build definitions.") .SetLoggingType(Logger.Type.Information) .Display(); IBuildServer buildServer = this.projectCollection.GetService <IBuildServer>(); IBuildDetailSpec buildSpec = buildServer.CreateBuildDetailSpec(projectName); buildSpec.MaxBuildsPerDefinition = 1; buildSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; IBuildQueryResult query = buildServer.QueryBuilds(buildSpec); if (query.Builds.Count() == 0) { return(null); } IBuildDetail detail = query.Builds[0]; return(detail.BuildNumber); }
static void Main(string[] args) { // Auth with UserName & Password (Microsoft Acc): //BasicAuthCredential basicCred = new BasicAuthCredential(new NetworkCredential("*****@*****.**", "pw")); //TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred); //tfsCred.AllowInteractive = false; // //TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"), tfsCred); TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection")); IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); var builds = buildServer.QueryBuilds("DrinkHub"); foreach (IBuildDetail build in builds) { var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}", build.BuildDefinition.Name, build.Status.ToString(), build.FinishTime, build.LabelName, Environment.NewLine); System.Console.WriteLine(result); } // Detailed via http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/ var buildSpec = buildServer.CreateBuildDetailSpec("DrinkHub", "Main.Continuous"); buildSpec.InformationTypes = null; var buildDetails = buildServer.QueryBuilds(buildSpec).Builds; Console.WriteLine(buildDetails.First().Status); Console.ReadLine(); }
public IEnumerable <BuildInformation> GetBuilds(string projectName, string buildDefinition, DateTime minFinishedTime) { IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(projectName, buildDefinition); buildDetailSpec.MaxBuildsPerDefinition = 5; buildDetailSpec.QueryOrder = BuildQueryOrder.StartTimeDescending; buildDetailSpec.MinFinishTime = minFinishedTime.AddSeconds(1); var builds = buildServer.QueryBuilds(buildDetailSpec); var tests = testManagementService.GetTeamProject(projectName); return(builds.Builds .Select(b => new { Build = b, TestRuns = tests.TestRuns.ByBuild(b.Uri).ToList(), StaticAnalysis = b.GetStaticAnalysisInfo() ?? new StaticAnalysisInfo(), CheckinComments = b.GetCheckinComments(), WorkItemTitles = b.GetWorkItemTitles() }) .Select(b => new BuildInformation { Uri = b.Build.Uri.ToString(), StartedAt = b.Build.StartTime, FinishedAt = b.Build.FinishTime, TriggeredBy = RemoveDomainFromUsername(b.Build.RequestedFor), Status = TranslateBuildStatus(b.Build.Status).ToString(), TestsFailed = b.TestRuns.Select(run => run.Statistics.FailedTests).Sum(), TestsPassed = b.TestRuns.Select(run => run.Statistics.PassedTests).Sum(), TestsTotal = b.TestRuns.Select(run => run.Statistics.TotalTests).Sum(), CodeAnalysisErrors = b.StaticAnalysis.StaticAnalysisErrors, CodeAnalysisWarnings = b.StaticAnalysis.StaticAnalysisWarnings, CompilerWarnings = b.StaticAnalysis.CompilationWarnings, CheckinComments = string.Join(" +++ ", b.CheckinComments), WorkItemTitles = string.Join(", ", b.WorkItemTitles), }).ToList()); }
private TimeSpan GetLastSuccesfulBuildTime(IBuildServer buildServer, CatalogNode teamProjectNode, IBuildDefinition def) { var buildTime = new TimeSpan(); try { var inProgressBuildDetailSpec = buildServer.CreateBuildDetailSpec(teamProjectNode.Resource.DisplayName, def.Name); inProgressBuildDetailSpec.Status = BuildStatus.Succeeded; inProgressBuildDetailSpec.MaxBuildsPerDefinition = 1; inProgressBuildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; var lastSuccesfulBuild = buildServer.QueryBuilds(inProgressBuildDetailSpec).Builds.FirstOrDefault(); if (lastSuccesfulBuild != null) { buildTime = lastSuccesfulBuild.FinishTime - lastSuccesfulBuild.StartTime; } } catch (Exception e) { LogService.WriteError(e); throw; } return buildTime; }
private static IBuildQueryResult GetSprintBuilds(IBuildServer buildService, string teamProject, string buildName, DateTime startDate, DateTime endDate) { var buildSpec = buildService.CreateBuildDetailSpec(teamProject); buildSpec.MinFinishTime = startDate; buildSpec.MaxFinishTime = endDate; buildSpec.Status = BuildStatus.All; buildSpec.QueryOrder = BuildQueryOrder.FinishTimeAscending; buildSpec.DefinitionSpec.Name = buildName; buildSpec.MaxBuildsPerDefinition = 1500; var builds = buildService.QueryBuilds(buildSpec); return builds; }
private void GetBuildResults(TeamProject teamProject, IBuildServer buildServer, IEnumerable<IBuildDefinition> buildDefinitions) { Parallel.ForEach(buildDefinitions, buildDefinition => { IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(teamProject.Name, buildDefinition.Name); buildDetailSpec.MaxBuildsPerDefinition = 5; buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; var buildResult = buildServer.QueryBuilds(buildDetailSpec); try { Application.Current.Dispatcher.BeginInvoke(new Action(() => BuildResults.Add(buildResult))); } catch (NullReferenceException) { } }); }
/// <summary> /// Discover all available versions. /// </summary> /// <param name="name">The component name</param> /// <returns>A list with all versions</returns> public IEnumerable <IComponentVersion> GetAvailableVersions(IComponentName name) { var versList = new List <IComponentVersion>(); Logger.Instance().Log(TraceLevel.Info, "{0}: Querying available component versions...", ResolverType); var teamProject = _versionControlServer.TryGetTeamProject(name.TeamProject); if (teamProject == null) { Logger.Instance().Log( TraceLevel.Info, "{0}: Could not find team project {1} on version control server for team project collection {2}", ResolverType, name.TeamProject, ResolverSettings.GetSetting(ResolverValidSettings.TeamProjectCollectionUrl)); throw new InvalidComponentException( string.Format( "Could not find team project {0} on version control server for team project collection {1}", name.TeamProject, ResolverSettings.GetSetting(ResolverValidSettings.TeamProjectCollectionUrl))); } var buildDef = _buildServer.GetBuildDefinition(teamProject.Name, name.BuildDefinition); if (buildDef == null) { Logger.Instance().Log( TraceLevel.Info, "{0}: Could not find build definition {1} for team project {2} on version control server for tfs {3}", ResolverType, name.BuildDefinition, name.TeamProject, ResolverSettings.GetSetting(ResolverValidSettings.TeamProjectCollectionUrl)); throw new InvalidComponentException( string.Format( "Could not find build definition {0} for team project {1} on version control server for tfs {2}", name.BuildDefinition, name.TeamProject, ResolverSettings.GetSetting(ResolverValidSettings.TeamProjectCollectionUrl))); } // Query all builds with this teamProject and build definition name // BuildNumber xor (BuildQuality or BuildStatus) = version var spec = _buildServer.CreateBuildDetailSpec(buildDef); spec.InformationTypes = new string[] { }; var details = _buildServer.QueryBuilds(spec); foreach (var buildResult in details.Builds) { List <string> availableBuildQuality = null; if (buildResult.Quality != null) { availableBuildQuality = new List <string> { buildResult.Quality }; } var availableBuildStatus = new List <string> { buildResult.Status.ToString() }; var vers = new ComponentVersion(buildResult.BuildNumber, availableBuildStatus, availableBuildQuality, null); versList.Add(vers); Logger.Instance().Log(TraceLevel.Info, "{0}: Found build {1}", ResolverType, vers.ToString()); } Logger.Instance().Log(TraceLevel.Info, "{0}: Querying component versions finished successfully", ResolverType); return(versList); }