public override async Task EvaluateAsync( IMergePolicyEvaluationContext context, MergePolicyProperties properties) { var ignoreChecks = new HashSet <string>(properties.Get <string[]>("ignoreChecks") ?? Array.Empty <string>()); await EvaluateChecksAsync(context, ignoreChecks); }
public override async Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties) { IEnumerable <Review> reviews = await context.Darc.GetPullRequestReviewsAsync(context.PullRequestUrl); if (reviews.Any(r => r.Status == ReviewState.ChangesRequested || r.Status == ReviewState.Rejected)) { context.Fail("There are reviews that have requested changes."); } else { context.Succeed("No reviews have requested changes."); } }
public override async Task EvaluateAsync( IMergePolicyEvaluationContext context, MergePolicyProperties properties) { var ignoreChecks = new HashSet <string>(properties.Get <string[]>("ignoreChecks") ?? Array.Empty <string>()); IEnumerable <Check> checks = await context.Darc.GetPullRequestChecksAsync(context.PullRequestUrl); IEnumerable <Check> notIgnoredChecks = checks.Where(c => !ignoreChecks.Contains(c.Name)); if (!notIgnoredChecks.Any()) { context.Fail("No un-ignored checks."); return; } ILookup <CheckState, Check> statuses = notIgnoredChecks.ToLookup( c => { // unify the check statuses to success, pending, and error switch (c.Status) { case CheckState.Success: case CheckState.Pending: return(c.Status); default: return(CheckState.Error); } }); string ListChecks(CheckState state) { return(string.Join(", ", statuses[state].Select(c => c.Name))); } if (statuses.Contains(CheckState.Error)) { context.Fail($"Unsuccessful checks: {ListChecks(CheckState.Error)}"); return; } if (statuses.Contains(CheckState.Pending)) { context.Pending($"Waiting on checks: {ListChecks(CheckState.Pending)}"); return; } context.Succeed($"Successful checks: {ListChecks(CheckState.Success)}"); }
public override async Task EvaluateAsync( IMergePolicyEvaluationContext context, MergePolicyProperties properties) { var requiredChecks = new HashSet <string>(properties.Get <List <string> >("checks")); Dictionary <string, Check> checks = (await context.Darc.GetPullRequestChecksAsync(context.PullRequestUrl)).ToDictionary(c => c.Name); var missingChecks = new List <string>(); var failedChecks = new List <Check>(); foreach (string requiredCheck in requiredChecks) { if (checks.TryGetValue(requiredCheck, out Check check)) { if (check.Status != CheckState.Success) { failedChecks.Add(check); } } else { missingChecks.Add(requiredCheck); } } if (missingChecks.Count < 1 && failedChecks.Count < 1) { context.Succeed("Required checks passed."); return; } var parts = new List <string>(); if (failedChecks.Any()) { parts.Add($"Unsuccessful checks: {string.Join(", ", failedChecks.Select(c => c.Name))}"); } if (missingChecks.Any()) { parts.Add($"Missing checks: {string.Join(", ", missingChecks)}"); } context.Fail(string.Join("; ", parts)); }
internal static void EvaluateDowngrades(IMergePolicyEvaluationContext context) { try { if (HasAnyDowngrade(context.PullRequest)) { context.Fail("Some dependency updates are downgrades. Aborting auto-merge."); } else { context.Succeed("No version downgrade detected."); } } catch (Exception e) { context.Fail($"Failed to check version downgrades. Aborting auto-merge. {e.Message}"); } }
public override async Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties) { HashSet <string> ignoredChecks = null; string prUrl = context.PullRequestUrl; if (prUrl.Contains("github.com")) { ignoredChecks = standardGithubIgnoredChecks; } else if (prUrl.Contains("dev.azure.com")) { ignoredChecks = standardAzureDevOpsIgnoredChecks; } else { throw new NotImplementedException("Unknown pr repo url"); } await AllChecksSuccessfulMergePolicy.EvaluateChecksAsync(context, ignoredChecks); await NoRequestedChangesMergePolicy.EvaluateReviewAsync(context); }
public override Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties) { context.Fail("Merge Policy Not Yet Implemented."); return(Task.CompletedTask); }
public override async Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties) { EvaluateDowngrades(context); await Task.CompletedTask; }
public abstract Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties);
public override async Task EvaluateAsync(IMergePolicyEvaluationContext context, MergePolicyProperties properties) { await EvaluateReviewAsync(context); }