diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts
index d7f17709a6ad6b287641255f52fd426bd1b2a64c..1b50dcbd7901301ee4bd4bb41a993c602475e9bb 100644
--- a/lib/workers/pr/index.ts
+++ b/lib/workers/pr/index.ts
@@ -149,6 +149,16 @@ export type EnsurePrResult = ResultWithPr | ResultWithoutPr;
 export async function ensurePr(
   prConfig: BranchConfig
 ): Promise<EnsurePrResult> {
+  let branchStatus: BranchStatus;
+  async function getBranchStatus(): Promise<BranchStatus> {
+    if (branchStatus) {
+      return branchStatus;
+    }
+    branchStatus = await resolveBranchStatus(branchName, ignoreTests);
+    logger.debug(`Branch status is: ${branchStatus}`);
+    return branchStatus;
+  }
+
   const config: BranchConfig = { ...prConfig };
 
   logger.trace({ config }, 'ensurePr');
@@ -168,7 +178,6 @@ export async function ensurePr(
     logger.debug('Forcing PR because of artifact errors');
     config.forcePr = true;
   }
-  let branchStatus: BranchStatus;
 
   // Only create a PR if a branch automerge has failed
   if (
@@ -176,13 +185,10 @@ export async function ensurePr(
     config.automergeType.startsWith('branch') &&
     !config.forcePr
   ) {
-    branchStatus ||= await resolveBranchStatus(branchName, ignoreTests);
-    logger.debug(
-      `Branch is configured for branch automerge, branch status) is: ${branchStatus}`
-    );
+    logger.debug(`Branch automerge is enabled`);
     if (
       config.stabilityStatus !== BranchStatus.yellow &&
-      branchStatus === BranchStatus.yellow
+      (await getBranchStatus()) === BranchStatus.yellow
     ) {
       logger.debug('Checking how long this branch has been pending');
       const lastCommitTime = await getBranchLastCommitTime(branchName);
@@ -196,7 +202,7 @@ export async function ensurePr(
         config.forcePr = true;
       }
     }
-    if (config.forcePr || branchStatus === BranchStatus.red) {
+    if (config.forcePr || (await getBranchStatus()) === BranchStatus.red) {
       logger.debug(`Branch tests failed, so will create PR`);
     } else {
       // Branch should be automerged, so we don't want to create a PR
@@ -205,9 +211,8 @@ export async function ensurePr(
   }
   if (config.prCreation === 'status-success') {
     logger.debug('Checking branch combined status');
-    branchStatus ||= await resolveBranchStatus(branchName, ignoreTests);
-    if (branchStatus !== BranchStatus.green) {
-      logger.debug(`Branch status is "${branchStatus}" - not creating PR`);
+    if ((await getBranchStatus()) !== BranchStatus.green) {
+      logger.debug(`Branch status isn't green - not creating PR`);
       return { prBlockedBy: 'AwaitingTests' };
     }
     logger.debug('Branch status success');
@@ -223,9 +228,8 @@ export async function ensurePr(
     !config.forcePr
   ) {
     logger.debug('Checking branch combined status');
-    branchStatus ||= await resolveBranchStatus(branchName, ignoreTests);
-    if (branchStatus === BranchStatus.yellow) {
-      logger.debug(`Branch status is "${branchStatus}" - checking timeout`);
+    if ((await getBranchStatus()) === BranchStatus.yellow) {
+      logger.debug(`Branch status is yellow - checking timeout`);
       const lastCommitTime = await getBranchLastCommitTime(branchName);
       const currentTime = new Date();
       const millisecondsPerHour = 1000 * 60 * 60;
@@ -330,7 +334,7 @@ export async function ensurePr(
         !existingPr.hasAssignees &&
         !existingPr.hasReviewers &&
         config.automerge &&
-        branchStatus === BranchStatus.red
+        (await getBranchStatus()) === BranchStatus.red
       ) {
         logger.debug(`Setting assignees and reviewers as status checks failed`);
         await addAssigneesReviewers(config, existingPr);
@@ -475,7 +479,7 @@ export async function ensurePr(
     if (
       config.automerge &&
       !config.assignAutomerge &&
-      branchStatus !== BranchStatus.red
+      (await getBranchStatus()) !== BranchStatus.red
     ) {
       logger.debug(
         `Skipping assignees and reviewers as automerge=${config.automerge}`