From d6d9ee719d5800b62b83aa2a78f856b26561f0b0 Mon Sep 17 00:00:00 2001
From: RahulGautamSingh <rahultesnik@gmail.com>
Date: Mon, 10 Oct 2022 12:08:31 +0530
Subject: [PATCH] fix: make baseBranch type non-optional in BranchConfig
 (#17920)

Co-authored-by: Rhys Arkins <rhys@arkins.net>
---
 lib/workers/repository/cache.ts               |   9 +-
 .../repository/onboarding/pr/pr-list.spec.ts  |  11 +-
 .../repository/process/extract-update.spec.ts |   8 +-
 lib/workers/repository/process/write.spec.ts  | 122 +++++++++++++-----
 lib/workers/repository/process/write.ts       |   8 +-
 .../execute-post-upgrade-commands.spec.ts     |   1 +
 lib/workers/repository/update/branch/index.ts |   9 +-
 .../repository/update/branch/reuse.spec.ts    |   1 +
 lib/workers/repository/update/branch/reuse.ts |   6 +-
 lib/workers/repository/update/pr/automerge.ts |   2 +-
 .../update/pr/body/changelogs.spec.ts         |   2 +
 .../update/pr/body/config-description.spec.ts |   1 +
 .../repository/update/pr/body/footer.spec.ts  |   2 +
 .../repository/update/pr/body/header.spec.ts  |   2 +
 .../repository/update/pr/body/index.spec.ts   |   7 +
 .../repository/update/pr/body/notes.spec.ts   |   3 +
 .../update/pr/body/updates-table.spec.ts      |   2 +
 .../repository/update/pr/index.spec.ts        |   1 +
 lib/workers/types.ts                          |   2 +-
 test/util.ts                                  |   6 +-
 20 files changed, 144 insertions(+), 61 deletions(-)

diff --git a/lib/workers/repository/cache.ts b/lib/workers/repository/cache.ts
index 09ec25a136..2b76554c02 100644
--- a/lib/workers/repository/cache.ts
+++ b/lib/workers/repository/cache.ts
@@ -51,8 +51,7 @@ async function generateBranchCache(
   const { baseBranch, branchName } = branch;
   try {
     const sha = getBranchCommit(branchName) ?? null;
-    // TODO: fix types (#7154)
-    const baseBranchSha = getBranchCommit(baseBranch!)!;
+    const baseBranchSha = getBranchCommit(baseBranch);
     let prNo = null;
     let parentSha = null;
     let isModified = false;
@@ -64,8 +63,7 @@ async function generateBranchCache(
         prNo = branchPr.number;
       }
       isModified = await isBranchModified(branchName);
-      // TODO: fix types (#7154)
-      isBehindBase = await isBranchBehindBase(branchName, baseBranch!);
+      isBehindBase = await isBranchBehindBase(branchName, baseBranch);
     }
     const automerge = !!branch.automerge;
     const upgrades: BranchUpgradeCache[] = branch.upgrades
@@ -75,8 +73,7 @@ async function generateBranchCache(
     return {
       automerge,
       baseBranchSha,
-      // TODO: fix types (#7154)
-      baseBranch: baseBranch!,
+      baseBranch,
       branchFingerprint,
       branchName,
       isBehindBase,
diff --git a/lib/workers/repository/onboarding/pr/pr-list.spec.ts b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
index f5130eb532..cc3de0bc72 100644
--- a/lib/workers/repository/onboarding/pr/pr-list.spec.ts
+++ b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
@@ -24,11 +24,12 @@ describe('workers/repository/onboarding/pr/pr-list', () => {
     });
 
     it('has special lock file maintenance description', () => {
-      const branches = [
+      const branches: BranchConfig[] = [
         {
           prTitle: 'Lock file maintenance',
           schedule: ['before 5am'],
           branchName: 'renovate/lock-file-maintenance',
+          baseBranch: 'base',
           manager: 'some-manager',
           upgrades: [
             {
@@ -50,6 +51,7 @@ describe('workers/repository/onboarding/pr/pr-list', () => {
 
           - Schedule: ["before 5am"]
           - Branch name: \`renovate/lock-file-maintenance\`
+          - Merge into: \`base\`
           - Regenerate lock files to use latest dependency versions
 
         </details>
@@ -59,10 +61,10 @@ describe('workers/repository/onboarding/pr/pr-list', () => {
     });
 
     it('handles multiple', () => {
-      const branches = [
+      const branches: BranchConfig[] = [
         {
           prTitle: 'Pin dependencies',
-          baseBranch: 'some-other',
+          baseBranch: 'base',
           branchName: 'renovate/pin-dependencies',
           manager: 'some-manager',
           upgrades: [
@@ -85,6 +87,7 @@ describe('workers/repository/onboarding/pr/pr-list', () => {
         {
           prTitle: 'Update a to v2',
           branchName: 'renovate/a-2.x',
+          baseBranch: '', // handles case where baseBranch name is falsy
           manager: 'some-manager',
           upgrades: [
             {
@@ -111,7 +114,7 @@ describe('workers/repository/onboarding/pr/pr-list', () => {
         <summary>Pin dependencies</summary>
 
           - Branch name: \`renovate/pin-dependencies\`
-          - Merge into: \`some-other\`
+          - Merge into: \`base\`
           - Pin [a](https://a) to \`1.1.0\`
           - Pin b to \`1.5.3\`
 
diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts
index 42c70a4b4f..de4eebf437 100644
--- a/lib/workers/repository/process/extract-update.spec.ts
+++ b/lib/workers/repository/process/extract-update.spec.ts
@@ -18,7 +18,12 @@ const repositoryCache = mocked(_repositoryCache);
 
 branchify.branchifyUpgrades.mockResolvedValueOnce({
   branches: [
-    { manager: 'some-manager', branchName: 'some-branch', upgrades: [] },
+    {
+      manager: 'some-manager',
+      branchName: 'some-branch',
+      baseBranch: 'base',
+      upgrades: [],
+    },
   ],
   branchList: ['branchName'],
 });
@@ -40,6 +45,7 @@ describe('workers/repository/process/extract-update', () => {
           {
             branchName: 'some-branch',
             manager: 'some-manager',
+            baseBranch: 'base',
             upgrades: [],
           },
         ],
diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts
index 3c92745923..9eb5a624b1 100644
--- a/lib/workers/repository/process/write.spec.ts
+++ b/lib/workers/repository/process/write.spec.ts
@@ -5,7 +5,6 @@ import {
   git,
   logger,
   mocked,
-  partial,
 } from '../../../../test/util';
 import { GlobalConfig } from '../../../config/global';
 import { addMeta } from '../../../logger';
@@ -49,19 +48,40 @@ beforeEach(() => {
 describe('workers/repository/process/write', () => {
   describe('writeUpdates()', () => {
     it('stops after automerge', async () => {
-      const branches = partial<BranchConfig[]>([
-        { branchName: 'test_branch', manager: 'npm', upgrades: [] },
-        { branchName: 'test_branch', manager: 'npm', upgrades: [] },
+      const branches: BranchConfig[] = [
+        {
+          branchName: 'test_branch',
+          baseBranch: 'base',
+          manager: 'npm',
+          upgrades: [],
+        },
+        {
+          branchName: 'test_branch',
+          baseBranch: 'base',
+          manager: 'npm',
+          upgrades: [],
+        },
         {
           branchName: 'test_branch',
+          baseBranch: 'base',
           manager: 'npm',
           automergeType: 'pr-comment',
           ignoreTests: true,
           upgrades: [],
         },
-        { branchName: 'test_branch', manager: 'npm', upgrades: [] },
-        { branchName: 'test_branch', manager: 'npm', upgrades: [] },
-      ]);
+        {
+          branchName: 'test_branch',
+          baseBranch: 'base',
+          manager: 'npm',
+          upgrades: [],
+        },
+        {
+          branchName: 'test_branch',
+          baseBranch: 'base',
+          manager: 'npm',
+          upgrades: [],
+        },
+      ];
       git.branchExists.mockReturnValue(true);
       branchWorker.processBranch.mockResolvedValueOnce({
         branchExists: true,
@@ -88,9 +108,9 @@ describe('workers/repository/process/write', () => {
     it('increments branch counter', async () => {
       const branchName = 'branchName';
       const branches: BranchConfig[] = [
-        partial<BranchConfig>({ baseBranch: 'main', branchName, upgrades: [] }),
-        partial<BranchConfig>({ baseBranch: 'dev', branchName, upgrades: [] }),
-      ] as never;
+        { baseBranch: 'main', branchName, upgrades: [], manager: 'npm' },
+        { baseBranch: 'dev', branchName, upgrades: [], manager: 'npm' },
+      ];
       repoCache.getCache.mockReturnValueOnce({});
       branchWorker.processBranch.mockResolvedValueOnce({
         branchExists: true,
@@ -114,9 +134,10 @@ describe('workers/repository/process/write', () => {
     });
 
     it('return no-work if branch fingerprint is not different', async () => {
-      const branches = partial<BranchConfig[]>([
+      const branches: BranchConfig[] = [
         {
           branchName: 'new/some-branch',
+          baseBranch: 'base',
           manager: 'npm',
           upgrades: [
             {
@@ -124,7 +145,7 @@ describe('workers/repository/process/write', () => {
             } as BranchUpgradeConfig,
           ],
         },
-      ]);
+      ];
       repoCache.getCache.mockReturnValueOnce({
         branches: [
           {
@@ -142,9 +163,10 @@ describe('workers/repository/process/write', () => {
     });
 
     it('updates branch fingerprint when new commit is made', async () => {
-      const branches = partial<BranchConfig[]>([
+      const branches: BranchConfig[] = [
         {
           branchName: 'new/some-branch',
+          baseBranch: 'base',
           manager: 'npm',
           upgrades: [
             {
@@ -152,7 +174,7 @@ describe('workers/repository/process/write', () => {
             } as BranchUpgradeConfig,
           ],
         },
-      ]);
+      ];
       repoCache.getCache.mockReturnValueOnce({
         branches: [
           {
@@ -183,7 +205,7 @@ describe('workers/repository/process/write', () => {
     });
 
     it('caches same fingerprint when no commit is made', async () => {
-      const branches = partial<BranchConfig[]>([
+      const branches: BranchConfig[] = [
         {
           branchName: 'new/some-branch',
           baseBranch: 'base_branch',
@@ -194,7 +216,7 @@ describe('workers/repository/process/write', () => {
             } as BranchUpgradeConfig,
           ],
         },
-      ]);
+      ];
       const managers = [
         ...new Set(
           branches[0].upgrades
@@ -224,7 +246,7 @@ describe('workers/repository/process/write', () => {
     });
 
     it('creates new branchCache when cache is not enabled', async () => {
-      const branches = partial<BranchConfig[]>([
+      const branches: BranchConfig[] = [
         {
           branchName: 'new/some-branch',
           baseBranch: 'base_branch',
@@ -235,7 +257,7 @@ describe('workers/repository/process/write', () => {
             } as BranchUpgradeConfig,
           ],
         },
-      ]);
+      ];
       const repoCacheObj = {} as RepoCacheData;
       repoCache.getCache.mockReturnValueOnce(repoCacheObj);
       branchWorker.processBranch.mockResolvedValueOnce({
@@ -264,31 +286,43 @@ describe('workers/repository/process/write', () => {
   });
 
   describe('canSkipBranchUpdateCheck()', () => {
-    let branchCache = {} as BranchCache;
+    let branchCache: BranchCache = {
+      branchName: 'branch',
+      baseBranch: 'base',
+      baseBranchSha: 'base_sha',
+      sha: 'sha',
+      upgrades: [],
+      automerge: false,
+      prNo: null,
+      parentSha: null,
+    };
 
     it('returns false if no cache', () => {
       branchCache = {
+        ...branchCache,
         branchName: 'new/some-branch',
         sha: '111',
-      } as BranchCache;
+      };
       expect(canSkipBranchUpdateCheck(branchCache, '222')).toBe(false);
     });
 
     it('returns false when fingerprints are not same', () => {
       branchCache = {
+        ...branchCache,
         branchName: 'new/some-branch',
         sha: '111',
         branchFingerprint: '211',
-      } as BranchCache;
+      };
       expect(canSkipBranchUpdateCheck(branchCache, '222')).toBe(false);
     });
 
     it('returns true', () => {
       branchCache = {
+        ...branchCache,
         branchName: 'new/some-branch',
         sha: '111',
         branchFingerprint: '222',
-      } as BranchCache;
+      };
       expect(canSkipBranchUpdateCheck(branchCache, '222')).toBe(true);
     });
   });
@@ -308,15 +342,19 @@ describe('workers/repository/process/write', () => {
     });
 
     it('when base branch name is different updates it and invalidates isModified value', () => {
-      const repoCacheObj = {
+      const repoCacheObj: RepoCacheData = {
         branches: [
-          partial<BranchCache>({
+          {
             branchName: 'branch_name',
-            sha: 'sha',
             baseBranch: 'base_branch',
+            sha: 'sha',
             baseBranchSha: 'base_sha',
             isModified: true,
-          }),
+            upgrades: [],
+            automerge: false,
+            prNo: null,
+            parentSha: null,
+          },
         ],
       };
       repoCache.getCache.mockReturnValue(repoCacheObj);
@@ -327,19 +365,27 @@ describe('workers/repository/process/write', () => {
         sha: 'sha',
         baseBranch: 'new_base_branch',
         baseBranchSha: 'base_sha',
+        upgrades: [],
+        automerge: false,
+        prNo: null,
+        parentSha: null,
       });
     });
 
     it('when base branch sha is different updates it and invalidates related values', () => {
-      const repoCacheObj = {
+      const repoCacheObj: RepoCacheData = {
         branches: [
-          partial<BranchCache>({
+          {
             branchName: 'branch_name',
             sha: 'sha',
             baseBranch: 'base_branch',
             baseBranchSha: 'base_sha',
             isBehindBase: true,
-          }),
+            upgrades: [],
+            automerge: false,
+            prNo: null,
+            parentSha: null,
+          },
         ],
       };
       repoCache.getCache.mockReturnValue(repoCacheObj);
@@ -350,13 +396,17 @@ describe('workers/repository/process/write', () => {
         sha: 'sha',
         baseBranch: 'base_branch',
         baseBranchSha: 'new_base_sha',
+        upgrades: [],
+        automerge: false,
+        prNo: null,
+        parentSha: null,
       });
     });
 
     it('when branch sha is different updates it and invalidates related values', () => {
-      const repoCacheObj = {
+      const repoCacheObj: RepoCacheData = {
         branches: [
-          partial<BranchCache>({
+          {
             branchName: 'branch_name',
             sha: 'sha',
             baseBranch: 'base_branch',
@@ -364,7 +414,11 @@ describe('workers/repository/process/write', () => {
             isBehindBase: true,
             isModified: true,
             branchFingerprint: '123',
-          }),
+            upgrades: [],
+            automerge: false,
+            prNo: null,
+            parentSha: null,
+          },
         ],
       };
       repoCache.getCache.mockReturnValue(repoCacheObj);
@@ -375,6 +429,10 @@ describe('workers/repository/process/write', () => {
         sha: 'new_sha',
         baseBranch: 'base_branch',
         baseBranchSha: 'base_sha',
+        upgrades: [],
+        automerge: false,
+        prNo: null,
+        parentSha: null,
       });
     });
   });
diff --git a/lib/workers/repository/process/write.ts b/lib/workers/repository/process/write.ts
index 6041a8324e..7b8600fc10 100644
--- a/lib/workers/repository/process/write.ts
+++ b/lib/workers/repository/process/write.ts
@@ -61,7 +61,7 @@ export function syncBranchState(
   // if base branch name has changed invalidate cached isModified state
   if (baseBranch !== branchState.baseBranch) {
     logger.debug('syncBranchState(): update baseBranch name');
-    branchState.baseBranch = baseBranch!;
+    branchState.baseBranch = baseBranch;
     delete branchState.isModified;
   }
 
@@ -120,8 +120,7 @@ export async function writeUpdates(
     }
     addMeta(meta);
     const branchExisted = branchExists(branchName);
-    // TODO: base branch name cannot be undefined - fix optional types (#7154)
-    const branchState = syncBranchState(branchName, baseBranch!);
+    const branchState = syncBranchState(branchName, baseBranch);
 
     const managers = [
       ...new Set(
@@ -148,8 +147,7 @@ export async function writeUpdates(
         : branchState.branchFingerprint;
 
     if (res?.commitSha) {
-      // TODO: base branch name cannot be undefined - fix optional types (#7154)
-      setBranchNewCommit(branchName, baseBranch!, res.commitSha);
+      setBranchNewCommit(branchName, baseBranch, res.commitSha);
     }
     if (
       branch.result === BranchResult.Automerged &&
diff --git a/lib/workers/repository/update/branch/execute-post-upgrade-commands.spec.ts b/lib/workers/repository/update/branch/execute-post-upgrade-commands.spec.ts
index 0e29fd3e1f..583a2c4d62 100644
--- a/lib/workers/repository/update/branch/execute-post-upgrade-commands.spec.ts
+++ b/lib/workers/repository/update/branch/execute-post-upgrade-commands.spec.ts
@@ -30,6 +30,7 @@ describe('workers/repository/update/branch/execute-post-upgrade-commands', () =>
         artifactErrors: [],
         upgrades: [],
         branchName: 'main',
+        baseBranch: 'base',
       };
       git.getRepoStatus.mockResolvedValueOnce(
         partial<StatusResult>({
diff --git a/lib/workers/repository/update/branch/index.ts b/lib/workers/repository/update/branch/index.ts
index a0692ecae0..88d559f24d 100644
--- a/lib/workers/repository/update/branch/index.ts
+++ b/lib/workers/repository/update/branch/index.ts
@@ -1,4 +1,3 @@
-// TODO #7154
 import is from '@sindresorhus/is';
 import { DateTime } from 'luxon';
 import { GlobalConfig } from '../../../../config/global';
@@ -391,7 +390,7 @@ export async function processBranch(
     // TODO: types (#7154)
     logger.debug(`Using reuseExistingBranch: ${config.reuseExistingBranch!}`);
     if (!(config.reuseExistingBranch && config.skipBranchUpdate)) {
-      await checkoutBranch(config.baseBranch!);
+      await checkoutBranch(config.baseBranch);
       const res = await getUpdatedPackageFiles(config);
       // istanbul ignore if
       if (res.artifactErrors && config.artifactErrors) {
@@ -480,7 +479,7 @@ export async function processBranch(
 
       config.isConflicted ??=
         branchExists &&
-        (await isBranchConflicted(config.baseBranch!, config.branchName));
+        (await isBranchConflicted(config.baseBranch, config.branchName));
       config.forceCommit = forcedManually || config.isConflicted;
 
       config.stopUpdating = branchPr?.labels?.includes(
@@ -543,8 +542,8 @@ export async function processBranch(
       logger.info({ commitSha }, `Branch ${action}`);
       // TODO #7154
       setCachedConflictResult(
-        config.baseBranch!,
-        getBranchCommit(config.baseBranch!)!,
+        config.baseBranch,
+        getBranchCommit(config.baseBranch)!,
         config.branchName,
         commitSha,
         false
diff --git a/lib/workers/repository/update/branch/reuse.spec.ts b/lib/workers/repository/update/branch/reuse.spec.ts
index ce9ca6ccaf..db20ecc456 100644
--- a/lib/workers/repository/update/branch/reuse.spec.ts
+++ b/lib/workers/repository/update/branch/reuse.spec.ts
@@ -20,6 +20,7 @@ describe('workers/repository/update/branch/reuse', () => {
       config = {
         manager: 'some-manager',
         branchName: 'renovate/some-branch',
+        baseBranch: 'base',
         rebaseLabel: 'rebase',
         rebaseWhen: 'behind-base-branch',
         upgrades: [],
diff --git a/lib/workers/repository/update/branch/reuse.ts b/lib/workers/repository/update/branch/reuse.ts
index 39e4e55f11..767e212256 100644
--- a/lib/workers/repository/update/branch/reuse.ts
+++ b/lib/workers/repository/update/branch/reuse.ts
@@ -1,4 +1,3 @@
-// TODO #7154
 import { GlobalConfig } from '../../../../config/global';
 import { logger } from '../../../../logger';
 import { platform } from '../../../../modules/platform';
@@ -62,8 +61,7 @@ export async function shouldReuseExistingBranch(
     (config.rebaseWhen === 'auto' &&
       (config.automerge || (await platform.getRepoForceRebase())))
   ) {
-    // TODO: fix types (#7154)
-    if (await isBranchBehindBase(branchName, baseBranch!)) {
+    if (await isBranchBehindBase(branchName, baseBranch)) {
       logger.debug(`Branch is behind base branch and needs rebasing`);
       // We can rebase the branch only if no PR or PR can be rebased
       if (await isBranchModified(branchName)) {
@@ -83,7 +81,7 @@ export async function shouldReuseExistingBranch(
   }
 
   // Now check if PR is unmergeable. If so then we also rebase
-  result.isConflicted = await isBranchConflicted(baseBranch!, branchName);
+  result.isConflicted = await isBranchConflicted(baseBranch, branchName);
   if (result.isConflicted) {
     logger.debug('Branch is conflicted');
 
diff --git a/lib/workers/repository/update/pr/automerge.ts b/lib/workers/repository/update/pr/automerge.ts
index 43b6110471..884d9bd606 100644
--- a/lib/workers/repository/update/pr/automerge.ts
+++ b/lib/workers/repository/update/pr/automerge.ts
@@ -57,7 +57,7 @@ export async function checkAutoMerge(
   }
   const isConflicted =
     config.isConflicted ??
-    (await isBranchConflicted(config.baseBranch!, config.branchName));
+    (await isBranchConflicted(config.baseBranch, config.branchName));
   if (isConflicted) {
     logger.debug('PR is conflicted');
     return {
diff --git a/lib/workers/repository/update/pr/body/changelogs.spec.ts b/lib/workers/repository/update/pr/body/changelogs.spec.ts
index bfefb10bc4..01ffa96c20 100644
--- a/lib/workers/repository/update/pr/body/changelogs.spec.ts
+++ b/lib/workers/repository/update/pr/body/changelogs.spec.ts
@@ -14,6 +14,7 @@ describe('workers/repository/update/pr/body/changelogs', () => {
     const res = getChangelogs({
       manager: 'some-manager',
       branchName: 'some-branch',
+      baseBranch: 'base',
       upgrades: [],
       hasReleaseNotes: false,
     });
@@ -34,6 +35,7 @@ describe('workers/repository/update/pr/body/changelogs', () => {
 
     const res = getChangelogs({
       branchName: 'some-branch',
+      baseBranch: 'base',
       manager: 'some-manager',
       upgrades: [
         {
diff --git a/lib/workers/repository/update/pr/body/config-description.spec.ts b/lib/workers/repository/update/pr/body/config-description.spec.ts
index 15c38da332..47adb28a93 100644
--- a/lib/workers/repository/update/pr/body/config-description.spec.ts
+++ b/lib/workers/repository/update/pr/body/config-description.spec.ts
@@ -11,6 +11,7 @@ describe('workers/repository/update/pr/body/config-description', () => {
   describe('getPrConfigDescription', () => {
     const config: BranchConfig = {
       manager: 'some-manager',
+      baseBranch: 'base',
       branchName: 'some-branch',
       upgrades: [],
     };
diff --git a/lib/workers/repository/update/pr/body/footer.spec.ts b/lib/workers/repository/update/pr/body/footer.spec.ts
index 51c1ec24e2..86952b25d5 100644
--- a/lib/workers/repository/update/pr/body/footer.spec.ts
+++ b/lib/workers/repository/update/pr/body/footer.spec.ts
@@ -14,6 +14,7 @@ describe('workers/repository/update/pr/body/footer', () => {
     expect(
       getPrFooter({
         manager: 'some-manager',
+        baseBranch: 'base',
         branchName: 'branch',
         upgrades: [],
       })
@@ -25,6 +26,7 @@ describe('workers/repository/update/pr/body/footer', () => {
     expect(
       getPrFooter({
         manager: 'some-manager',
+        baseBranch: 'base',
         branchName: 'branch',
         upgrades: [],
         prFooter: 'FOOTER',
diff --git a/lib/workers/repository/update/pr/body/header.spec.ts b/lib/workers/repository/update/pr/body/header.spec.ts
index 85f43a824a..c032ebe8d3 100644
--- a/lib/workers/repository/update/pr/body/header.spec.ts
+++ b/lib/workers/repository/update/pr/body/header.spec.ts
@@ -14,6 +14,7 @@ describe('workers/repository/update/pr/body/header', () => {
     expect(
       getPrHeader({
         manager: 'some-manager',
+        baseBranch: 'base',
         branchName: 'branch',
         upgrades: [],
       })
@@ -26,6 +27,7 @@ describe('workers/repository/update/pr/body/header', () => {
       getPrHeader({
         manager: 'some-manager',
         branchName: 'branch',
+        baseBranch: 'base',
         upgrades: [],
         prHeader: 'HEADER',
       })
diff --git a/lib/workers/repository/update/pr/body/index.spec.ts b/lib/workers/repository/update/pr/body/index.spec.ts
index 670c85f644..f9cb535ada 100644
--- a/lib/workers/repository/update/pr/body/index.spec.ts
+++ b/lib/workers/repository/update/pr/body/index.spec.ts
@@ -55,6 +55,7 @@ describe('workers/repository/update/pr/body/index', () => {
         {
           manager: 'some-manager',
           branchName: 'some-branch',
+          baseBranch: 'base',
           upgrades: [],
         },
         {
@@ -82,6 +83,7 @@ describe('workers/repository/update/pr/body/index', () => {
       await getPrBody(
         {
           manager: 'some-manager',
+          baseBranch: 'base',
           branchName: 'some-branch',
           upgrades: [upgrade],
         },
@@ -118,6 +120,7 @@ describe('workers/repository/update/pr/body/index', () => {
       await getPrBody(
         {
           manager: 'some-manager',
+          baseBranch: 'base',
           branchName: 'some-branch',
           upgrades: [upgrade],
         },
@@ -144,6 +147,7 @@ describe('workers/repository/update/pr/body/index', () => {
         {
           manager: 'some-manager',
           branchName: 'some-branch',
+          baseBranch: 'base',
           upgrades: [],
           prBodyTemplate: 'PR BODY',
         },
@@ -164,6 +168,7 @@ describe('workers/repository/update/pr/body/index', () => {
       const res = await getPrBody(
         {
           manager: 'some-manager',
+          baseBranch: 'base',
           branchName: 'some-branch',
           upgrades: [],
           prBodyTemplate: ['aaa', '**Rebasing**: FOO', 'bbb'].join('\n'),
@@ -187,6 +192,7 @@ describe('workers/repository/update/pr/body/index', () => {
           manager: 'some-manager',
           branchName: 'some-branch',
           upgrades: [],
+          baseBranch: 'base',
           prBodyTemplate: 'PR BODY',
         },
         {
@@ -235,6 +241,7 @@ describe('workers/repository/update/pr/body/index', () => {
           upgrades: [],
           packageFiles,
           prBodyTemplate: '{{{warnings}}}',
+          baseBranch: 'base',
         },
         {
           debugData: {
diff --git a/lib/workers/repository/update/pr/body/notes.spec.ts b/lib/workers/repository/update/pr/body/notes.spec.ts
index fa201b5f1e..7141511fb7 100644
--- a/lib/workers/repository/update/pr/body/notes.spec.ts
+++ b/lib/workers/repository/update/pr/body/notes.spec.ts
@@ -15,6 +15,7 @@ describe('workers/repository/update/pr/body/notes', () => {
     const res = getPrNotes({
       manager: 'some-manager',
       branchName: 'branch',
+      baseBranch: 'base',
       upgrades: [
         {
           manager: 'some-manager',
@@ -33,6 +34,7 @@ describe('workers/repository/update/pr/body/notes', () => {
     const res = getPrNotes({
       manager: 'some-manager',
       branchName: 'branch',
+      baseBranch: 'base',
       upgrades: [
         {
           manager: 'some-manager',
@@ -48,6 +50,7 @@ describe('workers/repository/update/pr/body/notes', () => {
     const res = getPrExtraNotes({
       manager: 'some-manager',
       branchName: 'branch',
+      baseBranch: 'base',
       upgrades: [
         { manager: 'some-manager', branchName: 'branch', gitRef: true },
       ],
diff --git a/lib/workers/repository/update/pr/body/updates-table.spec.ts b/lib/workers/repository/update/pr/body/updates-table.spec.ts
index 82715c4b16..36f2154afb 100644
--- a/lib/workers/repository/update/pr/body/updates-table.spec.ts
+++ b/lib/workers/repository/update/pr/body/updates-table.spec.ts
@@ -6,6 +6,7 @@ describe('workers/repository/update/pr/body/updates-table', () => {
     const configObj: BranchConfig = {
       manager: 'some-manager',
       branchName: 'some-branch',
+      baseBranch: 'base',
       upgrades: [],
       prBodyColumns: undefined,
     };
@@ -90,6 +91,7 @@ describe('workers/repository/update/pr/body/updates-table', () => {
     const configObj: BranchConfig = {
       manager: 'some-manager',
       branchName: 'some-branch',
+      baseBranch: 'base',
       upgrades: [upgrade0, upgrade1, upgrade2, upgrade3],
       prBodyColumns: ['Package', 'Type', 'Update', 'Change', 'Pending'],
       prBodyDefinitions: {
diff --git a/lib/workers/repository/update/pr/index.spec.ts b/lib/workers/repository/update/pr/index.spec.ts
index fb4028badf..03a82eaff3 100644
--- a/lib/workers/repository/update/pr/index.spec.ts
+++ b/lib/workers/repository/update/pr/index.spec.ts
@@ -60,6 +60,7 @@ describe('workers/repository/update/pr/index', () => {
     const config: BranchConfig = {
       manager: 'some-manager',
       branchName: sourceBranch,
+      baseBranch: 'base',
       upgrades: [],
       prTitle,
     };
diff --git a/lib/workers/types.ts b/lib/workers/types.ts
index 1da19fe992..efa2643605 100644
--- a/lib/workers/types.ts
+++ b/lib/workers/types.ts
@@ -112,7 +112,7 @@ export interface BranchConfig
     PlatformPrOptions {
   automergeComment?: string;
   automergeType?: string;
-  baseBranch?: string;
+  baseBranch: string;
   errors?: ValidationMessage[];
   hasTypes?: boolean;
   dependencyDashboardChecks?: Record<string, string>;
diff --git a/test/util.ts b/test/util.ts
index e7aed38653..4d893d8d99 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -33,8 +33,10 @@ export function mockedFunction<T extends (...args: any[]) => any>(
  * Simply wrapper to create partial mocks.
  * @param obj Object to cast to final type
  */
-export function partial<T>(obj: Partial<T>): T {
-  return obj as T;
+export function partial<T>(obj: Partial<T>): T;
+export function partial<T>(obj: Partial<T>[]): T[];
+export function partial(obj: unknown): unknown {
+  return obj;
 }
 
 export const fs = mocked(_fs);
-- 
GitLab