diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index 41ad1ce99941441b68b26a996487de9f477b0dfe..8abfac7a137caa8ded4edc4358e20ef3c2f74ed5 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -201,7 +201,7 @@ In that case Renovate first creates a branch and associated Pull Request, and th
 If by the next run the PR is already behind the base branch it will be automatically rebased, because Renovate only automerges branches which are up-to-date and green.
 If Renovate is scheduled for hourly runs on the repository but commits are made every 15 minutes to the main branch, then an automerge like this will keep getting deferred with every rebase.
 
-Note: if you have no tests but still want Renovate to automerge, you need to add `"requiredStatusChecks": null` to your configuration.
+Note: if you have no tests but still want Renovate to automerge, you need to add `"ignoreTests": true` to your configuration.
 
 If you prefer that Renovate more silently automerge _without_ Pull Requests at all, you can configure `"automergeType": "branch"`. In this case Renovate will:
 
@@ -1103,6 +1103,14 @@ It would take the entire `"config:base"` preset - which contains a lot of sub-pr
 
 Applicable for npm and Composer only for now. Set this to `true` if running scripts causes problems.
 
+## ignoreTests
+
+Currently Renovate's default behavior is to only automerge if every status check has succeeded.
+
+Setting this option to `true` means that Renovate will ignore _all_ status checks.
+You can set this if you don't have any status checks but still want Renovate to automerge PRs.
+Beware: configuring Renovate to automerge without any tests can lead to broken builds on your base branch, please think again before enabling this!
+
 ## ignoreUnstable
 
 By default, Renovate won't update any package versions to unstable versions (e.g. `4.0.0-rc3`) unless the current version has the same `major.minor.patch` and was _already_ unstable (e.g. it was already on `4.0.0-rc2`).
