Ejemplo n.º 1
0
        public override async Task Check(Repository repo)
        {
            var message  = UPDATE;
            var settings = RepoSettingsFor(repo.Name);
            var update   = new RepoUpdate {
                Name = repo.Name, DefaultBranch = repo.DefaultBranch
            };

            if (await ShouldSetStrict(settings, repo))
            {
                if (!message.Equals(UPDATE))
                {
                    message += " and ";
                }
                message += "will remove strict reviewers";
                update.UpdateStrictReviews = true;
            }

            if (await ShouldSetReviewers(settings, update, repo))
            {
                if (!message.Equals(UPDATE))
                {
                    message += " and ";
                }
                message += "will set ";
                var changes = new List <string>();
                if (update.UpdateReviewers)
                {
                    changes.Add($"required reviewers to {settings.Reviewers}");
                }
                if (update.UpdateRequireOwners)
                {
                    changes.Add($"require codeowners to {settings.RequireCodeOwnerReviews}");
                }
                if (update.UpdateDismissStale)
                {
                    changes.Add($"dismiss state reviews to {settings.DismissStaleReviews}");
                }

                message += string.Join(',', changes);
            }

            if (message.Equals(UPDATE))
            {
                l($"[OK] {repo.Name} already has {repo.DefaultBranch} branch protection with the number of reviewers {settings.Reviewers}, {(settings.RequireStrictReviews ? "non-" : string.Empty)}strict and {(settings.RequireCodeOwnerReviews ? "should " : "shouldn\'t") }code owners reviews", 1);
            }
            else
            {
                l($"{message} on {repo.Name}", 1);
                Change.Add(update);
            }
        }
Ejemplo n.º 2
0
        private async Task <bool> ShouldSetReviewers(IRepositorySettings settings, RepoUpdate update, Repository repo)
        {
            try
            {
                var requiredReviewers = await Client.Repository.Branch.GetBranchProtection(Config.Github.Org, repo.Name, repo.DefaultBranch);

                // If nothing is set up we'll get nulls back, and then we should just set everything up.
                if (requiredReviewers?.RequiredPullRequestReviews == null)
                {
                    // We don't super need the excpetion here, but we need to set some values on the
                    // update object. So we throw this exception and catch it below, and only set
                    // the properties there.
                    throw new Octokit.NotFoundException("not found", HttpStatusCode.NotFound);
                }
                // If we do have things setup, we should make sure they are setup the way we specified.
                else
                {
                    // Does not have the required amount of reviewers?
                    update.UpdateReviewers = requiredReviewers.RequiredPullRequestReviews.RequiredApprovingReviewCount < settings.Reviewers;
                    // Is is set to stale?
                    update.UpdateDismissStale = requiredReviewers.RequiredPullRequestReviews.DismissStaleReviews != settings.DismissStaleReviews;
                    // Check if code owners are required to review a PR
                    update.UpdateRequireOwners = requiredReviewers.RequiredPullRequestReviews.RequireCodeOwnerReviews != settings.RequireCodeOwnerReviews;
                }
            }
            catch (Octokit.NotFoundException)
            {
                // this usually means that it's a new repo, and we have to set it up
                update.UpdateDismissStale  = true;
                update.UpdateRequireOwners = true;
                update.UpdateStrictReviews = true;
                update.UpdateReviewers     = true;
            }

            return(update.UpdateReviewers || update.UpdateDismissStale || update.UpdateRequireOwners);
        }