public async Task RunAsync()
        {
            var prBuild = await _teamcityService.GetTeamCityBuild(_buildId);

            var prNumber = GetBranchId(prBuild.BranchName);

            if (!prNumber.HasValue)
            {
                Console.WriteLine("This build is not for a pull request");
                return;
            }

            var github = new GithubApi(_gitToken);

            foreach (var configs in _configs)
            {
                var parts            = configs.Split(':');
                var oldConfiguration = parts[0];
                var newConfiguration = parts[1];

                var oldBuildType = await _teamcityService.GetTeamCityBuildType(oldConfiguration);

                var newBuildUrl = await _teamcityService.GetTeamCityLastBuildUrlOfBuildType(newConfiguration);

                await github.SetStatusCheckAsync(prBuild.Revisions.Revision.First().Version, new StatusCheck
                {
                    State       = StatusCheckType.success,
                    TargetUrl   = newBuildUrl,
                    Description = "Deprecated - This check has been replaced by a daily build",
                    Context     = $"{oldBuildType.Name} ({oldBuildType.Project.Name})"
                });
            }
        }
Exemple #2
0
        private async Task CheckDerivationStatus(PullRequest pullRequest, DateTime now, string buildUrl)
        {
            Console.WriteLine($"Checking status for pull request \"{pullRequest.Title}\"");
            var commit = await _git.GetCommonAncestorWithDevelop(pullRequest.Head.Commit);

            if (string.IsNullOrEmpty(commit))
            {
                Console.WriteLine("Could not retrieve ancestor commit");
                return;
            }

            pullRequest.LastDevelopCommit = commit;
            Console.WriteLine($"Common ancestor is commit {commit}");

            var commitDate = await _git.GetCommitDate(commit);

            if (!commitDate.HasValue)
            {
                Console.WriteLine("Could not retrieve commit date");
                return;
            }

            pullRequest.LastDevelopMerge = commitDate;
            Console.WriteLine($"This commit dates from {commitDate.Value:f}");

            var isUpToDate = commitDate.Value >= GetTimeLimit(now);

            var status = new StatusCheck
            {
                TargetUrl = buildUrl,
                Context   = "Recent merge from develop"
            };

            if (isUpToDate)
            {
                Console.WriteLine($"    \"{pullRequest.Title}\" is up to date");
                status.State       = StatusCheckType.success;
                status.Description = "The branch contains a recent version of develop";
            }
            else
            {
                var span = now - commitDate.Value;
                Console.WriteLine($"    \"{pullRequest.Title}\" derived for more than {span.Days} days");
                status.State       = StatusCheckType.failure;
                status.Description = $"The branch derived from develop for more than {span.Days} days";
            }

            if (!_dryRun)
            {
                await _github.SetStatusCheckAsync(pullRequest.Head.Commit, status);
            }
        }