Add docker images auto check and setup support for WAMR-IDE (#1882)

1. Add docker images auto check and setup support for WAMR-IDE
2. Fix bug that the code goes on when user skips install
This commit is contained in:
Wang Ning
2023-01-29 09:41:03 +08:00
committed by GitHub
parent 58316635d4
commit 45c003e6e4
5 changed files with 268 additions and 54 deletions

View File

@ -24,6 +24,13 @@ import {
getWAMRExtensionVersion,
} from './utilities/lldbUtilities';
import {
checkIfDockerStarted,
checkIfDockerImagesExist,
promptSetupDockerImages,
} from './utilities/dockerUtilities';
import { SelectionOfPrompt } from './constants';
let wasmTaskProvider: WasmTaskProvider;
let wasmDebugConfigProvider: WasmDebugConfigurationProvider;
let currentPrjDir = '';
@ -304,7 +311,7 @@ export async function activate(context: vscode.ExtensionContext) {
const disposableBuild = vscode.commands.registerCommand(
'wamride.build',
() => {
async () => {
if (!isWasmProject) {
vscode.window.showErrorMessage('Build failed', {
modal: true,
@ -313,6 +320,28 @@ export async function activate(context: vscode.ExtensionContext) {
return;
}
try {
/* check if docker images are ready before building */
if (
(await checkIfDockerStarted()) &&
!(await checkIfDockerImagesExist(context))
) {
/**NOTE - if users select to skip install,
* we should return rather than continue
* the execution
*/
if (
(await promptSetupDockerImages(context)) ===
SelectionOfPrompt.skip
) {
return;
}
}
} catch (e) {
vscode.window.showWarningMessage((e as Error).message);
return;
}
generateCMakeFile(includePathArr, excludeFileArr);
/* destroy the wasm-toolchain-ctr if it exists */
vscode.commands
@ -382,10 +411,35 @@ export async function activate(context: vscode.ExtensionContext) {
/* we should check again whether the user installed lldb, as this can be skipped during activation */
try {
if (!isLLDBInstalled(context)) {
await promptInstallLLDB(context);
/**NOTE - if users select to skip install,
* we should return rather than continue
* the execution
*/
if (
(await promptInstallLLDB(context)) ===
SelectionOfPrompt.skip
) {
return;
}
}
if (
(await checkIfDockerStarted()) &&
!(await checkIfDockerImagesExist(context))
) {
/**NOTE - save as above lldb, should return if
* users select to skip set up
*/
if (
(await promptSetupDockerImages(context)) ===
SelectionOfPrompt.skip
) {
return;
}
}
} catch (e) {
vscode.window.showWarningMessage((e as Error).message);
return;
}
/* refuse to debug if build process failed */
@ -461,48 +515,70 @@ export async function activate(context: vscode.ExtensionContext) {
}
);
const disposableRun = vscode.commands.registerCommand('wamride.run', () => {
if (!isWasmProject) {
vscode.window.showErrorMessage('run failed', {
modal: true,
detail: 'Current project is not wasm project, please open wasm project and try again.',
});
return;
}
/* refuse to debug if build process failed */
if (!checkIfBuildSuccess()) {
vscode.window.showErrorMessage('Debug failed', {
modal: true,
detail: 'Can not find WASM binary, please build WASM firstly.',
});
return;
}
vscode.commands
.executeCommand(
'workbench.action.tasks.runTask',
'Destroy: Wasm-Container-Before-Run'
)
.then(() => {
const disposableAft = vscode.tasks.onDidEndTaskProcess(e => {
if (e.execution.task.name === 'Wasm-Container-Before-Run') {
/* make sure that run wasm task will be executed after destroy task finish */
vscode.commands
.executeCommand(
'workbench.action.tasks.runTask',
'Run: Wasm'
)
.then(() => {
if (e.exitCode !== 0) {
disposableAft.dispose();
return;
}
});
disposableAft.dispose();
}
const disposableRun = vscode.commands.registerCommand(
'wamride.run',
async () => {
if (!isWasmProject) {
vscode.window.showErrorMessage('run failed', {
modal: true,
detail: 'Current project is not wasm project, please open wasm project and try again.',
});
});
});
return;
}
try {
/* check if docker images are set up before building */
if (
(await checkIfDockerStarted()) &&
!(await checkIfDockerImagesExist(context))
) {
await promptSetupDockerImages(context);
}
} catch (e) {
vscode.window.showWarningMessage((e as Error).message);
return;
}
/* refuse to debug if build process failed */
if (!checkIfBuildSuccess()) {
vscode.window.showErrorMessage('Debug failed', {
modal: true,
detail: 'Can not find WASM binary, please build WASM firstly.',
});
return;
}
vscode.commands
.executeCommand(
'workbench.action.tasks.runTask',
'Destroy: Wasm-Container-Before-Run'
)
.then(() => {
const disposableAft = vscode.tasks.onDidEndTaskProcess(
e => {
if (
e.execution.task.name ===
'Wasm-Container-Before-Run'
) {
/* make sure that run wasm task will be executed when destroy task finish */
vscode.commands
.executeCommand(
'workbench.action.tasks.runTask',
'Run: Wasm'
)
.then(() => {
if (e.exitCode !== 0) {
disposableAft.dispose();
return;
}
});
disposableAft.dispose();
}
}
);
});
}
);
const disposableToggleIncludePath = vscode.commands.registerCommand(
'wamride.build.toggleStateIncludePath',
@ -700,6 +776,13 @@ export async function activate(context: vscode.ExtensionContext) {
if (!isLLDBInstalled(context)) {
await promptInstallLLDB(context);
}
if (
(await checkIfDockerStarted()) &&
!(await checkIfDockerImagesExist(context))
) {
await promptSetupDockerImages(context);
}
} catch (e) {
vscode.window.showWarningMessage((e as Error).message);
}