diff --git a/extensions/resource-deployment/package.json b/extensions/resource-deployment/package.json index b25f2331d8..8178cdf4e1 100644 --- a/extensions/resource-deployment/package.json +++ b/extensions/resource-deployment/package.json @@ -248,7 +248,8 @@ }, "requiredTools": [ { - "name": "kubectl" + "name": "kubectl", + "version": "1.13.0" }, { "name": "azure-cli" diff --git a/extensions/resource-deployment/src/interfaces.ts b/extensions/resource-deployment/src/interfaces.ts index ef126b1fa7..d6661e3437 100644 --- a/extensions/resource-deployment/src/interfaces.ts +++ b/extensions/resource-deployment/src/interfaces.ts @@ -219,7 +219,7 @@ export interface OsRelease extends JSON { export interface ToolRequirementInfo { name: string; - version: string; + version?: string; } export enum ToolType { @@ -256,6 +256,7 @@ export interface ITool { readonly outputChannelName: string; readonly fullVersion: string | undefined; readonly onDidUpdateData: vscode.Event; + showOutputChannel(preserveFocus?: boolean): void; loadInformation(): Promise; install(): Promise; diff --git a/extensions/resource-deployment/src/services/tools/toolBase.ts b/extensions/resource-deployment/src/services/tools/toolBase.ts index 88bbc0c8e5..1d01eb9b67 100644 --- a/extensions/resource-deployment/src/services/tools/toolBase.ts +++ b/extensions/resource-deployment/src/services/tools/toolBase.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { EOL } from 'os'; import * as path from 'path'; -import { SemVer, compare } from 'semver'; +import { SemVer, compare as SemVerCompare } from 'semver'; import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; import { Command, ITool, OsDistribution, ToolStatus, ToolType } from '../../interfaces'; @@ -298,13 +298,12 @@ export abstract class ToolBase implements ITool { } } - isSameOrNewerThan(version: string): boolean { - return this._version ? compare(this._version, new SemVer(version)) >= 0 : false; + isSameOrNewerThan(version?: string): boolean { + return !version || (this._version ? SemVerCompare(this._version, version) >= 0 : false); } private _status: ToolStatus = ToolStatus.NotInstalled; private _version?: SemVer; private _statusDescription?: string; private _installationPath!: string; - } diff --git a/extensions/resource-deployment/src/ui/resourceTypePickerDialog.ts b/extensions/resource-deployment/src/ui/resourceTypePickerDialog.ts index 4f8fe345cb..512cb9a2e7 100644 --- a/extensions/resource-deployment/src/ui/resourceTypePickerDialog.ts +++ b/extensions/resource-deployment/src/ui/resourceTypePickerDialog.ts @@ -226,7 +226,7 @@ export class ResourceTypePickerDialog extends DialogBase { if (this.toolRefreshTimestamp !== currentRefreshTimestamp) { return; } - let autoInstallRequired = false; + let installationRequired = false; let minVersionCheckFailed = false; const messages: string[] = []; this._toolsTable.data = toolRequirements.map(toolReq => { @@ -244,22 +244,24 @@ export class ResourceTypePickerDialog extends DialogBase { minVersionCheckFailed = true; messages.push(localize('deploymentDialog.ToolDoesNotMeetVersionRequirement', "'{0}' [ {1} ] does not meet the minimum version requirement, please uninstall it and restart Azure Data Studio.", tool.displayName, tool.homePage)); } - autoInstallRequired = autoInstallRequired || tool.autoInstallRequired; + installationRequired = installationRequired || tool.autoInstallRequired; return [tool.displayName, tool.description, tool.displayStatus, tool.fullVersion || '', toolReq.version || '']; }); - this._installToolButton.hidden = !autoInstallRequired; - this._dialogObject.okButton.enabled = messages.length === 0 && !autoInstallRequired; + this._installToolButton.hidden = minVersionCheckFailed || !installationRequired; + this._dialogObject.okButton.enabled = messages.length === 0 && !minVersionCheckFailed && !installationRequired; if (messages.length !== 0) { if (!minVersionCheckFailed) { messages.push(localize('deploymentDialog.VersionInformationDebugHint', "You will need to restart Azure Data Studio if the tools are installed by yourself after Azure Data Studio is launched to pick up the updated PATH environment variable. You may find additional details in the debug console by running the 'Toggle Developer Tools' command in the Azure Data Studio Command Palette.")); } this._dialogObject.message = { level: azdata.window.MessageLevel.Error, - text: localize('deploymentDialog.ToolCheckFailed', "Some required tools are not installed or do not meet the minimum version requirement."), - description: messages.join(EOL) + text: [ + localize('deploymentDialog.ToolCheckFailed', "Some required tools are not installed or do not meet the minimum version requirement."), + ...messages + ].join(EOL) }; - } else if (autoInstallRequired) { + } else if (installationRequired) { let infoText: string[] = [localize('deploymentDialog.InstallToolsHint', "Some required tools are not installed, you can click the \"{0}\" button to install them.", this._installToolButton.label)]; const informationalMessagesArray = this._tools.reduce((returnArray, currentTool) => { if (currentTool.needsInstallation) {