@@ -2141,17 +2149,6 @@ In case there is a need to configure them manually, it can be done using this `r
 
 The field supports multiple URLs however it is datasource-dependent on whether only the first is used or multiple.
 
-## requiredStatusChecks
-
-Currently Renovate's default behavior is to only automerge if every status check has succeeded.
-
-Setting this option to `null` means that Renovate will ignore _all_ status checks.
-You can set this if you don't have any status checks but still want Renovate to automerge PRs.
-Beware: configuring Renovate to automerge without any tests can lead to broken builds on your base branch, please think again before enabling this!
-
-In future, this might be configurable to allow certain status checks to be ignored/required.
-See [issue 1853 at the Renovate repository](https://github.com/renovatebot/renovate/issues/1853) for more details.
-
 ## respectLatest
 
 Similar to `ignoreUnstable`, this option controls whether to update to versions that are greater than the version tagged as `latest` in the repository.
diff --git a/docs/usage/key-concepts/automerge.md b/docs/usage/key-concepts/automerge.md
index b33323d65bb921ae2306ea9d478d014d349f875b..7c66c0d2192520ed391aec13bae3aab953b4811e 100644
--- a/docs/usage/key-concepts/automerge.md
+++ b/docs/usage/key-concepts/automerge.md
@@ -117,7 +117,7 @@ If you see "Automerge: Disabled by config" it means you need to make a config ch
 ### Absence of tests
 
 By default, Renovate will not automerge until it sees passing status checks / check runs for the branch.
-If you have no tests but still want Renovate to automerge, you need to add `"requiredStatusChecks": null` to your configuration.
+If you have no tests but still want Renovate to automerge, you need to add `"ignoreTests": true` to your configuration.
 However, we strongly recommend you have tests in any project where you are regularly updating dependencies.
 
 ### Committer restrictions
diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index ef305caef7b100562a77baded14680f9a3e8f6cd..13497ff59cbd13180e59b1894093f9ae43241455 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -4,6 +4,7 @@ import { dequal } from 'dequal';
 import { logger } from '../logger';
 import { clone } from '../util/clone';
 import { getGlobalConfig } from './global';
+import { applyMigrations } from './migrations';
 import { getOptions } from './options';
 import { removedPresets } from './presets/common';
 import type {
@@ -57,6 +58,7 @@ export function migrateConfig(
       'peerDependencies',
     ];
     const { migratePresets } = getGlobalConfig();
+    applyMigrations(config, migratedConfig);
     for (const [key, val] of Object.entries(config)) {
       if (removedOptions.includes(key)) {
         delete migratedConfig[key];
diff --git a/lib/config/migrations/index.ts b/lib/config/migrations/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f6c961c2930312e0a3fee3aa328de59b0ef93e3
--- /dev/null
+++ b/lib/config/migrations/index.ts
@@ -0,0 +1,18 @@
+import { RenovateConfig } from '../types';
+import type { Migration } from './migration';
+import { RequiredStatusChecksMigration } from './required-status-checks-migration';
+
+export function applyMigrations(
+  originalConfig: RenovateConfig,
+  migratedConfig: RenovateConfig
+): RenovateConfig {
+  const migrations: Migration[] = [
+    new RequiredStatusChecksMigration(originalConfig, migratedConfig),
+  ];
+
+  for (const migration of migrations) {
+    migration.migrate();
+  }
+
+  return migratedConfig;
+}
diff --git a/lib/config/migrations/migration.ts b/lib/config/migrations/migration.ts
new file mode 100644
index 0000000000000000000000000000000000000000..616b96caeaeb175ab5a201cab7299dbf44f198b0
--- /dev/null
+++ b/lib/config/migrations/migration.ts
@@ -0,0 +1,18 @@
+import type { RenovateConfig } from '../types';
+
+export abstract class Migration {
+  protected readonly originalConfig: RenovateConfig;
+
+  protected readonly migratedConfig: RenovateConfig;
+
+  constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) {
+    this.originalConfig = originalConfig;
+    this.migratedConfig = migratedConfig;
+  }
+
+  abstract migrate(): void;
+
+  protected delete(property: string): void {
+    delete this.migratedConfig[property];
+  }
+}
diff --git a/lib/config/migrations/required-status-checks-migration.spec.ts b/lib/config/migrations/required-status-checks-migration.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..afe9019ee573f3baee912d97e2d2c520dc450eae
--- /dev/null
+++ b/lib/config/migrations/required-status-checks-migration.spec.ts
@@ -0,0 +1,21 @@
+import { RequiredStatusChecksMigration } from './required-status-checks-migration';
+
+describe('config/migrations/required-status-checks-migration', () => {
+  it('should migrate requiredStatusChecks=null to ignoreTests=true', () => {
+    const originalConfig: any = {
+      requiredStatusChecks: null,
+    };
+    const migratedConfig: any = {
+      requiredStatusChecks: null,
+    };
+    const migration = new RequiredStatusChecksMigration(
+      originalConfig,
+      migratedConfig
+    );
+
+    expect(migratedConfig.requiredStatusChecks).toBeNull();
+    migration.migrate();
+    expect(migratedConfig.requiredStatusChecks).toBeUndefined();
+    expect(migratedConfig.ignoreTests).toBeTrue();
+  });
+});
diff --git a/lib/config/migrations/required-status-checks-migration.ts b/lib/config/migrations/required-status-checks-migration.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3f6d64e28fe7cffa36dbc7e65b6604ee164127cf
--- /dev/null
+++ b/lib/config/migrations/required-status-checks-migration.ts
@@ -0,0 +1,11 @@
+import { Migration } from './migration';
+
+export class RequiredStatusChecksMigration extends Migration {
+  public migrate(): void {
+    this.delete('requiredStatusChecks');
+
+    if (this.originalConfig.requiredStatusChecks === null) {
+      this.migratedConfig.ignoreTests = true;
+    }
+  }
+}
diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts
index 45dcbc13f993ac30de034f09cbe8ef4efbbab6ad..6cc5c664440d05a14ff588685abcc4e228414a1a 100644
--- a/lib/config/options/index.ts
+++ b/lib/config/options/index.ts
@@ -1310,13 +1310,10 @@ const options: RenovateOptions[] = [
     default: 'automergeComment',
   },
   {
-    name: 'requiredStatusChecks',
-    description:
-      'List of status checks that must pass before automerging. Set to null to enable automerging without tests.',
-    type: 'array',
-    subType: 'string',
-    cli: false,
-    env: false,
+    name: 'ignoreTests',
+    description: 'Set to true to enable automerging without tests.',
+    type: 'boolean',
+    default: false,
   },
   {
     name: 'transitiveRemediation',
diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap
index 63987db40e2a8e933061075e045e6a1a11bb011c..ac7b6c8d96f8bdcf2071c7e81155b63fa3fb45da 100644
--- a/lib/config/presets/__snapshots__/index.spec.ts.snap
+++ b/lib/config/presets/__snapshots__/index.spec.ts.snap
@@ -33,6 +33,7 @@ Object {
     "Require all status checks to pass before any automerging",
     "Pin dependency versions for <code>devDependencies</code> and retain semver ranges for others",
   ],
+  "ignoreTests": false,
   "ignoreUnstable": true,
   "labels": Array [
     "dependencies",
@@ -85,7 +86,6 @@ Object {
   ],
   "prCreation": "immediate",
   "rebaseWhen": "behind-base-branch",
-  "requiredStatusChecks": Array [],
   "respectLatest": true,
   "schedule": Array [
     "before 8am",
diff --git a/lib/config/presets/internal/default.ts b/lib/config/presets/internal/default.ts
index 633c53948bc1ae78eefb27045a0328bd7a3039bf..40fbcd749d194afcd0f4184c68440735b903a4fb 100644
--- a/lib/config/presets/internal/default.ts
+++ b/lib/config/presets/internal/default.ts
@@ -316,11 +316,11 @@ export const presets: Record<string, Preset> = {
   },
   automergeRequireAllStatusChecks: {
     description: 'Require all status checks to pass before any automerging',
-    requiredStatusChecks: [],
+    ignoreTests: false,
   },
   skipStatusChecks: {
     description: 'Skip status checks and automerge right away',
-    requiredStatusChecks: null,
+    ignoreTests: true,
   },
   maintainLockFilesDisabled: {
     description:
diff --git a/lib/config/types.ts b/lib/config/types.ts
index ea13c4919112355d90b5aff158ce879fd72059e2..322eea60ad1207ce351d83ff80fc286b6b07d48f 100644
--- a/lib/config/types.ts
+++ b/lib/config/types.ts
@@ -38,6 +38,7 @@ export interface RenovateSharedConfig {
   includePaths?: string[];
   ignoreDeps?: string[];
   ignorePaths?: string[];
+  ignoreTests?: boolean;
   labels?: string[];
   addLabels?: string[];
   dependencyDashboardApproval?: boolean;
@@ -55,7 +56,6 @@ export interface RenovateSharedConfig {
   recreateClosed?: boolean;
   repository?: string;
   repositoryCache?: RepositoryCacheConfig;
-  requiredStatusChecks?: string[];
   schedule?: string[];
   semanticCommits?: 'auto' | 'enabled' | 'disabled';
   semanticCommitScope?: string;
diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts
index 90e2361480b25698008a1ad1bc89f8cc80501b86..88ff522dd04dc026d3b089e2a9ec0cc52b9041dc 100644
--- a/lib/platform/azure/index.spec.ts
+++ b/lib/platform/azure/index.spec.ts
@@ -474,17 +474,7 @@ describe('platform/azure/index', () => {
       expect(res).toBeNull();
     });
   });
-  describe('getBranchStatus(branchName, requiredStatusChecks)', () => {
-    it('return success if requiredStatusChecks null', async () => {
-      await initRepo('some/repo');
-      const res = await azure.getBranchStatus('somebranch', null);
-      expect(res).toEqual(BranchStatus.green);
-    });
-    it('return failed if unsupported requiredStatusChecks', async () => {
-      await initRepo('some/repo');
-      const res = await azure.getBranchStatus('somebranch', ['foo']);
-      expect(res).toEqual(BranchStatus.red);
-    });
+  describe('getBranchStatus(branchName, ignoreTests)', () => {
     it('should pass through success', async () => {
       await initRepo({ repository: 'some/repo' });
       azureApi.gitApi.mockImplementationOnce(
@@ -494,7 +484,7 @@ describe('platform/azure/index', () => {
             getStatuses: jest.fn(() => [{ state: GitStatusState.Succeeded }]),
           } as any)
       );
-      const res = await azure.getBranchStatus('somebranch', []);
+      const res = await azure.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
     });
     it('should pass through failed', async () => {
@@ -506,7 +496,7 @@ describe('platform/azure/index', () => {
             getStatuses: jest.fn(() => [{ state: GitStatusState.Error }]),
           } as any)
       );
-      const res = await azure.getBranchStatus('somebranch', []);
+      const res = await azure.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.red);
     });
     it('should pass through pending', async () => {
@@ -518,7 +508,7 @@ describe('platform/azure/index', () => {
             getStatuses: jest.fn(() => [{ state: GitStatusState.Pending }]),
           } as any)
       );
-      const res = await azure.getBranchStatus('somebranch', []);
+      const res = await azure.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
     });
     it('should fall back to yellow if no statuses returned', async () => {
@@ -530,7 +520,7 @@ describe('platform/azure/index', () => {
             getStatuses: jest.fn(() => []),
           } as any)
       );
-      const res = await azure.getBranchStatus('somebranch', []);
+      const res = await azure.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
     });
   });
diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts
index d91f5aa485fe2dfea8d98d01149dd60ee3a427f6..e91aa5e06ec5105acfdba2816266438e26e5bd76 100644
--- a/lib/platform/azure/index.ts
+++ b/lib/platform/azure/index.ts
@@ -331,19 +331,9 @@ export async function getBranchStatusCheck(
 }
 
 export async function getBranchStatus(
-  branchName: string,
-  requiredStatusChecks: string[]
+  branchName: string
 ): Promise<BranchStatus> {
   logger.debug(`getBranchStatus(${branchName})`);
-  if (!requiredStatusChecks) {
-    // null means disable status checks, so it always succeeds
-    return BranchStatus.green;
-  }
-  if (requiredStatusChecks.length) {
-    // This is Unsupported
-    logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`);
-    return BranchStatus.red;
-  }
   const statuses = await getStatusCheck(branchName);
   logger.debug({ branch: branchName, statuses }, 'branch status check result');
   if (!statuses.length) {
diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts
index 9ca7dba1e8353c2c3b3b5cc6e31dbd84697afb2e..a42764fe0ed5c5702e2703341f474429803e32f4 100644
--- a/lib/platform/bitbucket-server/index.spec.ts
+++ b/lib/platform/bitbucket-server/index.spec.ts
@@ -1749,10 +1749,6 @@ Followed by some information.
               failed: 0,
             });
 
