From d0dae99796f05b4373a78320a6fbd7e1e2c44e56 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 12 Feb 2020 09:19:15 +0100
Subject: [PATCH] fix(github): log canMergeReason if pr.canMerge = false;

---
 lib/platform/github/index.ts                    | 15 +++++++++++++--
 lib/workers/pr/index.ts                         |  5 ++++-
 .../github/__snapshots__/index.spec.ts.snap     | 17 +++++++++++++++++
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index 83147c58ad..d641e8a96a 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -767,8 +767,16 @@ async function getOpenPrs(): Promise<PrList> {
         const canMergeStates = ['BEHIND', 'CLEAN'];
         const hasNegativeReview =
           pr.reviews && pr.reviews.nodes && pr.reviews.nodes.length > 0;
-        pr.canMerge =
-          canMergeStates.includes(pr.mergeStateStatus) && !hasNegativeReview;
+        // istanbul ignore if
+        if (hasNegativeReview) {
+          pr.canMerge = false;
+          pr.canMergeReason = `hasNegativeReview`;
+        } else if (!canMergeStates.includes(pr.mergeStateStatus)) {
+          pr.canMerge = false;
+          pr.canMergeReason = `mergeStateStatus = ${pr.mergeStateStatus}`;
+        } else {
+          pr.canMerge = true;
+        }
         // https://developer.github.com/v4/enum/mergestatestatus
         if (pr.mergeStateStatus === 'DIRTY') {
           pr.isConflicted = true;
@@ -877,6 +885,9 @@ export async function getPr(prNo: number): Promise<Pr | null> {
     pr.sha = pr.head ? pr.head.sha : undefined;
     if (pr.mergeable === true) {
       pr.canMerge = true;
+    } else {
+      pr.canMerge = false;
+      pr.canMergeReason = `mergeable = ${pr.mergeable}`;
     }
     if (pr.mergeable_state === 'dirty') {
       logger.debug({ prNo }, 'PR state is dirty so unmergeable');
diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts
index f577f4ea9d..4559a2a5cc 100644
--- a/lib/workers/pr/index.ts
+++ b/lib/workers/pr/index.ts
@@ -471,7 +471,10 @@ export async function checkAutoMerge(pr: Pr, config): Promise<boolean> {
       return false;
     }
     if (requiredStatusChecks && pr.canMerge !== true) {
-      logger.info('PR is not ready for merge');
+      logger.info(
+        { canMergeReason: pr.canMergeReason },
+        'PR is not ready for merge'
+      );
       return false;
     }
     const branchStatus = await platform.getBranchStatus(
diff --git a/test/platform/github/__snapshots__/index.spec.ts.snap b/test/platform/github/__snapshots__/index.spec.ts.snap
index 15d00a595c..d95c4fbf08 100644
--- a/test/platform/github/__snapshots__/index.spec.ts.snap
+++ b/test/platform/github/__snapshots__/index.spec.ts.snap
@@ -170,6 +170,8 @@ Object {
     "sha": "1234",
   },
   "branchName": "somebranch",
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 1,
   "deletions": 1,
   "displayNumber": "Pull Request #91",
@@ -224,6 +226,8 @@ Object {
     "sha": "1234",
   },
   "branchName": "somebranch",
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 1,
   "deletions": 1,
   "displayNumber": "Pull Request #90",
@@ -268,6 +272,7 @@ exports[`platform/github getPr(prNo) should return PR from graphql result 1`] =
 Object {
   "branchName": "renovate/jest-monorepo",
   "canMerge": false,
+  "canMergeReason": "mergeStateStatus = DIRTY",
   "displayNumber": "Pull Request #2500",
   "isConflicted": true,
   "isModified": false,
@@ -298,6 +303,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 1,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
@@ -333,6 +340,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 1,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
@@ -350,6 +359,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 2,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
@@ -367,6 +378,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 1,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
@@ -384,6 +397,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 2,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
@@ -401,6 +416,8 @@ Object {
     "sha": "1234",
   },
   "branchName": undefined,
+  "canMerge": false,
+  "canMergeReason": "mergeable = undefined",
   "commits": 2,
   "displayNumber": "Pull Request #1",
   "isConflicted": true,
-- 
GitLab