예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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> >()));
        }
예제 #4
0
 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"));
 }
예제 #5
0
        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;
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
 public void Accept(TeamcityEvent teamcityEvent)
 {
     m_Queue.Enqueue(teamcityEvent);
 }