diff --git a/src/otomi-stack.test.ts b/src/otomi-stack.test.ts index 7597fc33..408c5d88 100644 --- a/src/otomi-stack.test.ts +++ b/src/otomi-stack.test.ts @@ -1461,6 +1461,14 @@ describe('APL code repositories tests', () => { describe('OtomiStack.migrateGitSettings', () => { let stack: OtomiStack + const mockFilestoreGet = jest.fn().mockImplementation(() => { + return { + spec: { + enabled: true, + }, + } + }) + const mockSaveApp = jest.fn() const mockCommit = jest.fn().mockResolvedValue(undefined) const mockPushToNewRemote = jest.fn().mockResolvedValue(undefined) const mockRootPull = jest.fn().mockResolvedValue(undefined) @@ -1485,7 +1493,8 @@ describe('OtomiStack.migrateGitSettings', () => { jest.spyOn(stack as any, 'extractAndStoreSettingsSecrets').mockResolvedValue(undefined) jest.spyOn(require('src/utils'), 'getValuesSchema').mockResolvedValue({ properties: {} }) jest.spyOn(stack as any, 'saveSettings').mockResolvedValue(undefined) - ;(stack as any).fileStore = { set: jest.fn() } + ;(stack as any).fileStore = { set: jest.fn(), get: mockFilestoreGet } + ;(stack as any).saveAppToggle = mockSaveApp ;(stack as any).git = { commit: mockCommit, pushToNewRemote: mockPushToNewRemote, @@ -1516,6 +1525,8 @@ describe('OtomiStack.migrateGitSettings', () => { false, ) + expect(mockFilestoreGet).toHaveBeenCalled() + expect(mockSaveApp).toHaveBeenCalledWith({ spec: { enabled: false } }) expect(mockCommit).toHaveBeenCalled() expect(mockPushToNewRemote).toHaveBeenCalled() expect(mockRefreshGitClient).toHaveBeenCalled() @@ -1533,6 +1544,8 @@ describe('OtomiStack.migrateGitSettings', () => { false, ) + expect(mockFilestoreGet).toHaveBeenCalled() + expect(mockSaveApp).toHaveBeenCalledWith({ spec: { enabled: false } }) expect(mockCommit).toHaveBeenCalled() expect(mockPushToNewRemote).toHaveBeenCalled() expect(mockRefreshGitClient).toHaveBeenCalled() @@ -1552,6 +1565,8 @@ describe('OtomiStack.migrateGitSettings', () => { ), ).rejects.toThrow(new BadRequestError('Branch main in repository is not empty')) + expect(mockFilestoreGet).not.toHaveBeenCalled() + expect(mockSaveApp).not.toHaveBeenCalled() expect(mockCommit).not.toHaveBeenCalled() expect(mockPushToNewRemote).not.toHaveBeenCalled() expect(mockRefreshGitClient).not.toHaveBeenCalled() @@ -1569,6 +1584,8 @@ describe('OtomiStack.migrateGitSettings', () => { false, ) + expect(mockFilestoreGet).not.toHaveBeenCalled() + expect(mockSaveApp).not.toHaveBeenCalled() expect(mockCommit).not.toHaveBeenCalled() expect(mockPushToNewRemote).not.toHaveBeenCalled() expect(mockRefreshGitClient).toHaveBeenCalled() diff --git a/src/otomi-stack.ts b/src/otomi-stack.ts index d0493fdb..481f6180 100644 --- a/src/otomi-stack.ts +++ b/src/otomi-stack.ts @@ -700,10 +700,19 @@ export default class OtomiStack { const { repoUrl, branch } = rootStack.gitConfig const isDifferentRepo = repoUrl !== params.repoUrl || branch !== params.branch if (isDifferentRepo) { + // Do not migrate on credential or identity change only if (remoteHasContent) { throw new BadRequestError(`Branch ${params.branch} in repository is not empty`) } - // Do not migrate only on credential or identity change + if (!params.repoUrl.includes('git-server.git-server.svc.cluster.local')) { + // Deactivate the git-server app before pushing commit to new repo + const filePath = getResourceFilePath('AplApp', 'git-server') + const aplApp = this.fileStore.get(filePath) + if (aplApp && aplApp.spec?.enabled !== false) { + set(aplApp, 'spec.enabled', false) + await this.saveAppToggle(aplApp) + } + } await this.commitAndPushMigration(params) } await this.storeGitConfig(params) @@ -2711,8 +2720,9 @@ export default class OtomiStack { } async saveAppToggle(app: AplObject): Promise { - const filePath = this.fileStore.setPlatformResource(app as AplPlatformObject) - await this.git.writeFile(filePath, app) + const platformObject = buildPlatformObject('AplApp', app.metadata.name, app.spec) + const filePath = this.fileStore.setPlatformResource(platformObject) + await this.git.writeFile(filePath, platformObject) } async saveAdminApp(app: App): Promise {