From f910e6f9b6fb6d35a22f480190ce747875c4d637 Mon Sep 17 00:00:00 2001
From: Gabriel-Ladzaretti
 <97394622+Gabriel-Ladzaretti@users.noreply.github.com>
Date: Sun, 4 Sep 2022 17:51:35 +0300
Subject: [PATCH] fix(repository/migration): create migration branch from the
 default branch (#17535)

---
 .../repository/config-migration/branch/create.spec.ts | 11 ++++++++++-
 .../repository/config-migration/branch/create.ts      |  4 +++-
 .../repository/config-migration/branch/rebase.spec.ts |  8 ++++++++
 .../repository/config-migration/branch/rebase.ts      |  7 ++++++-
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/lib/workers/repository/config-migration/branch/create.spec.ts b/lib/workers/repository/config-migration/branch/create.spec.ts
index 68c91f7895..c606714147 100644
--- a/lib/workers/repository/config-migration/branch/create.spec.ts
+++ b/lib/workers/repository/config-migration/branch/create.spec.ts
@@ -1,6 +1,6 @@
 import { Fixtures } from '../../../../../test/fixtures';
 import { RenovateConfig, getConfig, platform } from '../../../../../test/util';
-import { commitFiles } from '../../../../util/git';
+import { checkoutBranch, commitFiles } from '../../../../util/git';
 import { createConfigMigrationBranch } from './create';
 import type { MigratedData } from './migrated-data';
 
@@ -18,12 +18,15 @@ describe('workers/repository/config-migration/branch/create', () => {
   beforeEach(() => {
     jest.clearAllMocks();
     config = getConfig();
+    config.baseBranch = 'dev';
+    config.defaultBranch = 'master';
     migratedConfigData = { content: renovateConfig, filename };
   });
 
   describe('createConfigMigrationBranch', () => {
     it('applies the default commit message', async () => {
       await createConfigMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -43,6 +46,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
       await createConfigMigrationBranch(config, migratedConfigData);
 
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(platform.commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -64,6 +68,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
       await createConfigMigrationBranch(config, migratedConfigData);
 
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -86,6 +91,7 @@ describe('workers/repository/config-migration/branch/create', () => {
         const message = `PREFIX: migrate config renovate.json`;
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -109,6 +115,7 @@ describe('workers/repository/config-migration/branch/create', () => {
         const message = `Migrate config renovate.json ${suffix}`;
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -133,6 +140,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -156,6 +164,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
diff --git a/lib/workers/repository/config-migration/branch/create.ts b/lib/workers/repository/config-migration/branch/create.ts
index e177384cb1..0e8bbe74dc 100644
--- a/lib/workers/repository/config-migration/branch/create.ts
+++ b/lib/workers/repository/config-migration/branch/create.ts
@@ -2,11 +2,12 @@ import { GlobalConfig } from '../../../../config/global';
 import type { RenovateConfig } from '../../../../config/types';
 import { logger } from '../../../../logger';
 import { commitAndPush } from '../../../../modules/platform/commit';
+import { checkoutBranch } from '../../../../util/git';
 import { getMigrationBranchName } from '../common';
 import { ConfigMigrationCommitMessageFactory } from './commit-message';
 import type { MigratedData } from './migrated-data';
 
-export function createConfigMigrationBranch(
+export async function createConfigMigrationBranch(
   config: Partial<RenovateConfig>,
   migratedConfigData: MigratedData
 ): Promise<string | null> {
@@ -28,6 +29,7 @@ export function createConfigMigrationBranch(
     return Promise.resolve(null);
   }
 
+  await checkoutBranch(config.defaultBranch!);
   return commitAndPush({
     branchName: getMigrationBranchName(config),
     files: [
diff --git a/lib/workers/repository/config-migration/branch/rebase.spec.ts b/lib/workers/repository/config-migration/branch/rebase.spec.ts
index 0fdc26170e..81ab12b7f5 100644
--- a/lib/workers/repository/config-migration/branch/rebase.spec.ts
+++ b/lib/workers/repository/config-migration/branch/rebase.spec.ts
@@ -6,6 +6,7 @@ import {
   platform,
 } from '../../../../../test/util';
 import { GlobalConfig } from '../../../../config/global';
+import { checkoutBranch } from '../../../../util/git';
 import type { MigratedData } from './migrated-data';
 import { rebaseMigrationBranch } from './rebase';
 
@@ -34,12 +35,15 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       config = {
         ...getConfig(),
         repository: 'some/repo',
+        baseBranch: 'dev',
+        defaultBranch: 'master',
       };
     });
 
     it('does not rebase modified branch', async () => {
       git.isBranchModified.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
@@ -48,12 +52,14 @@ describe('workers/repository/config-migration/branch/rebase', () => {
         .mockResolvedValueOnce(renovateConfig)
         .mockResolvedValueOnce(renovateConfig);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
     it('rebases migration branch', async () => {
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(git.commitFiles).toHaveBeenCalledTimes(1);
     });
 
@@ -63,6 +69,7 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       });
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
@@ -70,6 +77,7 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       config.platformCommit = true;
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(platform.commitFiles).toHaveBeenCalledTimes(1);
     });
   });
diff --git a/lib/workers/repository/config-migration/branch/rebase.ts b/lib/workers/repository/config-migration/branch/rebase.ts
index 1da3459f0a..06a3800915 100644
--- a/lib/workers/repository/config-migration/branch/rebase.ts
+++ b/lib/workers/repository/config-migration/branch/rebase.ts
@@ -2,7 +2,11 @@ import { GlobalConfig } from '../../../../config/global';
 import type { RenovateConfig } from '../../../../config/types';
 import { logger } from '../../../../logger';
 import { commitAndPush } from '../../../../modules/platform/commit';
-import { getFile, isBranchModified } from '../../../../util/git';
+import {
+  checkoutBranch,
+  getFile,
+  isBranchModified,
+} from '../../../../util/git';
 import { getMigrationBranchName } from '../common';
 import { ConfigMigrationCommitMessageFactory } from './commit-message';
 import type { MigratedData } from './migrated-data';
@@ -37,6 +41,7 @@ export async function rebaseMigrationBranch(
   );
   const commitMessage = commitMessageFactory.getCommitMessage();
 
+  await checkoutBranch(config.defaultBranch!);
   return commitAndPush({
     branchName,
     files: [
-- 
GitLab