private AppVeyorBuildStatus GetBuildStatus(BuildDefinitionSetting buildDefinitionSetting, CiEntryPointSetting ciEntryPointSetting) { var token = ciEntryPointSetting.GetPassword(); var projectInfo = AppVeyorBuildDefinition.FromId(buildDefinitionSetting.Id); var serviceClient = CreateClient(ciEntryPointSetting.Url, token); var request = new GetProjectLastBuild { AccountName = projectInfo.AccountName, ProjectSlug = projectInfo.Slug }; try { var response = serviceClient.Get(request); if (response.Build == null) { throw new BuildDefinitionNotFoundException(buildDefinitionSetting); } return new AppVeyorBuildStatus(CreateProjectUrl(projectInfo), response.Project, response.Build, buildDefinitionSetting); } catch (WebServiceException) { throw new BuildDefinitionNotFoundException(buildDefinitionSetting); } }
private BambooBuildStatus GetBuildStatus(string rootUrl, BuildDefinitionSetting buildDefinitionSetting, string userName, string password) { try { string planUrl = rootUrl + "/rest/api/latest/plan/" + buildDefinitionSetting.Id + "?os_authType=basic"; XDocument planDoc = DownloadXml(planUrl, userName, password); var isBuilding = planDoc.Root.ElementValueAsBool("isBuilding", false); if (isBuilding != null && isBuilding.Value) { return BambooBuildStatus.CreateIsBuilding(buildDefinitionSetting); } XDocument buildDoc; try { string buildUrl = rootUrl + "/rest/api/latest/result/" + buildDefinitionSetting.Id + "-latest?expand=changes.change&os_authType=basic"; buildDoc = DownloadXml(buildUrl, userName, password); } catch (Exception) { string buildUrl = rootUrl + "/rest/api/latest/build/" + buildDefinitionSetting.Id + "-latest?expand=changes.change&os_authType=basic"; buildDoc = DownloadXml(buildUrl, userName, password); } if (buildDoc.Root == null) throw new Exception("Could not get project status"); return BambooBuildStatus.CreateBuildResult(buildDoc, buildDefinitionSetting, rootUrl); } catch (SosException ex) { if (ex.Message.Contains("not found")) { throw new BuildDefinitionNotFoundException(buildDefinitionSetting); } throw; } }
public void TeamCityBuildStatus_PassingBuildNoComment() { var teamCityFailingBuild = ResourceManager.TeamCityFailingBuild; var teamCityFailingChange = ResourceManager.TeamCityFailingChange; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting { Name = "Name", Id = "BuildDefinitionId" }; var buildStatus = new TeamCityBuildStatus(buildDefinitionSetting, teamCityFailingBuild, teamCityFailingChange); Assert.AreEqual(BuildStatusEnum.Broken, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("BuildConfig4", buildStatus.Name); Assert.AreEqual("lee", buildStatus.RequestedBy); Assert.AreEqual(new DateTime(2012, 1, 27, 0, 15, 45, 0), buildStatus.StartedTime, HudsonBuildStatusTest.DateAsCode(buildStatus.StartedTime.Value)); string expectedComment = @"Merge branch 'master' of C:\dev\CiTest Conflicts: CiTest/Program.cs".Replace("\r", ""); Assert.AreEqual(expectedComment.Replace("\r\n", "\r"), buildStatus.Comment); Assert.AreEqual(new DateTime(2012, 1, 27, 0, 16, 2, 0), buildStatus.FinishedTime, HudsonBuildStatusTest.DateAsCode(buildStatus.FinishedTime.Value)); // timestamp+duration Assert.AreEqual("http://win7ci:8080/viewLog.html?buildId=35&buildTypeId=bt2", buildStatus.Url); Assert.AreEqual("35", buildStatus.BuildId); }
public BuildDefinitionSetting FindAddBuildDefinition(MyBuildDefinition buildDefinition, string buildServer) { BuildDefinitionSetting buildDefinitionSetting = BuildDefinitionSettings.FirstOrDefault(bd => bd.Id == buildDefinition.Id); if (buildDefinitionSetting != null) return buildDefinitionSetting; buildDefinitionSetting = new BuildDefinitionSetting(buildDefinition, buildServer); BuildDefinitionSettings.Add(buildDefinitionSetting); return buildDefinitionSetting; }
public IList<HudsonBuildStatus> GetBuildsStatuses(string rootUrl, string userName, string password, BuildDefinitionSetting[] watchedBuildDefinitions) { rootUrl = GetRootUrl(rootUrl); var parallelResult = from buildDefinitionSetting in watchedBuildDefinitions select GetBuildStatus(rootUrl, buildDefinitionSetting, userName, password); return parallelResult.AsParallel().ToList(); }
public IList<BuildBotBuildStatus> GetBuildsStatuses(string rootUrl, string userName, string password, BuildDefinitionSetting[] watchedBuildDefinitions) { var results = new List<BuildBotBuildStatus>(); rootUrl = GetRootUrl(rootUrl); var webClient = new WebClient { Credentials = new NetworkCredential(userName, password), CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore), }; foreach (var watchedBuildDefinition in watchedBuildDefinitions) { var projectUrl = new Uri(rootUrl + "/json/builders/" + watchedBuildDefinition.Name + "/builds?select=-1"); try { var resultString = webClient.DownloadString(projectUrl); results.Add(new BuildBotBuildStatus(resultString, rootUrl)); } catch (WebException webException) { if (webException.Response != null) { var response = webException.Response; using (Stream s1 = response.GetResponseStream()) { if (s1 != null) { using (StreamReader sr = new StreamReader(s1)) { var errorResult = sr.ReadToEnd(); string message = "Error connecting to server with the following url: " + projectUrl.ToString() + "\n\n" + errorResult; _log.Error(message, webException); throw new SosException(message, webException); } } } } if (webException.Status == WebExceptionStatus.Timeout) { throw new ServerUnavailableException(); } if (webException.Status == WebExceptionStatus.NameResolutionFailure) { throw new ServerUnavailableException(); } if (webException.Status == WebExceptionStatus.ConnectFailure) { throw new ServerUnavailableException(); } _log.Error("Error connecting to " + projectUrl.ToString() + ". WebException.Status = " + webException.Status); throw; } } return results; }
private static Dictionary<string, string> GetBuildQueryParams(BuildDefinitionSetting[] watchedBuildDefinitions) { var buildIds = watchedBuildDefinitions.Select(i => i.Id); var result = new Dictionary<string, string> { { "maxBuildsPerDefinition", "1" }, { "statusFilter", "inProgress,completed" }, { "definitions", string.Join(",", buildIds) }, }; return result; }
public void ServerIsDoingACleanup() { FakeTeamCityService teamCityService = new FakeTeamCityService(); BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); XDocument xDoc = ResourceManager.TeamCityServerCleanup; teamCityService.GetBuildStatusAndCommentsFromXDocumentFake( "fakeurl", "username", "password", buildDefinitionSetting, xDoc); }
public BuildDefinitionSetting FindAddBuildDefinition(MyBuildDefinition buildDefinition, string buildServer) { BuildDefinitionSetting buildDefinitionSetting = BuildDefinitionSettings.FirstOrDefault(bd => bd.Id == buildDefinition.Id); if (buildDefinitionSetting != null) { return(buildDefinitionSetting); } buildDefinitionSetting = new BuildDefinitionSetting(buildDefinition, buildServer); BuildDefinitionSettings.Add(buildDefinitionSetting); return(buildDefinitionSetting); }
public TeamCityBuildStatus(BuildDefinitionSetting buildDefinitionSetting, XDocument buildResultXDoc, XDocument changeResultXDoc) : this(buildDefinitionSetting) { try { if (changeResultXDoc != null) { XElement firstComment = changeResultXDoc.Descendants("comment").FirstOrDefault(); if (firstComment != null) Comment = firstComment.Value.Trim(); RequestedBy = changeResultXDoc.Root.AttributeValueOrDefault("username"); } string status = buildResultXDoc.Root.AttributeValueOrDefault("status"); string startedTimeStr = buildResultXDoc.Root.ElementValueOrDefault("startDate"); string finishedTimeStr = buildResultXDoc.Root.ElementValueOrDefault("finishDate"); var buildType = buildResultXDoc.Descendants("buildType").ToList(); if (buildType.Any()) { var name = buildType.First().AttributeValueOrDefault("name"); Name = name; } StartedTime = GetTeamCityDate(startedTimeStr); if (string.IsNullOrEmpty(finishedTimeStr)) { BuildStatusEnum = BuildStatusEnum.InProgress; } else { FinishedTime = GetTeamCityDate(finishedTimeStr); BuildStatusEnum = ToBuildStatusEnum(status); if (BuildStatusEnum == BuildStatusEnum.Unknown) { _log.Debug("Received an unknown build status from the following buildResult: " + buildResultXDoc); } } Url = buildResultXDoc.Root.AttributeValueOrDefault("webUrl"); if (Url != null) Url = Url.Trim(); BuildId = buildResultXDoc.Root.AttributeValueOrDefault("id"); } catch (Exception ex) { _log.Error("Error parsing xml. BuildResultXDoc: " + buildResultXDoc + "\r\n\r\n ChangeResultXDoc: " + changeResultXDoc, ex); throw; } }
public TeamCityBuildStatus GetBuildStatusAndCommentsFromXDocumentFake( string rootUrl, string userName, string password, BuildDefinitionSetting buildDefinitionSetting, XDocument buildResultXDoc) { return GetBuildStatusAndCommentsFromXDocument(rootUrl, userName, password, buildDefinitionSetting, buildResultXDoc); }
public AppVeyorBuildStatus(string buildUrl, Project project, ProjectBuild build, BuildDefinitionSetting buildDefinitionSetting) { BuildDefinitionId = buildDefinitionSetting.Id; Name = "{0} ({1})".Fmt(project.Name, build.Version); BuildStatusEnum = BuildStatusEnum.Unknown; StartedTime = build.Started; FinishedTime = build.Finished; BuildStatusMessage = build.Status; Url = buildUrl; BuildId = build.BuildId; BuildStatusEnum = ToBuildStatusEnum(build.Status); RequestedBy = (string.IsNullOrEmpty(build.AuthorName)) ? build.AuthorName : build.CommitterName; Comment = build.Message; }
public IList<CruiseControlNetBuildStatus> GetBuildsStatuses(string rootUrl, string userName, string password, BuildDefinitionSetting[] watchedBuildDefinitions) { var buildStatuses = GetBuildStatuses(rootUrl, userName, password).ToList(); var results = new List<CruiseControlNetBuildStatus>(); foreach (var watchedBuildDefinition in watchedBuildDefinitions) { var buildStatus = buildStatuses.FirstOrDefault(s => s.BuildDefinitionId == watchedBuildDefinition.Id); if (buildStatus == null) { throw new BuildDefinitionNotFoundException(watchedBuildDefinition); } results.Add(buildStatus); } return results; }
public async Task<IEnumerable<TfsRestBuildStatus>> GetBuildsStatuses(CiEntryPointSetting ciEntryPointSetting, BuildDefinitionSetting[] watchedBuildDefinitions) { var connection = new TfsConnectionDetails(ciEntryPointSetting); var buildDefinitionsByProjectCollection = watchedBuildDefinitions.GroupBy(bd => bd.Parent); List<TfsRestBuildStatus> resultingBuildStatuses = new List<TfsRestBuildStatus>(); foreach (var buildDefinitionGroup in buildDefinitionsByProjectCollection) { var projectCollection = buildDefinitionGroup.Key; var buildQueryParams = GetBuildQueryParams(buildDefinitionGroup.ToArray()); var projects = await _tfsJsonService.GetBuildsStatuses(connection, buildQueryParams, projectCollection); await _commentsCache.FetchNewComments(projects, connection, tfsJsonBuilds => GetComment(tfsJsonBuilds, connection, projectCollection)); var buildStatuses = projects.Select(i => new TfsRestBuildStatus(i, _commentsCache)); resultingBuildStatuses.AddRange(buildStatuses); } return resultingBuildStatuses; }
public void TravisBuildStatus_FunkyDate() { var travisCiWorkingBuild = ResourceManager.TravisFunkyDate; var travisCiBuildDefinition = TravisCiBuildDefinition.FromIdString("ownerName/projectName/59"); BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; TravisCiBuildStatus buildStatus = new TravisCiBuildStatus(travisCiBuildDefinition, travisCiWorkingBuild, buildDefinitionSetting); Assert.AreEqual(BuildStatusEnum.InProgress, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("Name", buildStatus.Name); Assert.AreEqual("Garima Singh", buildStatus.RequestedBy); Assert.AreEqual("Adding rake db:migrate for sample app in code", buildStatus.Comment); Assert.AreEqual("https://api.travis-ci.org/ownerName/projectName/builds/1791928", buildStatus.Url); Assert.AreEqual("1791928", buildStatus.BuildId); }
public void TravisBuildStatus_PassingBuildNoComment() { var travisCiWorkingBuild = ResourceManager.TravisCiWorkingBuild; var travisCiBuildDefinition = TravisCiBuildDefinition.FromIdString("ownerName/projectName/59"); BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; TravisCiBuildStatus buildStatus = new TravisCiBuildStatus(travisCiBuildDefinition, travisCiWorkingBuild, buildDefinitionSetting); Assert.AreEqual(BuildStatusEnum.Working, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("Name", buildStatus.Name); Assert.AreEqual("Bob Smith", buildStatus.RequestedBy); Assert.AreEqual("Merge branch 'master' of https://github.com/travis-ci/travis-ci", buildStatus.Comment); Assert.AreEqual("https://api.travis-ci.org/ownerName/projectName/builds/1591278", buildStatus.Url); Assert.AreEqual("1591278", buildStatus.BuildId); }
public void BambooBuildStatus_FailedWithComment() { var bambooFailingBuild = ResourceManager.BambooFailingBuild; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; var buildStatus = BambooBuildStatus.CreateBuildResult(bambooFailingBuild, buildDefinitionSetting, "http://win7ci:8085"); Assert.AreEqual(BuildStatusEnum.Broken, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("Name", buildStatus.Name); Assert.AreEqual("Lee", buildStatus.RequestedBy); Assert.AreEqual(new DateTime(2012, 3, 4, 0, 4, 23, 98), buildStatus.StartedTime.Value.ToUniversalTime(), HudsonBuildStatusTest.DateAsCode(buildStatus.StartedTime.Value.ToUniversalTime())); Assert.AreEqual("breaking the build", buildStatus.Comment); Assert.AreEqual(new DateTime(2012, 3, 4, 0, 4, 27, 61), buildStatus.FinishedTime.Value.ToUniversalTime(), HudsonBuildStatusTest.DateAsCode(buildStatus.FinishedTime.Value.ToUniversalTime())); // timestamp+duration Assert.AreEqual("2", buildStatus.BuildId); Assert.AreEqual("http://win7ci:8085/browse/CITEST-CITESTPLANKEY-2", buildStatus.Url); }
private TravisCiBuildStatus GetBuildStatus(BuildDefinitionSetting buildDefinitionSetting) { var webClient = new WebClient(); var travisBuildDef = TravisCiBuildDefinition.FromIdString(buildDefinitionSetting.Id); var buildDefinitionUrl = "http://travis-ci.org/" + travisBuildDef.OwnerName + "/" + travisBuildDef.ProjectName + ".json"; try { var json = webClient.DownloadString(buildDefinitionUrl); var lastBuildId = GetJsonValue(json, "last_build_id"); var buildUrl = "http://travis-ci.org/builds/" + lastBuildId + ".json"; json = webClient.DownloadString(buildUrl); return new TravisCiBuildStatus(travisBuildDef, json, buildDefinitionSetting); } catch (WebException webException) { throw WebClientXml.ToServerUnavailableException(buildDefinitionUrl, webException); } }
public void HudsonBuildStatus_PassingBuildNoComment() { var jenkinsBuildStatusForIssue10 = ResourceManager.JenkinsPassingBuild; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; HudsonBuildStatus buildStatus = new HudsonBuildStatus(jenkinsBuildStatusForIssue10, buildDefinitionSetting, null, treatUnstableAsSuccess: false); Assert.AreEqual(BuildStatusEnum.Working, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("Name", buildStatus.Name); Assert.AreEqual("anonymous", buildStatus.RequestedBy); Assert.AreEqual(new DateTime(2011, 12, 23, 21, 8, 21), buildStatus.StartedTime, DateAsCode(buildStatus.StartedTime.Value)); Assert.AreEqual("Started by user anonymous", buildStatus.Comment); Assert.AreEqual(new DateTime(2011, 12, 23, 21, 8, 22, 465), buildStatus.FinishedTime, DateAsCode(buildStatus.FinishedTime.Value)); // timestamp+duration Assert.AreEqual("http://win7ci:8081/job/SvnTest/30/", buildStatus.Url); Assert.AreEqual("30", buildStatus.BuildId); }
public void HudsonBuildStatus_Bug152HudsonDuration() { var jenkinsBuildStatusForIssue10 = ResourceManager.Bug152HudsonDuration; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; HudsonBuildStatus buildStatus = new HudsonBuildStatus(jenkinsBuildStatusForIssue10, buildDefinitionSetting, null, treatUnstableAsSuccess: false); Assert.AreEqual(BuildStatusEnum.Working, buildStatus.BuildStatusEnum); Assert.AreEqual(null, buildStatus.RequestedBy); // 2/15/2012 5:00:54 PM Assert.AreEqual(new DateTime(2012, 2, 15, 17, 0, 54, 361), buildStatus.StartedTime, DateAsCode(buildStatus.StartedTime.Value)); Assert.IsNull(buildStatus.Comment); Assert.AreEqual(new DateTime(2012, 2, 15, 17, 6, 4, 51), buildStatus.FinishedTime, DateAsCode(buildStatus.FinishedTime.Value)); Assert.AreEqual("277", buildStatus.BuildId); Assert.AreEqual("https://tr-w03.statoil.net:10945/jenkins-prod/view/eBOSS/job/eBOSS/49/", buildStatus.Url); }
public void HudsonBuildStatus_Issues10_AlwaysUseTimestampIfAvailable() { var jenkinsBuildStatusForIssue10 = ResourceManager.JenkinsBuildStatusForIssue10; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; HudsonBuildStatus buildStatus = new HudsonBuildStatus(jenkinsBuildStatusForIssue10, buildDefinitionSetting, null, treatUnstableAsSuccess: false); Assert.AreEqual(BuildStatusEnum.Working, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("Name", buildStatus.Name); Assert.AreEqual("STCO", buildStatus.RequestedBy); Assert.AreEqual(new DateTime(2012, 1, 19, 12, 45, 17, 736), buildStatus.StartedTime, "" + buildStatus.StartedTime.Value.Millisecond); Assert.IsNull(buildStatus.Comment); Assert.AreEqual(new DateTime(2012, 1, 19, 12, 50, 56, 422), buildStatus.FinishedTime, "" + buildStatus.FinishedTime.Value.Millisecond); // timestamp+duration Assert.AreEqual("https://tr-w03.statoil.net:10945/jenkins-prod/view/eBOSS/job/eBOSS/49/", buildStatus.Url); Assert.AreEqual("49", buildStatus.BuildId); }
public void CruiseControlNetBuildStatus_BrokenWithAuthor() { var document = ResourceManager.CruiseControlNetBrokenWithAuthor; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; XElement projectElement = document.Root.Element("Project"); CruiseControlNetBuildStatus.ClearCache(); CruiseControlNetBuildStatus buildStatus = new CruiseControlNetBuildStatus(projectElement, null); Assert.AreEqual(BuildStatusEnum.Broken, buildStatus.BuildStatusEnum); Assert.AreEqual("Lee", buildStatus.RequestedBy); Assert.IsNotNull(buildStatus.StartedTime); AssertAreClose(new DateTime(2012, 8, 16, 19, 23, 34, 276), buildStatus.StartedTime.Value); Assert.IsNull(buildStatus.Comment); Assert.IsNotNull(buildStatus.FinishedTime); AssertAreClose(new DateTime(2012, 8, 16, 19, 23, 34, 276), buildStatus.FinishedTime.Value); Assert.AreEqual("20120816192334", buildStatus.BuildId); }
public void TeamCityFailureDueToCleanup() { var teamCityFailureDueToCleanup = ResourceManager.TeamCityFailureDueToCleanup; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting { Name = "Name", Id = "BuildDefinitionId" }; var buildStatus = new TeamCityBuildStatus(buildDefinitionSetting, teamCityFailureDueToCleanup, null); Assert.AreEqual(BuildStatusEnum.Unknown, buildStatus.BuildStatusEnum); Assert.AreEqual("BuildDefinitionId", buildStatus.BuildDefinitionId); Assert.AreEqual("db_maintenance Database [GRAVIS1]", buildStatus.Name); Assert.AreEqual(null, buildStatus.RequestedBy); Assert.AreEqual(new DateTime(2012, 5, 29, 21, 0, 7, 0), buildStatus.StartedTime, HudsonBuildStatusTest.DateAsCode(buildStatus.StartedTime.Value)); Assert.AreEqual(null, buildStatus.Comment); Assert.AreEqual(new DateTime(2012, 5, 29, 21, 0, 12, 0), buildStatus.FinishedTime, HudsonBuildStatusTest.DateAsCode(buildStatus.FinishedTime.Value)); // timestamp+duration Assert.AreEqual("http://teamcity.com/viewLog.html?buildId=32470&buildTypeId=bt231", buildStatus.Url); Assert.AreEqual("32470", buildStatus.BuildId); }
public TravisCiBuildStatus(TravisCiBuildDefinition travisCiBuildDefinition, string jsonDoc, BuildDefinitionSetting buildDefinitionSetting) { try { BuildStatusEnum = ToBuildStatusEnum(TravisCiService.GetJsonValue(jsonDoc, "result")); BuildDefinitionId = buildDefinitionSetting.Id; Name = buildDefinitionSetting.Name; RequestedBy = TravisCiService.GetJsonValue(jsonDoc, "author_name"); StartedTime = TravisCiService.GetJsonDate(jsonDoc, "started_at"); Comment = TravisCiService.GetJsonValue(jsonDoc, "message"); FinishedTime = TravisCiService.GetJsonDate(jsonDoc, "finished_at"); Url = "http://travis-ci.org/" + travisCiBuildDefinition.OwnerName + "/" + travisCiBuildDefinition.ProjectName + "/builds/" + TravisCiService.GetJsonValue(jsonDoc, "id"); BuildId = TravisCiService.GetJsonValue(jsonDoc, "id"); } catch (Exception) { _log.Error("Error parsing the following json: " + jsonDoc); throw; } }
/// <param name="rootUrl">Must not end with /</param> public static BambooBuildStatus CreateBuildResult(XDocument doc, BuildDefinitionSetting buildDefinitionSetting, string rootUrl) { BambooBuildStatus result = new BambooBuildStatus { BuildDefinitionId = buildDefinitionSetting.Id, Name = buildDefinitionSetting.Name }; if (doc.Root == null) throw new Exception("Invalid root element"); var stateStr = doc.Root.AttributeValueOrDefault("state"); result.StartedTime = ParseDateTime(doc.Root.ElementValueOrDefault("buildStartedTime")); result.FinishedTime = ParseDateTime(doc.Root.ElementValueOrDefault("buildCompletedTime")); result.BuildStatusEnum = ToBuildStatusEnum(stateStr); var changesElem = doc.Root.Element("changes"); if (changesElem != null) { var changeElem = changesElem.Element("change"); if (changeElem != null) { result.RequestedBy = changeElem.AttributeValueOrDefault("author"); result.Comment = changeElem.ElementValueOrDefault("comment"); } } result.BuildId = doc.Root.AttributeValueOrDefault("number"); string buildKey = doc.Root.AttributeValueOrDefault("key"); // i.e. the "plan key" result.Url = rootUrl + "/browse/" + buildKey; if (string.IsNullOrWhiteSpace(result.RequestedBy) && string.IsNullOrWhiteSpace(result.Comment)) { var buildReason = doc.Root.ElementValueOrDefault("buildReason"); result.Comment = GetCommentFromBuildReason(buildReason); result.RequestedBy = GetUserFromBuildReason(buildReason); } return result; }
private TravisCiBuildStatus GetBuildStatus(CiEntryPointSetting ciEntryPointSetting, BuildDefinitionSetting buildDefinitionSetting) { var webClient = new WebClient(); var authToken = ciEntryPointSetting.GetPassword(); AddTravisHeaders(webClient, authToken); var travisBuildDef = TravisCiBuildDefinition.FromIdString(buildDefinitionSetting.Id); var buildDefinitionUrl = GetUrl(ciEntryPointSetting.Url, travisBuildDef.OwnerName, travisBuildDef.ProjectName); try { var json = webClient.DownloadString(buildDefinitionUrl); var lastBuildId = GetJsonValue(json, "last_build_id"); var buildUrl = string.Format("{0}builds/{1}", ciEntryPointSetting.Url, lastBuildId); json = webClient.DownloadString(buildUrl); return new TravisCiBuildStatus(travisBuildDef, json, buildDefinitionSetting); } catch (WebException webException) { throw WebClientXml.ToServerUnavailableException(buildDefinitionUrl, webException); } }
public static BambooBuildStatus CreateIsBuilding(BuildDefinitionSetting buildDefinitionSetting) { BambooBuildStatus result = new BambooBuildStatus { BuildDefinitionId = buildDefinitionSetting.Id, Name = buildDefinitionSetting.Name, BuildStatusEnum = BuildStatusEnum.InProgress }; DateTime startTime; if (_startTimeLookup.TryGetValue(buildDefinitionSetting.Id, out startTime)) { result.StartedTime = startTime; } else { result.StartedTime = DateTime.Now; _startTimeLookup.Add(buildDefinitionSetting.Id, result.StartedTime.Value); } return result; }
public void CruiseControlNetBuildStatus_InProgress() { var document = ResourceManager.CruiseControlNetJoesProject1; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; XElement projectElement = document.Root.Element("Project"); CruiseControlNetBuildStatus.ClearCache(); CruiseControlNetBuildStatus buildStatus = new CruiseControlNetBuildStatus(projectElement, null); Assert.AreEqual(BuildStatusEnum.InProgress, buildStatus.BuildStatusEnum); Assert.AreEqual("CruiseControlNetProj1", buildStatus.BuildDefinitionId); Assert.AreEqual("CruiseControlNetProj1", buildStatus.Name); Assert.AreEqual(null, buildStatus.RequestedBy); Assert.IsNotNull(buildStatus.StartedTime); Assert.AreEqual(new DateTime(2011, 8, 28, 17, 20, 5, 375), buildStatus.StartedTime.Value.ToUniversalTime(), HudsonBuildStatusTest.DateAsCode(buildStatus.StartedTime.Value.ToUniversalTime())); Assert.IsNull(buildStatus.Comment); Assert.IsNotNull(buildStatus.FinishedTime); Assert.AreEqual(new DateTime(2011, 8, 28, 17, 20, 5, 375), buildStatus.FinishedTime.Value.ToUniversalTime(), HudsonBuildStatusTest.DateAsCode(buildStatus.FinishedTime.Value.ToUniversalTime())); //Assert.AreEqual("http://win7ci:8081/job/SvnTest/30/", buildStatus.Url); //Assert.AreEqual(30, buildStatus.BuildId); }
private HudsonBuildStatus GetBuildStatus(BuildDefinitionSetting buildDefinitionSetting, CiEntryPointSetting ciEntryPointSetting) { string userName = ciEntryPointSetting.UserName; string password = ciEntryPointSetting.GetPassword(); var rootUrl = GetRootUrl(ciEntryPointSetting.Url); var treatUnstableAsSuccess = ciEntryPointSetting.TreatUnstableAsSuccess; string url = rootUrl + "/job/" + buildDefinitionSetting.Id + "/api/xml"; try { XDocument doc = DownloadXml(url, userName, password); if (doc.Root == null) { return new HudsonBuildStatus(null, buildDefinitionSetting, "Could not get project status", treatUnstableAsSuccess); } var lastBuildElem = doc.Root.Element("lastBuild"); if (lastBuildElem == null) { return new HudsonBuildStatus(null, buildDefinitionSetting, "No project builds found", treatUnstableAsSuccess); } var buildNumber = lastBuildElem.ElementValueOrDefault("number"); var buildUrl = rootUrl + "/job/" + buildDefinitionSetting.Id + "/" + buildNumber; if (string.IsNullOrWhiteSpace(buildUrl)) throw new Exception("Could not get build url"); buildUrl += "/api/xml"; doc = DownloadXml(buildUrl, userName, password); if (doc.Root == null) throw new Exception("Could not get project build status"); return GetBuildStatusAndCommentsFromXDocument(buildDefinitionSetting, doc, treatUnstableAsSuccess); } catch (SosException ex) { if (ex.Message.ToLower(CultureInfo.CurrentCulture).Contains("not_found")) { throw new BuildDefinitionNotFoundException(buildDefinitionSetting); } throw; } }
public HudsonBuildStatus(XDocument doc, BuildDefinitionSetting buildDefinitionSetting, string defaultBuildStatusMessage = null) { try { InitialiseBuildStatus(buildDefinitionSetting, defaultBuildStatusMessage); if (doc == null) return; var docRoot = LocateDocumentRoot(doc); if (docRoot == null) { _log.Error("Error parsing the following xml:" + Environment.NewLine + doc); return; } DetermineBuildUrl(docRoot); DetermineBuildId(docRoot); DetermineBuildStatus(docRoot); var changeSet = GetElementByName(docRoot, "changeSet"); if (changeSet == null) { _log.Error("ChangeSet not found in the following xml:" + Environment.NewLine + doc); return; } var changeSetItem = GetElementByName(changeSet, "item"); DetermineBuildTimes(docRoot, changeSetItem); DetermineChangeDetails(docRoot, changeSetItem); } catch (Exception) { _log.Error("Error parsing the following xml:" + Environment.NewLine + doc); throw; } }
public void CruiseControlNetBuildStatus_ChangesToInProgress() { var inProgressStatus = ResourceManager.CruiseControlNetJoesProject1; var notInProgressStatus = ResourceManager.CruiseControlNetJoesProject2; BuildDefinitionSetting buildDefinitionSetting = new BuildDefinitionSetting(); buildDefinitionSetting.Name = "Name"; buildDefinitionSetting.Id = "BuildDefinitionId"; XElement notInProgressStatusProjectElement = notInProgressStatus.Root.Element("Project"); XElement inProgressStatusProjectElement = inProgressStatus.Root.Element("Project"); CruiseControlNetBuildStatus.ClearCache(); new CruiseControlNetBuildStatus(notInProgressStatusProjectElement, null); CruiseControlNetBuildStatus buildStatus = new CruiseControlNetBuildStatus(inProgressStatusProjectElement, null); Assert.AreEqual(BuildStatusEnum.InProgress, buildStatus.BuildStatusEnum); Assert.AreEqual("CruiseControlNetProj1", buildStatus.BuildDefinitionId); Assert.AreEqual("CruiseControlNetProj1", buildStatus.Name); Assert.AreEqual(null, buildStatus.RequestedBy); Assert.IsNotNull(buildStatus.StartedTime); Assert.AreEqual(DateTime.Now.ToString(), buildStatus.StartedTime.Value.ToString()); Assert.IsNull(buildStatus.Comment); Assert.IsNull(buildStatus.FinishedTime); Assert.AreEqual("http://VMXP/ccnet/server/local/project/CruiseControlNetProj1/build/log20110828202005Lbuild.3.xml/ViewBuildReport.aspx", buildStatus.Url); Assert.AreEqual("3", buildStatus.BuildId); }