/// <summary> /// Gets the build run time message. /// </summary> /// <param name="currentTime">The current time.</param> /// <param name="status">The status.</param> /// <param name="endTime">The end time.</param> /// <param name="runTime">The run time.</param> /// <returns>The build run time message.</returns> public static string GetBuildRunTimeMessage(DateTime currentTime, BuildStatus?status, DateTime?endTime, TimeSpan?runTime) { if (status.IsQueued()) { return(status.Humanize()); } if (status.IsInProgress()) { return(!runTime.HasValue ? status.Humanize() : $"{status.Humanize()} for {runTime.Value.Humanize()}"); } // ReSharper disable once InvertIf if (status.IsFinished()) { if (!runTime.HasValue) { return(!endTime.HasValue ? status.Humanize() : $"{status.Humanize()} {endTime.Value.Humanize()}"); } return(!endTime.HasValue ? $"{status.Humanize()} in {runTime.Value.Humanize()}" : $"{status.Humanize()} in {runTime.Value.Humanize()}, {endTime.Value.Humanize()}"); } return(null); }
public FluidBuildLocator WithStatus(BuildStatus?status) { var clone = (FluidBuildLocator)this.MemberwiseClone(); clone.Status = status; return(clone); }
public static Investigation FromXml(string rawXml) { BuildStatus?status = null; var document = XDocument.Parse(rawXml); foreach (XElement element in document.XPathSelectElements("/investigations/investigation")) { if (element.GetAttributeOrDefault("state", "").Equals("fixed", StringComparison.InvariantCultureIgnoreCase)) { Logger.Verbose("Investigation status detected as 'fixed'"); status = BuildStatus.Fixed; } if (element.GetAttributeOrDefault("state", "").Equals("taken", StringComparison.InvariantCultureIgnoreCase)) { Logger.Verbose("Investigation status detected as 'taken'"); status = BuildStatus.Investigating; } } return(new Investigation { Status = status }); }
public static BuildLocator WithDimensions(BuildTypeLocator buildType = null, UserLocator user = null, string agentName = null, BuildStatus?status = null, bool?personal = null, bool?canceled = null, bool?running = null, bool?pinned = null, int?maxResults = null, int?startIndex = null, BuildLocator sinceBuild = null, DateTime?sinceDate = null, string[] tags = null, string branch = null ) { return(new BuildLocator { BuildType = buildType, User = user, AgentName = agentName, Status = status, Personal = personal, Canceled = canceled, Running = running, Pinned = pinned, MaxResults = maxResults, StartIndex = startIndex, SinceBuild = sinceBuild, SinceDate = sinceDate, Tags = tags, Branch = branch }); }
public void CanGetBuildStatusMessageWithParts(BuildStatus?status, string expected) { var parts = GetPartsForBuildStatusMessage(); var buildStatusMessage = BuildMessageUtility.GetBuildStatusMessage(status, parts); buildStatusMessage.ShouldBe(expected); }
/// <summary> /// Modify a build /// </summary> /// <param name="projectName"></param> /// <param name="buildId"></param> /// <param name="status"></param> /// <param name="quality"></param> /// <param name="retainIndefinitely"></param> /// <returns></returns> public async Task <Build> UpdateBuild(string projectName, int buildId, BuildStatus?status = null, string quality = null, bool?retainIndefinitely = null) { string response = await PatchResponse(string.Format("builds/{0}", buildId), new { status = status, quality = quality, retainIndefinitely = retainIndefinitely }, projectName, JSON_MEDIA_TYPE); return(JsonConvert.DeserializeObject <Build>(response)); }
public void CanNotGetRunTimedWithoutStartAndEndTime(BuildStatus?status) { var buildMock = new Mock <IBuild>(); buildMock.Setup(m => m.Status).Returns(status); var runTime = buildMock.Object.RunTime(); runTime.ShouldBeNull(); }
internal StaticSiteBuildARMResourceData(ResourceIdentifier id, string name, ResourceType type, SystemData systemData, string kind, string buildId, string sourceBranch, string pullRequestTitle, string hostname, DateTimeOffset?createdTimeUtc, DateTimeOffset?lastUpdatedOn, BuildStatus?status, IReadOnlyList <Models.StaticSiteUserProvidedFunctionApp> userProvidedFunctionApps) : base(id, name, type, systemData, kind) { BuildId = buildId; SourceBranch = sourceBranch; PullRequestTitle = pullRequestTitle; Hostname = hostname; CreatedTimeUtc = createdTimeUtc; LastUpdatedOn = lastUpdatedOn; Status = status; UserProvidedFunctionApps = userProvidedFunctionApps; }
public Build(BuildDefinitionReference definition, int id, BuildStatus?status, DateTime?queueTime, DateTime?startTime, DateTime?finishTime, BuildResult?result, IReadOnlyList <TestRun> testRuns) { Definition = definition; Id = id; Status = status; QueueTime = queueTime; StartTime = startTime; FinishTime = finishTime; Result = result; TestRuns = testRuns ?? new List <TestRun>(); }
public void Reading_the_status_of_a_non_default_build() { // Given CreateClient(); var expectedBuildInfo = new Build() { Status = "SUCCESS" }; string expectedBuildConfigurationId = "BuildServer_Branch"; var locator = BuildLocator.WithDimensions( buildType: BuildTypeLocator.WithId(expectedBuildConfigurationId), maxResults: 1, branch: "branched:true"); var mockBuilds = ExpectReadOfBuildStatus(expectedBuildConfigurationId, expectedBuildInfo, locator: locator); ExpectReadOfBuildConfiguration(expectedBuildConfigurationId, expectedBuildConfigurationId + "_hello"); var server = new TeamCityServer("localhost", "Username", "Password"); var wait = new System.Threading.AutoResetEvent(false); BuildStatus?actualStatus = null; string actualBuildConfigurationId = null; System.Threading.Thread actualThread = null; string actualName = null; server.ReadBuildStatusComplete += (sender, e) => { actualThread = System.Threading.Thread.CurrentThread; actualStatus = e.Status; actualBuildConfigurationId = e.BuildConfigurationId; actualName = e.Name; wait.Set(); }; server.UseDefault = false; // Set the server to not use the builds default branch // When server.ReadBuildStatusAsync(expectedBuildConfigurationId); Assert.IsTrue(wait.WaitOne(5000)); // Then clientMock.VerifyAll(); mockBuilds.VerifyAll(); Assert.AreEqual(BuildStatus.Success, actualStatus); Assert.AreEqual(expectedBuildConfigurationId, actualBuildConfigurationId); Assert.AreEqual(expectedBuildConfigurationId + "_hello", actualName); Assert.AreNotEqual(System.Threading.Thread.CurrentThread, actualThread); }
public void CanNotGetRunTimeWithoutEndTime(BuildStatus?status) { var utcNow = DateTime.UtcNow; var buildMock = new Mock <IBuild>(); buildMock.Setup(m => m.Status).Returns(status); buildMock.Setup(m => m.StartTime).Returns(utcNow); var runTime = buildMock.Object.RunTime(); runTime.ShouldBeNull(); }
/// <summary> /// Gets the build status message. /// </summary> /// <param name="status">The status.</param> /// <param name="parts">The parts.</param> /// <returns>The build status message.</returns> public static string GetBuildStatusMessage(BuildStatus?status, IDictionary <string, string> parts) { Ensure.That(parts).IsNotNull(); if (!status.HasValue) { return(null); } var messageParts = GetMessageParts(parts); return(string.IsNullOrWhiteSpace(messageParts) ? $"Build {status.Value.Humanize().Transform(To.LowerCase)}" : $"Build {messageParts} {status.Value.Humanize().Transform(To.LowerCase)}"); }
public Build(long id, string number, BuildStatus?status, DateTime startDate, DateTime finishDate, DateTime queuedDate, BuildConfiguration buildConfiguration, Agent agent, List <Change> changes, string webUrl, Properties properties) { m_Id = id; m_Number = number; m_Status = status; m_StartDate = startDate; m_FinishDate = finishDate; m_QueuedDate = queuedDate; m_BuildConfiguration = buildConfiguration; m_Agent = agent; m_Changes = changes; m_WebUrl = webUrl; m_Properties = properties; }
private void Reading_the_status_of_a_XYZ_build(string status, BuildStatus expectedStatus, string expectedBuildConfigurationId = "BuildServer_Branch", string returnedName = "Name", string expectedName = "Name") { // Given CreateClient(); var expectedBuildInfo = new Build() { Status = status }; var mockBuilds = ExpectReadOfBuildStatus(expectedBuildConfigurationId, expectedBuildInfo); ExpectReadOfBuildConfiguration(expectedBuildConfigurationId, returnedName); var server = new TeamCityServer("localhost", "Username", "Password"); var wait = new System.Threading.AutoResetEvent(false); BuildStatus?actualStatus = null; string actualBuildConfigurationId = null; System.Threading.Thread actualThread = null; string actualBuildName = null; server.ReadBuildStatusComplete += (sender, e) => { actualThread = System.Threading.Thread.CurrentThread; actualStatus = e.Status; actualBuildConfigurationId = e.BuildConfigurationId; actualBuildName = e.Name; wait.Set(); }; // When server.ReadBuildStatusAsync(expectedBuildConfigurationId); Assert.IsTrue(wait.WaitOne(5000)); // Then clientMock.VerifyAll(); mockBuilds.VerifyAll(); Assert.AreEqual(expectedStatus, actualStatus); Assert.AreEqual(expectedBuildConfigurationId, actualBuildConfigurationId); Assert.AreEqual(expectedName, actualBuildName); Assert.AreNotEqual(System.Threading.Thread.CurrentThread, actualThread); }
public static Core.Models.BuildStatus Convert(BuildStatus?status, BuildResult?result) { switch (status) { case BuildStatus.InProgress: return(Core.Models.BuildStatus.InProgress); case BuildStatus.NotStarted: return(Core.Models.BuildStatus.NotStarted); case BuildStatus.Completed: return(Convert(result)); default: throw new NotSupportedException("Unable to convert unrecognised BuildStatus."); } }
private async Task <List <BuildStatus> > GetStatusOfAllBuilds(IEnumerable <string> buildTypeIds) { var statusPerBuild = new List <BuildStatus>(); foreach (var buildTypeId in buildTypeIds) { HttpResponseMessage result = await httpClient.GetAsync($"{authPath}/app/rest/buildTypes/id:{buildTypeId}"); if (result.IsSuccessStatusCode) { var buildType = BuildType.FromXml(await result.Content.ReadAsStringAsync()); Logger.Verbose($"Analyzing the builds for '{buildType.Id}' over a period of {config.TimeSpan.Days} days."); BuildStatus?status = await GetBuildTypeStatus(buildType); if (status.HasValue) { statusPerBuild.Add(status.Value); } var statusMessage = $"Status of build type '{buildType.Id}' is {status ?? BuildStatus.Unavailable}."; switch (status) { case BuildStatus.Failed: Logger.WriteErrorLine(statusMessage); break; case BuildStatus.Investigating: Logger.WriteWarningLine(statusMessage); break; default: Logger.WriteLine(statusMessage); break; } } else { Logger.WriteLine($"Failed to get info for build type {buildTypeId}: {result.StatusCode}"); } } return(statusPerBuild); }
public async Task <JsonCollection <BuildRequest> > GetBuildRequests(string projectName, string requestedFor = null, int?definitionId = null, int?queueId = null, int?maxCompletedAge = null, BuildStatus?status = null, int?top = null, int?skip = null) { string response = await GetResponse("requests", new Dictionary <string, object>() { { "requestedFor", requestedFor }, { "definitionId", definitionId }, { "queueId", queueId }, { "maxCompletedAge", maxCompletedAge }, { "status", status != null ? status.Value.ToString() : null }, { "$top", top }, { "$skip", skip } }, projectName); return(JsonConvert.DeserializeObject <JsonCollection <BuildRequest> >(response)); }
public PipelineEnvironmentBuildStatus(BuildStatus?status) { if (!status.HasValue) { Description = "Loading"; } else { Status = status.Value; switch (status) { case BuildStatus.InProgress: Description = "In Progress"; break; case BuildStatus.Failed: Description = "Failed"; break; case BuildStatus.None: Description = "Unknown Status"; break; case BuildStatus.NotStarted: Description = "Unknown Status"; break; case BuildStatus.PartiallySucceeded: Description = "Partially Succeeded"; break; case BuildStatus.Stopped: Description = "Stopped"; break; case BuildStatus.Succeeded: Description = "Succeeded"; break; } } }
public Build(long id, string number, BuildStatus?status, DateTime startDate, DateTime finishDate, DateTime queuedDate, BuildConfiguration buildConfiguration, Agent agent, List <Change> changes, string webUrl, Properties properties, ITestOccurrences testOccurrences, BuildState?state, RevisionsWrapper revisions, string branch = null) { m_Id = id; m_Number = number; m_Status = status; m_State = state; m_StartDate = startDate; m_FinishDate = finishDate; m_QueuedDate = queuedDate; m_BuildConfiguration = buildConfiguration; m_Agent = agent; m_TestOccurrences = testOccurrences; m_Changes = changes; m_WebUrl = webUrl; m_Properties = properties; m_Revisions = revisions; m_Branch = branch; }
/// <summary> /// List the builds that meet the provided query parameters /// </summary> public IAsyncEnumerable <Build> EnumerateBuildsAsync( string project, IEnumerable <int>?definitions = null, IEnumerable <int>?queues = null, string?buildNumber = null, DateTimeOffset?minTime = null, DateTimeOffset?maxTime = null, string?requestedFor = null, BuildReason?reasonFilter = null, BuildStatus?statusFilter = null, BuildResult?resultFilter = null, int?top = null, int?maxBuildsPerDefinition = null, QueryDeletedOption?deletedFilter = null, BuildQueryOrder?queryOrder = null, string?branchName = null, IEnumerable <int>?buildIds = null, string?repositoryId = null, string?repositoryType = null) { var builder = GetBuilder(project, "build/builds"); builder.AppendList("definitions", definitions); builder.AppendList("queues", queues); builder.AppendString("buildNumber", buildNumber); builder.AppendDateTime("minTime", minTime); builder.AppendDateTime("maxTime", maxTime); builder.AppendString("requestedFor", requestedFor); builder.AppendEnum("reasonFilter", reasonFilter); builder.AppendEnum("statusFilter", statusFilter); builder.AppendEnum("resultFilter", resultFilter); builder.AppendInt("$top", top); builder.AppendInt("maxBuildsPerDefinition", maxBuildsPerDefinition); builder.AppendEnum("deletedFilter", deletedFilter); builder.AppendEnum("queryOrder", queryOrder); builder.AppendString("branchName", branchName); builder.AppendList("buildIds", buildIds); builder.AppendString("repositoryId", repositoryId); builder.AppendString("repositoryType", repositoryType); return(EnumerateItemsAsync <Build>(builder, limit: top)); }
public Microsoft.TeamFoundation.Build.Server.BuildStatus ConvertBuildStatus(BuildStatus?status, BuildResult?result) { if (!status.HasValue) { return(Microsoft.TeamFoundation.Build.Server.BuildStatus.NotStarted); } BuildStatus value = status.Value; switch (value) { case BuildStatus.None: return(Microsoft.TeamFoundation.Build.Server.BuildStatus.None); case BuildStatus.InProgress: return(Microsoft.TeamFoundation.Build.Server.BuildStatus.InProgress); case BuildStatus.Completed: return(this.ConvertBuildResult(result)); case (BuildStatus)3: case (BuildStatus)5: case (BuildStatus)6: case (BuildStatus)7: break; case BuildStatus.Cancelling: return(Microsoft.TeamFoundation.Build.Server.BuildStatus.Stopped); case BuildStatus.Postponed: return(Microsoft.TeamFoundation.Build.Server.BuildStatus.NotStarted); default: if (value == BuildStatus.NotStarted) { return(Microsoft.TeamFoundation.Build.Server.BuildStatus.NotStarted); } break; } return(Microsoft.TeamFoundation.Build.Server.BuildStatus.NotStarted); }
public FluidBuildLocator WithDimensions(IBuildTypeLocator buildType = null, IUserLocator user = null, IProjectLocator project = null, IProjectLocator affectedProject = null, string agentName = null, BuildStatus?status = null, bool?personal = null, bool?cancelled = null, RunningLocatorFlag?running = null, bool?pinned = null, int?maxResults = null, int?startIndex = null, IBuildLocator sinceBuild = null, DateTime?sinceDate = null, string[] tags = null, IBranchLocator branch = null ) { return(new FluidBuildLocator { BuildType = buildType, User = user, Project = project, AffectedProject = affectedProject, AgentName = agentName, Status = status, Personal = personal, Cancelled = cancelled, Running = running, Pinned = pinned, MaxResults = maxResults, StartIndex = startIndex, SinceBuild = sinceBuild, SinceDate = sinceDate, Tags = tags, Branch = branch }); }
/// <inheritdoc /> public bool TryUpdate(string projectName, BuildStatus?status, DateTime?startTime, DateTime?endTime, TimeSpan?runTime) { var name = BuildMessageUtility.GetBuildName(projectName, VersionNumber); var isUpdated = false; if (Name != name) { Name = name; isUpdated = true; } var message = BuildMessageUtility.GetBuildRunTimeMessage(DateTime.UtcNow, status, endTime, runTime); if (Message != message) { Message = message; Status = status; EndTime = endTime; isUpdated = true; } if (StartTime != startTime) { StartTime = startTime; isUpdated = true; } // ReSharper disable once InvertIf if (EndTime != endTime) { EndTime = endTime; isUpdated = true; } return(isUpdated); }
public void CanGetIsQueued(BuildStatus?status, bool expected) { status.IsQueued().ShouldBe(expected); }
public void CanGetBuildStatusMessage(BuildStatus?status, string expected) { var buildStatusMessage = BuildMessageUtility.GetBuildStatusMessage(status); buildStatusMessage.ShouldBe(expected); }
public void CanGetIsInProgress(BuildStatus?status, bool expected) { status.IsInProgress().ShouldBe(expected); }
public void CanGetStatus(TeamCity.Api.Models.BuildState?state, TeamCity.Api.Models.BuildStatus?status, BuildStatus?expected) { var build = new Build(new TeamCity.Api.Models.Build { State = state, Status = status }); build.Status.ShouldBe(expected); }
private void Query(Object stateInfo) { Hashtable latestBuilds = new Hashtable(); Random random = new Random(); lock (this.builds) { foreach (string key in this.builds.Keys) { string[] build = key.Split(';'); string teamProject = build[0]; string definitionName = build[1]; int rand = random.Next(8); BuildStatus?status = BuildStatus.NotStarted; switch (rand) { case 0: status = BuildStatus.InProgress; break; case 1: status = BuildStatus.Succeeded; break; case 2: status = BuildStatus.Succeeded; break; case 3: status = BuildStatus.Failed; break; case 4: status = BuildStatus.Stopped; break; case 5: status = BuildStatus.NotStarted; break; case 6: status = BuildStatus.Succeeded; break; case 7: status = BuildStatus.PartiallySucceeded; break; //this.OnError(); //return; } MockBuildInfo latestBuild = null; if (status.HasValue) { var start = GetRandomDateTimeForStart(); latestBuild = new MockBuildInfo(status.Value, "DOMAIN\\Joe Bloggs", start, true, GetRandomDateTimeForEnd(start)); latestBuild.FailedTests.Clear(); switch (status) { case BuildStatus.Succeeded: latestBuild.TestsFailed = 0; latestBuild.TestsPassed = 1337; break; case BuildStatus.PartiallySucceeded: latestBuild.TestsFailed = 42; latestBuild.TestsPassed = 1066; latestBuild.FailedTests.Add("TestDatabase"); latestBuild.FailedTests.Add("TestLogin"); latestBuild.FailedTests.Add("TestPurchase"); break; } } latestBuilds.Add(key, latestBuild); } foreach (string key in latestBuilds.Keys) { this.builds[key] = latestBuilds[key]; } } this.OnQueryCompleted(); }
/// <summary> /// Get a list of builds /// </summary> /// <param name="projectName"></param> /// <param name="requestedFor"></param> /// <param name="definitionId"></param> /// <param name="minFinishTime"></param> /// <param name="quality"></param> /// <param name="status"></param> /// <param name="top"></param> /// <param name="skip"></param> /// <returns></returns> public async Task <JsonCollection <Build> > GetBuilds(string projectName, string requestedFor = null, int?definitionId = null, DateTime?minFinishTime = null, string quality = null, BuildStatus?status = null, int?top = null, int?skip = null) { string response = await GetResponse("builds", new Dictionary <string, object>() { { "requestedFor", requestedFor }, { "definitionId", definitionId }, { "minFinishTime", minFinishTime }, { "quality", quality }, { "status", status != null ? status.Value.ToString() : null }, { "$top", top }, { "$skip", skip } }, projectName); return(JsonConvert.DeserializeObject <JsonCollection <Build> >(response)); }
public Build(long id, string number, BuildStatus? status, DateTime startDate, DateTime finishDate, DateTime queuedDate, BuildConfiguration buildConfiguration, Agent agent, List<Change> changes, string webUrl, Properties properties, ITestOccurrences testOccurrences, BuildState? state) { m_Id = id; m_Number = number; m_Status = status; m_State = state; m_StartDate = startDate; m_FinishDate = finishDate; m_QueuedDate = queuedDate; m_BuildConfiguration = buildConfiguration; m_Agent = agent; m_TestOccurrences = testOccurrences; m_Changes = changes; m_WebUrl = webUrl; m_Properties = properties; }
public Task <IPagedList <Build> > GetBuildsAsync(Guid projectId, IEnumerable <int> definitions = null, BuildStatus?statusFilter = null) { return(_inner.GetBuildsAsync2(projectId, definitions: definitions, statusFilter: statusFilter)); }