diff --git a/src/crc-start.ts b/src/crc-start.ts index e8fe973..3df7789 100644 --- a/src/crc-start.ts +++ b/src/crc-start.ts @@ -83,7 +83,7 @@ export async function startCrc( return true; } } - console.error(err); + console.error(err); provider.updateStatus('stopped'); throw new Error(`${productName} start error: ${err}`); } diff --git a/src/extension.ts b/src/extension.ts index 2a69339..16e062b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -37,9 +37,9 @@ import { registerOpenTerminalCommand } from './dev-terminal'; import { commandManager } from './command'; import { registerOpenConsoleCommand } from './crc-console'; import { registerLogInCommands } from './login-commands'; -import { defaultLogger } from './logger'; import { pushImageToCrcCluster } from './image-handler'; import type { Preset } from './types'; +import { needSetup, setUpCrc } from './crc-setup'; const CRC_PUSH_IMAGE_TO_CLUSTER = 'crc.image.push.to.cluster'; const CRC_PRESET_KEY = 'crc.crcPreset'; @@ -220,9 +220,7 @@ function registerProviderConnectionFactory( ): void { connectionFactoryDisposable = provider.setKubernetesProviderConnectionFactory( { - initialize: async () => { - await createCrcVm(provider, extensionContext, telemetryLogger, defaultLogger); - }, + initialize: () => initializeCrc(provider, extensionContext, telemetryLogger), create: async (params, logger) => { await presetChanged(provider, extensionContext, telemetryLogger); await saveConfig(params); @@ -258,16 +256,38 @@ async function createCrcVm( } } +async function initializeCrc( + provider: extensionApi.Provider, + extensionContext: extensionApi.ExtensionContext, + telemetryLogger: extensionApi.TelemetryLogger, +): Promise { + const hasSetupFinished = await setUpCrc(true); + if (!hasSetupFinished) { + throw new Error(`Failed at initializing ${productName}`); + } + + await needSetup(); + await connectToCrc(); + await presetChanged(provider, extensionContext, telemetryLogger); + addCommands(telemetryLogger); + await syncPreferences(provider, extensionContext, telemetryLogger); + return presetChanged(provider, extensionContext, telemetryLogger); +} + function addCommands(telemetryLogger: extensionApi.TelemetryLogger): void { - registerOpenTerminalCommand(); - registerOpenConsoleCommand(); - registerLogInCommands(); - registerDeleteCommand(); - - commandManager.addCommand(CRC_PUSH_IMAGE_TO_CLUSTER, image => { - telemetryLogger.logUsage('pushImage'); - return pushImageToCrcCluster(image); - }); + try { + registerOpenTerminalCommand(); + registerOpenConsoleCommand(); + registerLogInCommands(); + registerDeleteCommand(); + + commandManager.addCommand(CRC_PUSH_IMAGE_TO_CLUSTER, image => { + telemetryLogger.logUsage('pushImage'); + pushImageToCrcCluster(image); + }); + } catch (e) { + // do nothing + } } function deleteCommands(): void { @@ -335,7 +355,7 @@ function registerOpenShiftLocalCluster( } catch (e) { logger.error(e); throw e; - } + } }, stop: () => { provider.updateStatus('stopping'); @@ -406,6 +426,6 @@ async function presetChanged( // podman connection registerPodmanConnection(provider, extensionContext); } else if (preset === 'openshift' || preset === 'microshift') { - registerOpenShiftLocalCluster(getPresetLabel(preset), provider, extensionContext, telemetryLogger); + await registerOpenShiftLocalCluster(getPresetLabel(preset), provider, extensionContext, telemetryLogger); } } diff --git a/src/util.spec.ts b/src/util.spec.ts index 74ed568..a01153c 100644 --- a/src/util.spec.ts +++ b/src/util.spec.ts @@ -21,23 +21,23 @@ import { expect, test, vi } from 'vitest'; import { getLoggerCallback } from './util'; test('check logger passed to getLoggerCallback is actually called with data', async () => { - const logMock = vi.fn(); - const logger = { - log: logMock, - } as unknown as extensionApi.Logger; - const callback = getLoggerCallback(undefined, logger); - callback('data'); - expect(logMock).toBeCalledWith('data'); + const logMock = vi.fn(); + const logger = { + log: logMock, + } as unknown as extensionApi.Logger; + const callback = getLoggerCallback(undefined, logger); + callback('data'); + expect(logMock).toBeCalledWith('data'); }); test('check logger passed to getLoggerCallback is actually called with data', async () => { - const logMock = vi.fn(); - const context = { - log: { - log: logMock, - }, - } as unknown as extensionApi.LifecycleContext; - const callback = getLoggerCallback(context); - callback('data2'); - expect(logMock).toBeCalledWith('data2'); -}); \ No newline at end of file + const logMock = vi.fn(); + const context = { + log: { + log: logMock, + }, + } as unknown as extensionApi.LifecycleContext; + const callback = getLoggerCallback(context); + callback('data2'); + expect(logMock).toBeCalledWith('data2'); +});