public void Accept(TeamcityEvent teamcityEvent) { if (teamcityEvent.BranchName == "master") { // github only shows status for comparisons, so we're not going to see any on the master branch return; } var buildId = teamcityEvent.BuildId; var revision = m_TeamcityApi.RevisionForBuild(buildId).Result; if (revision == null) { // build doesn't have a revision yet -- try again soon Trace.WriteLine("Delaying revision fetch for build #" + buildId); Task.Run(async() => { await Task.Delay(TimeSpan.FromSeconds(30)); Trace.WriteLine("Retrying for build #" + buildId); Accept(teamcityEvent); }); return; } SetStatus(teamcityEvent, revision); }
public void PostsResponseIfTrackingBuildFinish() { var trackedBranches = new List <Tracked <Branch> > { new Tracked <Branch>(new Branch(TeamcityEventTypes.FinishedBuilds, "asdf"), "a-channel") }; var teamcityEvent = new TeamcityEvent(TeamcityEventType.BuildFinished, "build-id", "buildType", "build name", BuildResultDelta.Unknown, "asdf", TeamcityBuildState.Unknown, "", "1.0"); CollectionAssert.IsNotEmpty(new TeamcityEventHandler().GetResponseTo(teamcityEvent, new List <Tracked <Build> >(), trackedBranches)); }
public void PostsResponseIfTrackingBuildId() { var trackedBuilds = new List <Tracked <Build> > { new Tracked <Build>(new Build("12345"), "a-channel") }; var teamcityEvent = new TeamcityEvent(TeamcityEventType.Unknown, "12345", "buildType", "build name", BuildResultDelta.Unknown, "foo", TeamcityBuildState.Unknown, "", "1.0"); CollectionAssert.IsNotEmpty(new TeamcityEventHandler().GetResponseTo(teamcityEvent, trackedBuilds, new List <Tracked <Branch> >())); }
private static string AbbreviateBuildName(TeamcityEvent teamcityEvent) { return(teamcityEvent.BuildName .Replace("SQL Compare Engine", "SCE") .Replace("SQL Data Compare Engine", "SDCE") .Replace("SQL Compare UI", "SCUI") .Replace("SQL Data Compare UI", "SDCUI") .Replace("SQL Compare", "SC") .Replace("SQL Data Compare", "SDC")); }
private void SetStatus(TeamcityEvent teamcityEvent, TeamcityRevisionForBuild revision) { var buildLink = string.Format("http://buildserver/viewLog.html?buildId={0}", teamcityEvent.BuildId); var description = AbbreviateBuildName(teamcityEvent); switch (teamcityEvent.EventType) { case TeamcityEventType.BuildStarted: m_StatusApi.SetStatus(revision.User, revision.Repo, revision.Hash, "pending", "build started", description, buildLink); break; case TeamcityEventType.BuildFinished: var status = teamcityEvent.BuildState == TeamcityBuildState.Success ? "success" : "failure"; m_StatusApi.SetStatus(revision.User, revision.Repo, revision.Hash, status, teamcityEvent.BuildStateText, description, buildLink); break; } }
public IEnumerable <Response> GetResponseTo(TeamcityEvent teamcityEvent, List <Tracked <Build> > trackedBuilds, List <Tracked <Branch> > trackedBranches) { var result = new List <Response>(); foreach (var trackedBranch in trackedBranches.Where(x => x.Value.Name == teamcityEvent.BranchName)) { if (trackedBranch.IsTracking(TeamcityEventTypes.BreakingBuilds) && teamcityEvent.BuildResultDelta == BuildResultDelta.Broken) { result.Add(new Response(string.Format("Build {0} has broken on branch {1}!", teamcityEvent.BuildName, teamcityEvent.BranchName), trackedBranch.Channel)); } else if (trackedBranch.IsTracking(TeamcityEventTypes.FinishedBuilds) && teamcityEvent.EventType == TeamcityEventType.BuildFinished) { result.Add(new Response(string.Format("Build {0} has finished", teamcityEvent.BuildName), trackedBranch.Channel)); } } foreach (var trackedBuild in trackedBuilds.Where(x => x.Value.ID == teamcityEvent.BuildId)) { result.Add(new Response(string.Format("{0} build updated: {1}", teamcityEvent.BuildName, teamcityEvent.EventType), trackedBuild.Channel)); } return(result); }
public void Accept(TeamcityEvent teamcityEvent) { m_Queue.Enqueue(teamcityEvent); }