feat: show docker version

Show the version of Docker CLI same as way as for Podman CLI.

In the future, they might be able to show the server version.

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
This commit is contained in:
Anders F Björklund 2023-06-25 10:14:59 +02:00 committed by Florent BENOIT
parent 2ab0be7401
commit 007e32f2f5
2 changed files with 77 additions and 0 deletions

View file

@ -0,0 +1,61 @@
/**********************************************************************
* Copyright (C) 2024 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/
import * as extensionApi from '@podman-desktop/api';
const macosExtraPath = '/usr/local/bin:/opt/homebrew/bin:/opt/local/bin';
export function getInstallationPath(): string {
const env = process.env;
if (extensionApi.env.isMac) {
if (!env.PATH) {
return macosExtraPath;
} else {
return env.PATH.concat(':').concat(macosExtraPath);
}
} else {
return env.PATH;
}
}
export function getDockerCli(): string {
if (extensionApi.env.isWindows) {
return 'docker.exe';
}
return 'docker';
}
export interface InstalledDocker {
version: string;
}
export async function getDockerInstallation(): Promise<InstalledDocker | undefined> {
try {
let { stdout: versionOut } = await extensionApi.process.exec(getDockerCli(), ['--version']);
if (!versionOut.startsWith('Docker')) {
// could be the podman-docker wrapper script
return undefined;
}
versionOut = versionOut.replace(/, build .*$/, '');
const versionArr = versionOut.split(' ');
const version = versionArr[versionArr.length - 1];
return { version };
} catch (err) {
// no docker binary
return undefined;
}
}

View file

@ -22,6 +22,7 @@ import * as http from 'node:http';
let stopLoop = false;
import { getDockerInstallation } from './docker-cli';
let socketPath: string;
let provider: extensionApi.Provider;
let providerState: extensionApi.ProviderConnectionStatus = 'stopped';
@ -108,6 +109,21 @@ async function monitorDaemon(extensionContext: extensionApi.ExtensionContext): P
}
async function updateProvider(extensionContext: extensionApi.ExtensionContext) {
try {
const installedDocker = await getDockerInstallation();
if (!installedDocker) {
provider.updateStatus('not-installed');
} else if (installedDocker.version) {
provider.updateVersion(installedDocker.version);
// update provider status if someone has installed docker externally
if (provider.status === 'not-installed') {
provider.updateStatus('installed');
}
}
} catch (error) {
// ignore the update
}
// check if the daemon is alive
const isAlive = await isDockerDaemonAlive(socketPath);