-          expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual(
-            BranchStatus.green
-          );
-
           expect(await bitbucket.getBranchStatus('somebranch')).toEqual(
             BranchStatus.green
           );
@@ -1772,7 +1768,7 @@ Followed by some information.
               failed: 0,
             });
 
-          expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual(
+          expect(await bitbucket.getBranchStatus('somebranch')).toEqual(
             BranchStatus.yellow
           );
 
@@ -1786,7 +1782,7 @@ Followed by some information.
               failed: 0,
             });
 
-          expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual(
+          expect(await bitbucket.getBranchStatus('somebranch')).toEqual(
             BranchStatus.yellow
           );
 
@@ -1805,7 +1801,7 @@ Followed by some information.
               failed: 1,
             });
 
-          expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual(
+          expect(await bitbucket.getBranchStatus('somebranch')).toEqual(
             BranchStatus.red
           );
 
@@ -1815,7 +1811,7 @@ Followed by some information.
             )
             .replyWithError('requst-failed');
 
-          expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual(
+          expect(await bitbucket.getBranchStatus('somebranch')).toEqual(
             BranchStatus.red
           );
 
@@ -1825,9 +1821,9 @@ Followed by some information.
         it('throws repository-changed', async () => {
           git.branchExists.mockReturnValue(false);
           await initRepo();
-          await expect(
-            bitbucket.getBranchStatus('somebranch', [])
-          ).rejects.toThrow(REPOSITORY_CHANGED);
+          await expect(bitbucket.getBranchStatus('somebranch')).rejects.toThrow(
+            REPOSITORY_CHANGED
+          );
           expect(httpMock.getTrace()).toMatchSnapshot();
         });
       });
diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts
index 711be02aa8b476e973dff5cb1d3b0d1ace195668..2bc866b66464fda25d70c1e8695169fecb7b629e 100644
--- a/lib/platform/bitbucket-server/index.ts
+++ b/lib/platform/bitbucket-server/index.ts
@@ -396,18 +396,9 @@ async function getStatus(
 // umbrella for status checks
 // https://docs.atlassian.com/bitbucket-server/rest/6.0.0/bitbucket-build-rest.html#idp2
 export async function getBranchStatus(
-  branchName: string,
-  requiredStatusChecks?: string[] | null
+  branchName: string
 ): Promise<BranchStatus> {
-  logger.debug(
-    `getBranchStatus(${branchName}, requiredStatusChecks=${!!requiredStatusChecks})`
-  );
-
-  if (!requiredStatusChecks) {
-    // null means disable status checks, so it always succeeds
-    logger.debug('Status checks disabled = returning "success"');
-    return BranchStatus.green;
-  }
+  logger.debug(`getBranchStatus(${branchName})`);
 
   if (!git.branchExists(branchName)) {
     logger.debug('Branch does not exist - cannot fetch status');
diff --git a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
index 6931731cdb83dac8f232972e5f62756796d516d1..a2e14ba769ec51d10f3e93ada2f9c7a95132c0b0 100644
--- a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
@@ -557,38 +557,6 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 1 1`] = `
-Array [
-  Object {
-    "headers": Object {
-      "accept": "application/json",
-      "accept-encoding": "gzip, deflate, br",
-      "authorization": "Basic YWJjOjEyMw==",
-      "host": "api.bitbucket.org",
-      "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
-    },
-    "method": "GET",
-    "url": "https://api.bitbucket.org/2.0/repositories/some/repo",
-  },
-]
-`;
-
-exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 2 1`] = `
-Array [
-  Object {
-    "headers": Object {
-      "accept": "application/json",
-      "accept-encoding": "gzip, deflate, br",
-      "authorization": "Basic YWJjOjEyMw==",
-      "host": "api.bitbucket.org",
-      "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
-    },
-    "method": "GET",
-    "url": "https://api.bitbucket.org/2.0/repositories/some/repo",
-  },
-]
-`;
-
 exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 3 1`] = `
 Array [
   Object {
diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts
index 2d8508446e5942c71096ad31c82b2aebf1b1faaf..4716c77ab5e5f71b20601e1376f63e21dbd39879 100644
--- a/lib/platform/bitbucket/index.spec.ts
+++ b/lib/platform/bitbucket/index.spec.ts
@@ -186,20 +186,6 @@ describe('platform/bitbucket/index', () => {
   });
 
   describe('getBranchStatus()', () => {
-    it('getBranchStatus 1', async () => {
-      await initRepoMock();
-      expect(await bitbucket.getBranchStatus('master', null)).toBe(
-        BranchStatus.green
-      );
-      expect(httpMock.getTrace()).toMatchSnapshot();
-    });
-    it('getBranchStatus 2', async () => {
-      await initRepoMock();
-      expect(await bitbucket.getBranchStatus('master', ['foo'])).toBe(
-        BranchStatus.red
-      );
-      expect(httpMock.getTrace()).toMatchSnapshot();
-    });
     it('getBranchStatus 3', async () => {
       const scope = await initRepoMock();
       scope
@@ -219,9 +205,7 @@ describe('platform/bitbucket/index', () => {
             },
           ],
         });
-      expect(await bitbucket.getBranchStatus('master', [])).toBe(
-        BranchStatus.red
-      );
+      expect(await bitbucket.getBranchStatus('master')).toBe(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
     it('getBranchStatus 4', async () => {
@@ -246,7 +230,7 @@ describe('platform/bitbucket/index', () => {
             },
           ],
         });
-      expect(await bitbucket.getBranchStatus('branch', [])).toBe(
+      expect(await bitbucket.getBranchStatus('branch')).toBe(
         BranchStatus.green
       );
       expect(httpMock.getTrace()).toMatchSnapshot();
@@ -273,7 +257,7 @@ describe('platform/bitbucket/index', () => {
             },
           ],
         });
-      expect(await bitbucket.getBranchStatus('pending/branch', [])).toBe(
+      expect(await bitbucket.getBranchStatus('pending/branch')).toBe(
         BranchStatus.yellow
       );
       expect(httpMock.getTrace()).toMatchSnapshot();
@@ -297,9 +281,9 @@ describe('platform/bitbucket/index', () => {
         .reply(200, {
           values: [],
         });
-      expect(
-        await bitbucket.getBranchStatus('branch-with-empty-status', [])
-      ).toBe(BranchStatus.yellow);
+      expect(await bitbucket.getBranchStatus('branch-with-empty-status')).toBe(
+        BranchStatus.yellow
+      );
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
   });
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index 7f2cc28fc5f21920b3a1ec239c39b91bb11340c8..d9df2f0870e30feb908f60df9dff5fc8c49c83c4 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -328,20 +328,9 @@ async function getStatus(
 }
 // Returns the combined status for a branch.
 export async function getBranchStatus(
-  branchName: string,
-  requiredStatusChecks?: string[]
+  branchName: string
 ): Promise<BranchStatus> {
   logger.debug(`getBranchStatus(${branchName})`);
-  if (!requiredStatusChecks) {
-    // null means disable status checks, so it always succeeds
-    logger.debug('Status checks disabled = returning "success"');
-    return BranchStatus.green;
-  }
-  if (requiredStatusChecks.length) {
-    // This is Unsupported
-    logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`);
-    return BranchStatus.red;
-  }
   const statuses = await getStatus(branchName);
   logger.debug({ branch: branchName, statuses }, 'branch status check result');
   if (!statuses.length) {
diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts
index 1cd6325da00ce1be94a2d891dedd5f06749192f3..05b9a3de361c3de1650f039e06b6fb55aaaebaa6 100644
--- a/lib/platform/gitea/index.spec.ts
+++ b/lib/platform/gitea/index.spec.ts
@@ -400,21 +400,9 @@ describe('platform/gitea/index', () => {
         })
       );
 
-      return gitea.getBranchStatus('some-branch', []);
+      return gitea.getBranchStatus('some-branch');
     };
 
-    it('should return success if requiredStatusChecks null', async () => {
-      expect(await gitea.getBranchStatus('some-branch', null)).toEqual(
-        BranchStatus.green
-      );
-    });
-
-    it('should return failed if unsupported requiredStatusChecks', async () => {
-      expect(await gitea.getBranchStatus('some-branch', ['foo'])).toEqual(
-        BranchStatus.red
-      );
-    });
-
     it('should return yellow for unknown result', async () => {
       expect(await getBranchStatus('unknown')).toEqual(BranchStatus.yellow);
     });
@@ -434,7 +422,7 @@ describe('platform/gitea/index', () => {
     it('should abort when branch status returns 404', async () => {
       helper.getCombinedCommitStatus.mockRejectedValueOnce({ statusCode: 404 });
 
-      await expect(gitea.getBranchStatus('some-branch', [])).rejects.toThrow(
+      await expect(gitea.getBranchStatus('some-branch')).rejects.toThrow(
         REPOSITORY_CHANGED
       );
     });
@@ -444,7 +432,7 @@ describe('platform/gitea/index', () => {
         new Error('getCombinedCommitStatus()')
       );
 
-      await expect(gitea.getBranchStatus('some-branch', [])).rejects.toThrow(
+      await expect(gitea.getBranchStatus('some-branch')).rejects.toThrow(
         'getCombinedCommitStatus()'
       );
     });
diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts
index a72082431d3995bca9e6e8cfcb5fa8f7b238639c..c6f34b19bd1c19f1a38f9c2526ec8234b98906c9 100644
--- a/lib/platform/gitea/index.ts
+++ b/lib/platform/gitea/index.ts
@@ -350,19 +350,7 @@ const platform: Platform = {
     }
   },
 
-  async getBranchStatus(
-    branchName: string,
-    requiredStatusChecks?: string[] | null
-  ): Promise<BranchStatus> {
-    if (!requiredStatusChecks) {
-      return BranchStatus.green;
-    }
-
-    if (Array.isArray(requiredStatusChecks) && requiredStatusChecks.length) {
-      logger.warn({ requiredStatusChecks }, 'Unsupported requiredStatusChecks');
-      return BranchStatus.red;
-    }
-
+  async getBranchStatus(branchName: string): Promise<BranchStatus> {
     let ccs: helper.CombinedCommitStatus;
     try {
       ccs = await helper.getCombinedCommitStatus(config.repository, branchName);
diff --git a/lib/platform/github/__snapshots__/index.spec.ts.snap b/lib/platform/github/__snapshots__/index.spec.ts.snap
index 7abd4022f17182681366f623ce50693d84bcc8ec..f5bfa16060db200e3af351bdd7714977ed79d739 100644
--- a/lib/platform/github/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/github/__snapshots__/index.spec.ts.snap
@@ -4347,55 +4347,7 @@ Array [
 ]
 `;
 
-exports[`platform/github/index getBranchStatus() return failed if unsupported requiredStatusChecks 1`] = `
-Array [
-  Object {
-    "graphql": Object {
-      "query": Object {
-        "__vars": Object {
-          "$name": "String!",
-          "$owner": "String!",
-        },
-        "repository": Object {
-          "__args": Object {
-            "name": "$name",
-            "owner": "$owner",
-          },
-          "defaultBranchRef": Object {
-            "name": null,
-            "target": Object {
-              "oid": null,
-            },
-          },
-          "isArchived": null,
-          "isFork": null,
-          "mergeCommitAllowed": null,
-          "nameWithOwner": null,
-          "rebaseMergeAllowed": null,
-          "squashMergeAllowed": null,
-        },
-      },
-      "variables": Object {
-        "name": "repo",
-        "owner": "some",
-      },
-    },
-    "headers": Object {
-      "accept": "application/vnd.github.v3+json",
-      "accept-encoding": "gzip, deflate, br",
-      "authorization": "token 123test",
-      "content-length": "351",
-      "content-type": "application/json",
-      "host": "api.github.com",
-      "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
-    },
-    "method": "POST",
-    "url": "https://api.github.com/graphql",
-  },
-]
-`;
-
-exports[`platform/github/index getBranchStatus() returns success if requiredStatusChecks null 1`] = `
+exports[`platform/github/index getBranchStatus() returns success if ignoreTests true 1`] = `
 Array [
   Object {
     "graphql": Object {
diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts
index b028dcafdb0e89756612fc839ca30a2d7032196b..6553c70c0dc538562ae149ce23bb35bcdf6b10ee 100644
--- a/lib/platform/github/index.spec.ts
+++ b/lib/platform/github/index.spec.ts
@@ -678,26 +678,13 @@ describe('platform/github/index', () => {
     });
   });
   describe('getBranchStatus()', () => {
-    it('returns success if requiredStatusChecks null', async () => {
+    it('returns success if ignoreTests true', async () => {
       const scope = httpMock.scope(githubApiHost);
       initRepoMock(scope, 'some/repo');
 
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', null);
-      expect(res).toEqual(BranchStatus.green);
-      expect(httpMock.getTrace()).toMatchSnapshot();
-    });
-    it('return failed if unsupported requiredStatusChecks', async () => {
-      const scope = httpMock.scope(githubApiHost);
-      initRepoMock(scope, 'some/repo');
-
-      await github.initRepo({
-        repository: 'some/repo',
-      } as any);
-      const res = await github.getBranchStatus('somebranch', ['foo']);
-      expect(res).toEqual(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
     it('should pass through success', async () => {
@@ -714,7 +701,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -732,7 +719,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -749,7 +736,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -783,7 +770,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -823,7 +810,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -856,7 +843,7 @@ describe('platform/github/index', () => {
       await github.initRepo({
         repository: 'some/repo',
       } as any);
-      const res = await github.getBranchStatus('somebranch', []);
+      const res = await github.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index de7953ea1400c44bd2560d56f6886b6f80c9989d..bc76286e56fb654150eb33983e426c248599f6d8 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -799,20 +799,9 @@ async function getStatus(
 
 // Returns the combined status for a branch.
 export async function getBranchStatus(
-  branchName: string,
-  requiredStatusChecks: any[] | undefined
+  branchName: string
 ): Promise<BranchStatus> {
   logger.debug(`getBranchStatus(${branchName})`);
-  if (!requiredStatusChecks) {
-    // null means disable status checks, so it always succeeds
-    logger.debug('Status checks disabled = returning "success"');
-    return BranchStatus.green;
-  }
-  if (requiredStatusChecks.length) {
-    // This is Unsupported
-    logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`);
-    return BranchStatus.red;
-  }
   let commitStatus: CombinedBranchStatus;
   try {
     commitStatus = await getStatus(branchName);
diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
index cb3bc7f6992e5fae86b37b304952a7e874241318..c4cb788edc58bbd53553523c8def9df670deb102 100644
--- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
@@ -1852,7 +1852,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) maps custom statuses to yellow 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) maps custom statuses to yellow 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1879,7 +1879,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns failure if any mandatory jobs fails 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1906,7 +1906,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails and one job is skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns failure if any mandatory jobs fails and one job is skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1933,7 +1933,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns pending if no results 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns pending if no results 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1960,7 +1960,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are optional 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if all are optional 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1987,7 +1987,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are success 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if all are success 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2014,7 +2014,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if job is skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if job is skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2041,7 +2041,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if optional jobs fail 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if optional jobs fail 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2068,7 +2068,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns yellow if there are no jobs expect skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns yellow if there are no jobs expect skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2095,7 +2095,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) throws repository-changed 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) throws repository-changed 1`] = `
 Array [
   Object {
     "headers": Object {
diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts
index 51eb145adc641fc059156599a3209263f817befc..6e847a727781d84db259c9d623861b5392700379 100644
--- a/lib/platform/gitlab/index.spec.ts
+++ b/lib/platform/gitlab/index.spec.ts
@@ -527,15 +527,7 @@ describe('platform/gitlab/index', () => {
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
   });
-  describe('getBranchStatus(branchName, requiredStatusChecks)', () => {
-    it('returns success if requiredStatusChecks null', async () => {
-      const res = await gitlab.getBranchStatus('somebranch', null);
-      expect(res).toEqual(BranchStatus.green);
-    });
-    it('return failed if unsupported requiredStatusChecks', async () => {
-      const res = await gitlab.getBranchStatus('somebranch', ['foo']);
-      expect(res).toEqual(BranchStatus.red);
-    });
+  describe('getBranchStatus(branchName, ignoreTests)', () => {
     it('returns pending if no results', async () => {
       const scope = await initRepo();
       scope
@@ -543,7 +535,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, []);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -554,7 +546,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'success' }, { status: 'success' }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -568,7 +560,7 @@ describe('platform/gitlab/index', () => {
           { status: 'success' },
           { status: 'failed', allow_failure: true },
         ]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -579,7 +571,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'failed', allow_failure: true }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -590,7 +582,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'success' }, { status: 'skipped' }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.green);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -601,7 +593,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'skipped' }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -612,7 +604,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'skipped' }, { status: 'failed' }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -627,7 +619,7 @@ describe('platform/gitlab/index', () => {
           { status: 'failed', allow_failure: true },
           { status: 'failed' },
         ]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.red);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -638,7 +630,7 @@ describe('platform/gitlab/index', () => {
           '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses'
         )
         .reply(200, [{ status: 'success' }, { status: 'foo' }]);
-      const res = await gitlab.getBranchStatus('somebranch', []);
+      const res = await gitlab.getBranchStatus('somebranch');
       expect(res).toEqual(BranchStatus.yellow);
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
@@ -646,7 +638,7 @@ describe('platform/gitlab/index', () => {
       expect.assertions(2);
       git.branchExists.mockReturnValue(false);
       await initRepo();
-      await expect(gitlab.getBranchStatus('somebranch', [])).rejects.toThrow(
+      await expect(gitlab.getBranchStatus('somebranch')).rejects.toThrow(
         REPOSITORY_CHANGED
       );
       expect(httpMock.getTrace()).toMatchSnapshot();
diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index 82cac84d0f59ed81f2ab90f7ce18cb81615c40e1..236bc5f85953858b6fe8c2224e13c97fb83c735b 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -370,19 +370,9 @@ const gitlabToRenovateStatusMapping: Record<BranchState, BranchStatus> = {
 
 // Returns the combined status for a branch.
 export async function getBranchStatus(
-  branchName: string,
-  requiredStatusChecks?: string[] | null
+  branchName: string
 ): Promise<BranchStatus> {
   logger.debug(`getBranchStatus(${branchName})`);
-  if (!requiredStatusChecks) {
-    // null means disable status checks, so it always succeeds
-    return BranchStatus.green;
-  }
-  if (Array.isArray(requiredStatusChecks) && requiredStatusChecks.length) {
-    // This is Unsupported
-    logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`);
-    return BranchStatus.red;
-  }
 
   if (!git.branchExists(branchName)) {
     throw new Error(REPOSITORY_CHANGED);
@@ -614,7 +604,7 @@ export async function getPr(iid: number): Promise<Pr> {
     pr.canMerge = false;
     pr.isConflicted = true;
   } else if (pr.state === PrState.Open) {
-    const branchStatus = await getBranchStatus(pr.sourceBranch, []);
+    const branchStatus = await getBranchStatus(pr.sourceBranch);
     if (branchStatus === BranchStatus.green) {
       pr.canMerge = true;
     }
diff --git a/lib/platform/types.ts b/lib/platform/types.ts
index 2f95f8c609fdd2c0dcd3c0e223507d212ae1abcd..b371dc016b92e286df18b758111622738042ae39 100644
--- a/lib/platform/types.ts
+++ b/lib/platform/types.ts
@@ -184,10 +184,7 @@ export interface Platform {
   getPr(number: number): Promise<Pr>;
   findPr(findPRConfig: FindPRConfig): Promise<Pr>;
   refreshPr?(number: number): Promise<void>;
-  getBranchStatus(
-    branchName: string,
-    requiredStatusChecks?: string[] | null
-  ): Promise<BranchStatus>;
+  getBranchStatus(branchName: string): Promise<BranchStatus>;
   getBranchPr(branchName: string): Promise<Pr | null>;
   initPlatform(config: PlatformParams): Promise<PlatformResult>;
   filterUnavailableUsers?(users: string[]): Promise<string[]>;
diff --git a/lib/workers/branch/automerge.ts b/lib/workers/branch/automerge.ts
index c44dfc78a6fb90b7de51fb814809214dc68edcd4..8ae312e8ffd7b49d5db3e093488e49f424cb57f0 100644
--- a/lib/workers/branch/automerge.ts
+++ b/lib/workers/branch/automerge.ts
@@ -4,6 +4,7 @@ import { logger } from '../../logger';
 import { platform } from '../../platform';
 import { BranchStatus } from '../../types';
 import { mergeBranch } from '../../util/git';
+import { resolveBranchStatus } from './status-checks';
 
 export type AutomergeResult =
   | 'automerged'
@@ -25,9 +26,9 @@ export async function tryBranchAutomerge(
   if (existingPr) {
     return 'automerge aborted - PR exists';
   }
-  const branchStatus = await platform.getBranchStatus(
+  const branchStatus = await resolveBranchStatus(
     config.branchName,
-    config.requiredStatusChecks
+    config.ignoreTests
   );
   if (branchStatus === BranchStatus.green) {
     logger.debug(`Automerging branch`);
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index a73e58ea75d5672cf34e546b67795222b71fb57c..877672413d37c5afb293cfa09860c8ac9a3b53f3 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -410,7 +410,7 @@ describe('workers/branch/index', () => {
       automerge.tryBranchAutomerge.mockResolvedValueOnce('automerged');
       await branchWorker.processBranch({
         ...config,
-        requiredStatusChecks: null,
+        ignoreTests: true,
       });
       expect(automerge.tryBranchAutomerge).toHaveBeenCalledTimes(1);
       expect(prWorker.ensurePr).toHaveBeenCalledTimes(0);
@@ -535,7 +535,7 @@ describe('workers/branch/index', () => {
       expect(
         await branchWorker.processBranch({
           ...config,
-          requiredStatusChecks: null,
+          ignoreTests: true,
           prCreation: 'not-pending',
         })
       ).toMatchSnapshot();
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 78802336d76b383ce9d19c1a11e2a19286530a42..96b33b94932d8410d31089bb33570e2e9134f09c 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -464,7 +464,7 @@ export async function processBranch(
       !dependencyDashboardCheck &&
       !config.rebaseRequested &&
       commitSha &&
-      (config.requiredStatusChecks?.length || config.prCreation !== 'immediate')
+      config.prCreation !== 'immediate'
     ) {
       logger.debug({ commitSha }, `Branch status pending`);
       return {
@@ -475,7 +475,7 @@ export async function processBranch(
     }
 
     // Try to automerge branch and finish if successful, but only if branch already existed before this run
-    if (branchExists || !config.requiredStatusChecks) {
+    if (branchExists || config.ignoreTests) {
       const mergeStatus = await tryBranchAutomerge(config);
       logger.debug(`mergeStatus=${mergeStatus}`);
       if (mergeStatus === 'automerged') {
diff --git a/lib/workers/branch/status-checks.spec.ts b/lib/workers/branch/status-checks.spec.ts
index 02c15babf94a8af376bf38e708358de7aa06576e..ad4d1c262702f699f057224872de69b2132a635d 100644
--- a/lib/workers/branch/status-checks.spec.ts
+++ b/lib/workers/branch/status-checks.spec.ts
@@ -3,6 +3,7 @@ import { BranchStatus } from '../../types';
 import {
   ConfidenceConfig,
   StabilityConfig,
+  resolveBranchStatus,
   setConfidence,
   setStability,
 } from './status-checks';
@@ -86,4 +87,12 @@ describe('workers/branch/status-checks', () => {
       expect(platform.setBranchStatus).toHaveBeenCalledTimes(0);
     });
   });
+
+  describe('getBranchStatus', () => {
+    it('should return green if ignoreTests=true', async () => {
+      expect(await resolveBranchStatus('somebranch', true)).toBe(
+        BranchStatus.green
+      );
+    });
+  });
 });
diff --git a/lib/workers/branch/status-checks.ts b/lib/workers/branch/status-checks.ts
index 97ec3eb76946ce105ec2bf24f1c914288ec81da9..58b7e79b2230830e5e5ba493e215a767d3acc633 100644
--- a/lib/workers/branch/status-checks.ts
+++ b/lib/workers/branch/status-checks.ts
@@ -7,6 +7,25 @@ import {
   isActiveConfidenceLevel,
 } from '../../util/merge-confidence';
 
+export async function resolveBranchStatus(
+  branchName: string,
+  ignoreTests = false
+): Promise<BranchStatus> {
+  logger.debug(
+    `resolveBranchStatus(branchName=${branchName}, ignoreTests=${ignoreTests})`
+  );
+
+  if (ignoreTests) {
+    logger.debug('Ignore tests. Return green');
+    return BranchStatus.green;
+  }
+
+  const status = await platform.getBranchStatus(branchName);
+  logger.debug(`Branch status ${status}`);
+
+  return status;
+}
+
 async function setStatusCheck(
   branchName: string,
   context: string,
diff --git a/lib/workers/pr/automerge.ts b/lib/workers/pr/automerge.ts
index 30d4d5bb72e3a10d262ff06344e448834e5438af..f96dd04b3dd8aec9d1c4d70a78a56a276cd8573c 100644
--- a/lib/workers/pr/automerge.ts
+++ b/lib/workers/pr/automerge.ts
@@ -3,6 +3,7 @@ import { logger } from '../../logger';
 import { Pr, platform } from '../../platform';
 import { BranchStatus } from '../../types';
 import { deleteBranch, isBranchModified } from '../../util/git';
+import { resolveBranchStatus } from '../branch/status-checks';
 import { BranchConfig } from '../types';
 
 export enum PrAutomergeBlockReason {
@@ -30,7 +31,7 @@ export async function checkAutoMerge(
     automergeType,
     automergeStrategy,
     automergeComment,
-    requiredStatusChecks,
+    ignoreTests,
     rebaseRequested,
   } = config;
   // Return if PR not ready for automerge
@@ -41,7 +42,7 @@ export async function checkAutoMerge(
       prAutomergeBlockReason: PrAutomergeBlockReason.Conflicted,
     };
   }
-  if (requiredStatusChecks && pr.canMerge !== true) {
+  if (!ignoreTests && pr.canMerge !== true) {
     logger.debug(
       { canMergeReason: pr.canMergeReason },
       'PR is not ready for merge'
@@ -51,9 +52,9 @@ export async function checkAutoMerge(
       prAutomergeBlockReason: PrAutomergeBlockReason.PlatformNotReady,
     };
   }
-  const branchStatus = await platform.getBranchStatus(
-    branchName,
-    requiredStatusChecks
+  const branchStatus = await resolveBranchStatus(
+    config.branchName,
+    config.ignoreTests
   );
   if (branchStatus !== BranchStatus.green) {
     logger.debug(
diff --git a/lib/workers/pr/body/config-description.ts b/lib/workers/pr/body/config-description.ts
index 804a19fbcddfbb31e641ebd92bf86a1c2a1f4317..17ac4d82d1202a580c4386516e7fb303ca3cefcb 100644
--- a/lib/workers/pr/body/config-description.ts
+++ b/lib/workers/pr/body/config-description.ts
@@ -1,6 +1,6 @@
-import { platform } from '../../../platform';
 import { BranchStatus } from '../../../types';
 import { emojify } from '../../../util/emoji';
+import { resolveBranchStatus } from '../../branch/status-checks';
 import type { BranchConfig } from '../../types';
 
 export async function getPrConfigDescription(
@@ -26,9 +26,9 @@ export async function getPrConfigDescription(
   prBody += '\n\n';
   prBody += emojify(':vertical_traffic_light: **Automerge**: ');
   if (config.automerge) {
-    const branchStatus = await platform.getBranchStatus(
+    const branchStatus = await resolveBranchStatus(
       config.branchName,
-      config.requiredStatusChecks
+      config.ignoreTests
     );
     // istanbul ignore if
     if (branchStatus === BranchStatus.red) {
diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts
index f6f317cfdde3d32149c23551bd7b9af723e7b5ec..eef8e1b684a18e180e39d4f1faece384d9ed4212 100644
--- a/lib/workers/pr/index.ts
+++ b/lib/workers/pr/index.ts
@@ -13,6 +13,7 @@ import { sampleSize } from '../../util';
 import { stripEmojis } from '../../util/emoji';
 import { deleteBranch, getBranchLastCommitTime } from '../../util/git';
 import * as template from '../../util/template';
+import { resolveBranchStatus } from '../branch/status-checks';
 import { Limit, incLimitedValue, isLimitReached } from '../global/limits';
 import type { BranchConfig, PrBlockedBy } from '../types';
 import { getPrBody } from './body';
@@ -164,17 +165,10 @@ export async function ensurePr(
     config.forcePr = true;
   }
 
-  let branchStatus: BranchStatus;
-  async function getBranchStatus(): Promise<BranchStatus> {
-    if (!branchStatus) {
-      branchStatus = await platform.getBranchStatus(
-        branchName,
-        config.requiredStatusChecks
-      );
-      logger.debug({ branchStatus, branchName }, 'getBranchStatus() result');
-    }
-    return branchStatus;
-  }
+  const branchStatus = await resolveBranchStatus(
+    config.branchName,
+    config.ignoreTests
+  );
 
   // Only create a PR if a branch automerge has failed
   if (
@@ -183,11 +177,11 @@ export async function ensurePr(
     !config.forcePr
   ) {
     logger.debug(
-      `Branch is configured for branch automerge, branch status) is: ${await getBranchStatus()}`
+      `Branch is configured for branch automerge, branch status) is: ${branchStatus}`
     );
     if (
       config.stabilityStatus !== BranchStatus.yellow &&
-      (await getBranchStatus()) === BranchStatus.yellow
+      branchStatus === BranchStatus.yellow
     ) {
       logger.debug('Checking how long this branch has been pending');
       const lastCommitTime = await getBranchLastCommitTime(branchName);
@@ -201,7 +195,7 @@ export async function ensurePr(
         config.forcePr = true;
       }
     }
-    if (config.forcePr || (await getBranchStatus()) === BranchStatus.red) {
+    if (config.forcePr || branchStatus === 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
@@ -210,10 +204,8 @@ export async function ensurePr(
   }
   if (config.prCreation === 'status-success') {
     logger.debug('Checking branch combined status');
-    if ((await getBranchStatus()) !== BranchStatus.green) {
-      logger.debug(
-        `Branch status is "${await getBranchStatus()}" - not creating PR`
-      );
+    if (branchStatus !== BranchStatus.green) {
+      logger.debug(`Branch status is "${branchStatus}" - not creating PR`);
       return { prBlockedBy: 'AwaitingTests' };
     }
     logger.debug('Branch status success');
@@ -229,10 +221,8 @@ export async function ensurePr(
     !config.forcePr
   ) {
     logger.debug('Checking branch combined status');
-    if ((await getBranchStatus()) === BranchStatus.yellow) {
-      logger.debug(
-        `Branch status is "${await getBranchStatus()}" - checking timeout`
-      );
+    if (branchStatus === BranchStatus.yellow) {
+      logger.debug(`Branch status is "${branchStatus}" - checking timeout`);
       const lastCommitTime = await getBranchLastCommitTime(branchName);
       const currentTime = new Date();
       const millisecondsPerHour = 1000 * 60 * 60;
@@ -337,7 +327,7 @@ export async function ensurePr(
         !existingPr.hasAssignees &&
         !existingPr.hasReviewers &&
         config.automerge &&
-        (await getBranchStatus()) === BranchStatus.red
+        branchStatus === BranchStatus.red
       ) {
         logger.debug(`Setting assignees and reviewers as status checks failed`);
         await addAssigneesReviewers(config, existingPr);
@@ -482,7 +472,7 @@ export async function ensurePr(
     if (
       config.automerge &&
       !config.assignAutomerge &&
-      (await getBranchStatus()) !== BranchStatus.red
+      branchStatus !== BranchStatus.red
     ) {
       logger.debug(
         `Skipping assignees and reviewers as automerge=${config.automerge}`
diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts
index 5b57436fd477b84bb731b96c741cd0e2b7b3b832..e818bc2aaf3f45f47111f4606f1ef9355b2ef963 100644
--- a/lib/workers/repository/process/write.spec.ts
+++ b/lib/workers/repository/process/write.spec.ts
@@ -27,7 +27,7 @@ describe('workers/repository/process/write', () => {
       const branches: BranchConfig[] = [
         {},
         {},
-        { automergeType: 'pr-comment', requiredStatusChecks: null },
+        { automergeType: 'pr-comment', ignoreTests: true },
         {},
         {},
       ] as never;