mirror of
https://github.com/podman-desktop/podman-desktop
synced 2026-05-24 10:18:53 +00:00
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:
parent
2ab0be7401
commit
007e32f2f5
2 changed files with 77 additions and 0 deletions
61
extensions/docker/src/docker-cli.ts
Normal file
61
extensions/docker/src/docker-cli.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue