Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use tasks to execute things instead of terminal windows #2173

Merged
merged 38 commits into from
Jul 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
74b4b37
Execute terminal commands as tasks
bwateratmsft Apr 7, 2020
bc00ec0
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 8, 2020
bcad3e2
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 10, 2020
c325e4d
Replace terminal provider with executeAsTask
bwateratmsft Apr 13, 2020
ee0a3b9
Refactor test case
bwateratmsft Apr 15, 2020
9d12d89
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 20, 2020
4737504
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 21, 2020
7cc6d99
Fix a bug
bwateratmsft Apr 21, 2020
26fad9b
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 24, 2020
f6adf81
Complete merge
bwateratmsft Apr 24, 2020
595e955
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 27, 2020
d8e2444
Merge branch 'master' into bmw/terminals
bwateratmsft Apr 30, 2020
245b056
Merge branch 'master' into bmw/terminals
bwateratmsft May 7, 2020
7b74573
Merge branch 'master' into bmw/terminals
bwateratmsft May 13, 2020
af4ceeb
bufferToString change
bwateratmsft May 14, 2020
ebf354a
Merge branch 'master' into bmw/terminals
bwateratmsft May 20, 2020
443f896
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 5, 2020
22b45ea
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 11, 2020
07965fc
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 15, 2020
a1a393b
Minor edits
bwateratmsft Jun 15, 2020
7d02180
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 22, 2020
89c90dc
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 22, 2020
7d6b8ab
Merge branch 'master' into bmw/terminals
bwateratmsft Jun 30, 2020
12fae47
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 9, 2020
f834818
Remove attachShellCommand
bwateratmsft Jul 9, 2020
1f76a3f
Intelligently pick shell
bwateratmsft Jul 9, 2020
69d41b1
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 10, 2020
33b1503
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 13, 2020
e30c7a0
Get container OS from inspect
bwateratmsft Jul 13, 2020
9a5b152
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 15, 2020
150796e
Fix bug
bwateratmsft Jul 15, 2020
0bbab7e
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 17, 2020
b459546
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 17, 2020
2c366ef
Bug fix
bwateratmsft Jul 17, 2020
f0a26fd
Bug fix
bwateratmsft Jul 17, 2020
69e0640
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 17, 2020
64fa2b1
Merge branch 'master' into bmw/terminals
bwateratmsft Jul 17, 2020
74da357
Make an options object
bwateratmsft Jul 20, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion extension.bundle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export { LineSplitter } from './src/debugging/coreclr/lineSplitter';
export { delay } from './src/utils/promiseUtils';
export { Lazy, AsyncLazy } from './src/utils/lazy';
export { OSProvider } from './src/utils/LocalOSProvider';
export { bufferToString } from './src/utils/spawnAsync';
export { DockerDaemonIsLinuxPrerequisite, DockerfileExistsPrerequisite, DotNetSdkInstalledPrerequisite, LinuxUserInDockerGroupPrerequisite, MacNuGetFallbackFolderSharedPrerequisite } from './src/debugging/coreclr/prereqManager';
export { ext } from './src/extensionVariables';
export { globAsync } from './src/utils/globAsync';
Expand All @@ -40,7 +41,6 @@ export { inferCommand, inferPackageName, InspectMode, NodePackage } from './src/
export { nonNullProp } from './src/utils/nonNull';
export { getDockerOSType, isWindows10RS3OrNewer, isWindows10RS4OrNewer, isWindows10RS5OrNewer, isWindows1019H1OrNewer } from "./src/utils/osUtils";
export { Platform, PlatformOS } from './src/utils/platform';
export { DefaultTerminalProvider } from './src/utils/TerminalProvider';
export { trimWithElipsis } from './src/utils/trimWithElipsis';
export { recursiveFindTaskByType } from './src/tasks/TaskHelper';
export { TaskDefinitionBase } from './src/tasks/TaskDefinitionBase';
Expand Down
12 changes: 0 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2039,18 +2039,6 @@
],
"description": "%vscode-docker.config.docker.languageserver.diagnostics.instructionWorkdirRelative%"
},
"docker.attachShellCommand.linuxContainer": {
"type": "string",
"default": "/bin/sh -c \"[ -e /bin/bash ] && /bin/bash || /bin/sh\"",
"description": "%vscode-docker.config.docker.attachShellCommand.linuxContainer%",
"deprecationMessage": "%vscode-docker.config.deprecated%"
},
"docker.attachShellCommand.windowsContainer": {
"type": "string",
"default": "cmd",
"description": "%vscode-docker.config.docker.attachShellCommand.windowsContainer%",
"deprecationMessage": "%vscode-docker.config.deprecated%"
},
"docker.dockerComposeBuild": {
"type": "boolean",
"default": true,
Expand Down
2 changes: 0 additions & 2 deletions package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,6 @@
"vscode-docker.config.docker.languageserver.diagnostics.instructionHealthcheckMultiple": "Controls the diagnostic severity for flagging a Dockerfile with multiple HEALTHCHECK instructions",
"vscode-docker.config.docker.languageserver.diagnostics.instructionJsonInSingleQuotes": "Controls the diagnostic severity for JSON instructions that are written incorrectly with single quotes",
"vscode-docker.config.docker.languageserver.diagnostics.instructionWorkdirRelative": "Controls the diagnostic severity for WORKDIR instructions that do not point to an absolute path",
"vscode-docker.config.docker.attachShellCommand.linuxContainer": "Attach command to use for Linux containers",
"vscode-docker.config.docker.attachShellCommand.windowsContainer": "Attach command to use for Windows containers",
"vscode-docker.config.docker.dockerComposeBuild": "Set to true to include --build option when docker-compose command is invoked",
"vscode-docker.config.docker.dockerComposeDetached": "Set to true to include --d (detached) option when docker-compose command is invoked",
"vscode-docker.config.docker.showRemoteWorkspaceWarning": "Set to true to prompt to switch from \"UI\" extension mode to \"Workspace\" extension mode if an operation is not supported in UI mode.",
Expand Down
8 changes: 3 additions & 5 deletions src/commands/compose.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import * as vscode from 'vscode';
import { IActionContext } from 'vscode-azureextensionui';
import { ext } from '../extensionVariables';
import { localize } from "../localize";
import { executeAsTask } from '../utils/executeAsTask';
import { createFileItem, Item, quickPickDockerComposeFileItem } from '../utils/quickPickFile';
import { quickPickWorkspaceFolder } from '../utils/quickPickWorkspaceFolder';
import { selectComposeCommand } from './selectCommandTemplate';
Expand All @@ -30,12 +31,10 @@ async function compose(context: IActionContext, commands: ('up' | 'down')[], mes
selectedItems = selectedItem ? [selectedItem] : [];
}

const terminal: vscode.Terminal = ext.terminalProvider.createTerminal('Docker Compose');
const configOptions: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration('docker');
const build: boolean = configOptions.get('dockerComposeBuild', true);
const detached: boolean = configOptions.get('dockerComposeDetached', true);

terminal.sendText(`cd "${folder.uri.fsPath}"`);
for (const command of commands) {
if (selectedItems.length === 0) {
const terminalCommand = await selectComposeCommand(
Expand All @@ -46,7 +45,7 @@ async function compose(context: IActionContext, commands: ('up' | 'down')[], mes
detached,
build
);
terminal.sendText(await rewriteCommandForNewCliIfNeeded(terminalCommand));
await executeAsTask(context, await rewriteCommandForNewCliIfNeeded(terminalCommand), 'Docker Compose', { addDockerEnv: true, workspaceFolder: folder });
} else {
for (const item of selectedItems) {
const terminalCommand = await selectComposeCommand(
Expand All @@ -57,10 +56,9 @@ async function compose(context: IActionContext, commands: ('up' | 'down')[], mes
detached,
build
);
terminal.sendText(await rewriteCommandForNewCliIfNeeded(terminalCommand));
await executeAsTask(context, await rewriteCommandForNewCliIfNeeded(terminalCommand), 'Docker Compose', { addDockerEnv: true, workspaceFolder: folder });
}
}
terminal.show();
}
}

Expand Down
37 changes: 24 additions & 13 deletions src/commands/containers/attachShellContainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as vscode from 'vscode';
import { IActionContext } from 'vscode-azureextensionui';
import { DockerOSType } from '../../docker/Common';
import { ext } from '../../extensionVariables';
import { localize } from '../../localize';
import { ContainerTreeItem } from '../../tree/containers/ContainerTreeItem';
import { getDockerOSType } from '../../utils/osUtils';
import { executeAsTask } from '../../utils/executeAsTask';
import { execAsync } from '../../utils/spawnAsync';
import { selectAttachCommand } from '../selectCommandTemplate';

export async function attachShellContainer(context: IActionContext, node?: ContainerTreeItem): Promise<void> {
Expand All @@ -21,25 +21,38 @@ export async function attachShellContainer(context: IActionContext, node?: Conta
});
}

let shellCommand: string;
let osType: DockerOSType;
try {
// TODO: get OS type from container instead of from system
osType = await getDockerOSType(context);
osType = (await ext.dockerClient.inspectContainer(context, node.containerId))?.Platform || 'linux';
} catch {
// Assume linux
// Assume Linux if the above fails
osType = 'linux';
}

context.telemetry.properties.dockerOSType = osType;

let shellCommand: string;
const configOptions: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration('docker');
if (osType === 'windows') {
shellCommand = configOptions.get('attachShellCommand.windowsContainer');
// On Windows containers, always use cmd
shellCommand = 'cmd';
} else {
shellCommand = configOptions.get('attachShellCommand.linuxContainer');
const currentContext = await ext.dockerContextManager.getCurrentContext();

if (currentContext.Type === 'aci') {
// If it's ACI we have to do sh, because it's not possible to check if bash is present
shellCommand = 'sh';
} else {
// On Linux containers, check if bash is present
// If so use it, otherwise use sh
try {
// If this succeeds, bash is present (exit code 0)
await execAsync(`docker exec -i ${node.containerId} sh -c "which bash"`);
shellCommand = 'bash';
} catch {
shellCommand = 'sh';
}
}
}
context.telemetry.properties.shellCommand = shellCommand;

const terminalCommand = await selectAttachCommand(
context,
Expand All @@ -49,7 +62,5 @@ export async function attachShellContainer(context: IActionContext, node?: Conta
shellCommand
);

const terminal = ext.terminalProvider.createTerminal(`Shell: ${node.containerName}`);
terminal.sendText(terminalCommand);
terminal.show();
await executeAsTask(context, terminalCommand, `Shell: ${node.containerName}`, { addDockerEnv: true });
}
5 changes: 2 additions & 3 deletions src/commands/containers/viewContainerLogs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { IActionContext } from 'vscode-azureextensionui';
import { ext } from '../../extensionVariables';
import { localize } from '../../localize';
import { ContainerTreeItem } from '../../tree/containers/ContainerTreeItem';
import { executeAsTask } from '../../utils/executeAsTask';
import { selectLogsCommand } from '../selectCommandTemplate';

export async function viewContainerLogs(context: IActionContext, node?: ContainerTreeItem): Promise<void> {
Expand All @@ -25,7 +26,5 @@ export async function viewContainerLogs(context: IActionContext, node?: Containe
node.containerId
);

const terminal = ext.terminalProvider.createTerminal(node.fullTag);
terminal.sendText(terminalCommand);
terminal.show();
await executeAsTask(context, terminalCommand, node.fullTag, { addDockerEnv: true });
}
15 changes: 8 additions & 7 deletions src/commands/dockerInstaller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { OSTempFileProvider } from '../debugging/coreclr/tempFileProvider';
import { ext } from '../extensionVariables';
import { localize } from '../localize';
import { dockerInstallStatusProvider } from '../utils/DockerInstallStatusProvider';
import { executeAsTask } from '../utils/executeAsTask';
import { streamToFile } from '../utils/httpRequest';
import LocalOSProvider from '../utils/LocalOSProvider';
import { openExternal } from '../utils/openExternal';
Expand Down Expand Up @@ -45,7 +46,7 @@ export abstract class DockerInstallerBase {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
vscode.window.showInformationMessage(installationMessage);
try {
await this.install(downloadedFileName, command);
await this.install(context, downloadedFileName, command);
} catch (error) {
const message = `${localize('vscode-docker.commands.DockerInstallerBase.installFailed', 'Docker Desktop installation failed')}. ${error}`;
const title = localize('vscode-docker.commands.DockerInstallerBase.openInstallLink', 'Install Instruction');
Expand Down Expand Up @@ -83,7 +84,7 @@ export abstract class DockerInstallerBase {
context.errorHandling.suppressDisplay = true;
}

protected abstract install(fileName: string, cmd: string): Promise<void>;
protected abstract install(context: IActionContext, fileName: string, cmd: string): Promise<void>;
}

export class WindowsDockerInstaller extends DockerInstallerBase {
Expand All @@ -94,7 +95,7 @@ export class WindowsDockerInstaller extends DockerInstallerBase {
return `"${fileName}"`;
}

protected async install(fileName: string, cmd: string): Promise<void> {
protected async install(context: IActionContext, fileName: string, cmd: string): Promise<void> {
const fsProvider = new LocalFileSystemProvider();
try {
ext.outputChannel.appendLine(localize('vscode-docker.commands.DockerInstallerBase.downloadCompleteMessage', 'Executing command {0}', cmd));
Expand All @@ -114,11 +115,11 @@ export class MacDockerInstaller extends DockerInstallerBase {
return `chmod +x '${fileName}' && open '${fileName}'`;
}

protected async install(fileName: string): Promise<void> {
const terminal = ext.terminalProvider.createTerminal(localize('vscode-docker.commands.MacDockerInstaller.terminalTitle', 'Docker Install'));
protected async install(context: IActionContext, fileName: string): Promise<void> {
const title = localize('vscode-docker.commands.MacDockerInstaller.terminalTitle', 'Docker Install');
const command = this.getInstallCommand(fileName);
terminal.sendText(command);
terminal.show();

await executeAsTask(context, command, title, { addDockerEnv: false });
}
}

Expand Down
5 changes: 2 additions & 3 deletions src/commands/images/buildImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { IActionContext } from "vscode-azureextensionui";
import { ext } from "../../extensionVariables";
import { localize } from '../../localize';
import { getOfficialBuildTaskForDockerfile } from "../../tasks/TaskHelper";
import { executeAsTask } from "../../utils/executeAsTask";
import { getValidImageName } from "../../utils/getValidImageName";
import { delay } from "../../utils/promiseUtils";
import { quickPickDockerFileItem } from "../../utils/quickPickFile";
Expand Down Expand Up @@ -64,8 +65,6 @@ export async function buildImage(context: IActionContext, dockerFileUri: vscode.
terminalCommand = terminalCommand.replace(tagRegex, imageName);
}

const terminal: vscode.Terminal = ext.terminalProvider.createTerminal('Docker');
terminal.sendText(terminalCommand);
terminal.show();
await executeAsTask(context, terminalCommand, 'Docker', { addDockerEnv: true, workspaceFolder: rootFolder });
}
}
5 changes: 2 additions & 3 deletions src/commands/images/pullImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { IActionContext } from 'vscode-azureextensionui';
import { ext } from '../../extensionVariables';
import { localize } from '../../localize';
import { ImageTreeItem } from '../../tree/images/ImageTreeItem';
import { executeAsTask } from '../../utils/executeAsTask';
import { multiSelectNodes } from '../../utils/multiSelectNodes';

export async function pullImage(context: IActionContext, node?: ImageTreeItem, nodes?: ImageTreeItem[]): Promise<void> {
Expand All @@ -18,9 +19,7 @@ export async function pullImage(context: IActionContext, node?: ImageTreeItem, n
nodes
);

const terminal = ext.terminalProvider.createTerminal("docker pull");
terminal.show();
for (const n of nodes) {
terminal.sendText(`docker pull ${n.fullTag}`);
await executeAsTask(context, `docker pull ${n.fullTag}`, 'docker pull', { addDockerEnv: true });
}
}
5 changes: 2 additions & 3 deletions src/commands/images/pushImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { localize } from '../../localize';
import { ImageTreeItem } from '../../tree/images/ImageTreeItem';
import { registryExpectedContextValues } from '../../tree/registries/registryContextValues';
import { RegistryTreeItemBase } from '../../tree/registries/RegistryTreeItemBase';
import { executeAsTask } from '../../utils/executeAsTask';
import { addImageTaggingTelemetry, tagImage } from './tagImage';

export async function pushImage(context: IActionContext, node: ImageTreeItem | undefined): Promise<void> {
Expand Down Expand Up @@ -65,9 +66,7 @@ export async function pushImage(context: IActionContext, node: ImageTreeItem | u
addImageTaggingTelemetry(context, finalTag, '');

// Finally push the image
const terminal = ext.terminalProvider.createTerminal(finalTag);
terminal.sendText(`docker push ${finalTag}`);
terminal.show();
await executeAsTask(context, `docker push ${finalTag}`, finalTag, { addDockerEnv: true });
}

async function tryGetConnectedRegistryForPath(context: IActionContext, baseImagePath: string): Promise<RegistryTreeItemBase | undefined> {
Expand Down
7 changes: 2 additions & 5 deletions src/commands/images/runAzureCliImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import * as fse from 'fs-extra';
import * as os from 'os';
import * as vscode from 'vscode';
import { DialogResponses, IActionContext } from 'vscode-azureextensionui';
import { ext } from '../../extensionVariables';
import { localize } from '../../localize';
import { executeAsTask } from '../../utils/executeAsTask';
import { openExternal } from '../../utils/openExternal';
import { getDockerOSType } from '../../utils/osUtils';

Expand Down Expand Up @@ -38,9 +38,6 @@ export async function runAzureCliImage(context: IActionContext): Promise<void> {
vol += ` -v ${homeDir}/.kube:/root/.kube`;
}

const cmd: string = `docker run ${option} ${vol.trim()} -it --rm azuresdk/azure-cli-python:latest`;
const terminal: vscode.Terminal = ext.terminalProvider.createTerminal('Azure CLI');
terminal.sendText(cmd);
terminal.show();
await executeAsTask(context, `docker run ${option} ${vol.trim()} -it --rm azuresdk/azure-cli-python:latest`, 'Azure CLI', { addDockerEnv: true });
}
}
5 changes: 2 additions & 3 deletions src/commands/images/runImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { IActionContext } from 'vscode-azureextensionui';
import { ext } from '../../extensionVariables';
import { localize } from '../../localize';
import { ImageTreeItem } from '../../tree/images/ImageTreeItem';
import { executeAsTask } from '../../utils/executeAsTask';
import { selectRunCommand } from '../selectCommandTemplate';

export async function runImage(context: IActionContext, node?: ImageTreeItem): Promise<void> {
Expand Down Expand Up @@ -35,7 +36,5 @@ async function runImageCore(context: IActionContext, node: ImageTreeItem | undef
inspectInfo?.Config?.ExposedPorts
);

const terminal = ext.terminalProvider.createTerminal(node.fullTag);
terminal.sendText(terminalCommand);
terminal.show();
await executeAsTask(context, terminalCommand, node.fullTag, { addDockerEnv: true });
}
6 changes: 2 additions & 4 deletions src/commands/registries/logOutOfDockerCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { Terminal } from 'vscode';
import { IActionContext } from 'vscode-azureextensionui';
import { ext } from '../../extensionVariables';
import { registryExpectedContextValues } from '../../tree/registries/registryContextValues';
import { RegistryTreeItemBase } from '../../tree/registries/RegistryTreeItemBase';
import { executeAsTask } from '../../utils/executeAsTask';

export async function logOutOfDockerCli(context: IActionContext, node?: RegistryTreeItemBase): Promise<void> {
if (!node) {
node = await ext.registriesTree.showTreeItemPicker<RegistryTreeItemBase>(registryExpectedContextValues.all.registry, context);
}

let creds = await node.getDockerCliCredentials();
const terminal: Terminal = ext.terminalProvider.createTerminal('docker logout');
terminal.sendText(`docker logout ${creds.registryPath}`);
terminal.show();
await executeAsTask(context, `docker logout ${creds.registryPath}`, 'Docker', { addDockerEnv: true });
}
6 changes: 2 additions & 4 deletions src/commands/registries/pullImages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { Terminal } from "vscode";
import { IActionContext } from "vscode-azureextensionui";
import { ext } from '../../extensionVariables';
import { registryExpectedContextValues } from "../../tree/registries/registryContextValues";
import { RegistryTreeItemBase } from '../../tree/registries/RegistryTreeItemBase';
import { RemoteRepositoryTreeItemBase } from "../../tree/registries/RemoteRepositoryTreeItemBase";
import { RemoteTagTreeItem } from '../../tree/registries/RemoteTagTreeItem';
import { executeAsTask } from "../../utils/executeAsTask";
import { logInToDockerCli } from "./logInToDockerCli";

export async function pullRepository(context: IActionContext, node?: RemoteRepositoryTreeItemBase): Promise<void> {
Expand All @@ -31,7 +31,5 @@ export async function pullImageFromRepository(context: IActionContext, node?: Re
async function pullImages(context: IActionContext, node: RegistryTreeItemBase, imageRequest: string): Promise<void> {
await logInToDockerCli(context, node);

const terminal: Terminal = ext.terminalProvider.createTerminal("docker pull");
terminal.show();
terminal.sendText(`docker pull ${node.baseImagePath}/${imageRequest}`);
await executeAsTask(context, `docker pull ${node.baseImagePath}/${imageRequest}`, 'Docker', { addDockerEnv: true });
}
Loading