Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ jobs:
sed -i "s#version\":\ \"\(.*\)\",#version\":\ \"${{ steps.TAG_UTIL.outputs.extVersion }}\",#g" package.json
sed -i "s#version\":\ \"\(.*\)\",#version\":\ \"${{ steps.TAG_UTIL.outputs.extVersion }}\",#g" packages/extension/package.json
sed -i "s#version\":\ \"\(.*\)\",#version\":\ \"${{ steps.TAG_UTIL.outputs.extVersion }}\",#g" packages/webview/package.json
sed -i "s#version\":\ \"\(.*\)\",#version\":\ \"${{ steps.TAG_UTIL.outputs.extVersion }}\",#g" packages/api/package.json
sed -i "s#\(ghcr.io/podman-desktop/podman-desktop-extension-kubernetes-dashboard-builder:\)next#\1${{ steps.TAG_UTIL.outputs.extVersion }}#g" build/Containerfile

git add package.json packages/extension/package.json packages/webview/package.json build/Containerfile
Expand Down
4 changes: 3 additions & 1 deletion build/Containerfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ RUN mkdir /opt/app-root/extension && \
mkdir -p /opt/app-root/extension/packages/rpc/ && \
cp packages/rpc/package.json /opt/app-root/extension/packages/rpc/ && \
mkdir -p /opt/app-root/extension/packages/channels/ && \
cp packages/channels/package.json /opt/app-root/extension/packages/channels/
cp packages/channels/package.json /opt/app-root/extension/packages/channels/ && \
mkdir -p /opt/app-root/extension/packages/api/ && \
cp packages/api/package.json /opt/app-root/extension/packages/api/

COPY LICENSE /opt/app-root/extension/
COPY README.md /opt/app-root/extension/
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
},
"devDependencies": {
"@eslint/compat": "^1.4.1",
"@tsconfig/strictest": "^2.0.6",
"@typescript-eslint/eslint-plugin": "^8.46.1",
"@typescript-eslint/parser": "^8.30.1",
"@vitest/coverage-v8": "^3.2.2",
Expand Down
23 changes: 23 additions & 0 deletions packages/api/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "@podman-desktop/kubernetes-dashboard-extension-api",
"version": "0.2.0-next",
"description": "API for Kubernetes Dashboard extension",
"repository": "https://github.com/podman-desktop/extension-kubernetes-dashboard",
"publishConfig": {
"provenance": true,
"access": "public"
},
"license": "Apache-2.0",
"types": "./src/kubernetes-dashboard-extension-api.d.ts",
"files": [
"src"
],
"scripts": {
"prepare": "",
"clean": "rimraf lib *.tsbuildinfo",
"build": "",
"watch": "",
"publish:next": "pnpm publish --registry=https://registry.npmjs.org/ --no-git-tag-version --new-version 0.0.1-\"$(date +%s)\""
},
"dependencies": {}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**********************************************************************
* Copyright (C) 2024 Red Hat, Inc.
* Copyright (C) 2025 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.
Expand All @@ -16,6 +16,26 @@
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/

import type { Disposable } from '@podman-desktop/api';

export interface ContextHealth {
contextName: string;
// is the health of the cluster being checked?
checking: boolean;
// was the health check successful?
reachable: boolean;
// is one of the informers marked offline (disconnect after being connected, the cache still being populated)
offline: boolean;
// description in case of error (other than health check)
// currently detected errors:
// - user.exec.command not found
errorMessage?: string;
}

export interface ContextsHealthsInfo {
healths: ContextHealth[];
}

export interface ContextPermission {
contextName: string;
// the resource name is a generic string type and not a string literal type, as we want to handle CRDs names
Expand All @@ -33,3 +53,39 @@ export interface ContextPermission {
// For exemple on Kind cluster, a reason is given only when the access is allowed, no reason is done for denial.
reason?: string;
}

export interface ContextsPermissionsInfo {
permissions: ContextPermission[];
}

export interface AvailableContextsInfo {
contextNames: string[];
}

export interface CurrentContextInfo {
contextName?: string;
namespace?: string;
}

export interface ResourceCount {
contextName: string;
resourceName: string;
count: number;
}

export interface ResourcesCountInfo {
counts: ResourceCount[];
}

export interface KubernetesDashboardSubscriber {
onContextsHealth(listener: (event: ContextsHealthsInfo) => void): Disposable;
onContextsPermissions(listener: (event: ContextsPermissionsInfo) => void): Disposable;
onAvailableContexts(listener: (event: AvailableContextsInfo) => void): Disposable;
onCurrentContext(listener: (event: CurrentContextInfo) => void): Disposable;
onResourcesCount(listener: (event: ResourcesCountInfo) => void): Disposable;
dispose(): void;
}

export interface KubernetesDashboardExtensionApi {
getSubscriber(): KubernetesDashboardSubscriber;
}
13 changes: 13 additions & 0 deletions packages/api/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": {
"target": "esnext",
"module": "node16",
"baseUrl": ".",
"types": ["node"],
"strict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*.d.ts"]
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,26 @@
*
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/
/* eslint-env node */
import { defineConfig } from 'vite';

import type { ContextPermission } from './kubernetes-contexts-permissions';
const PACKAGE_ROOT = __dirname;

export interface ContextsPermissionsInfo {
permissions: ContextPermission[];
}
// https://vitejs.dev/config/
export default defineConfig({
mode: process.env.MODE,
root: PACKAGE_ROOT,
base: '',
server: {
fs: {
strict: true,
},
},
build: {
sourcemap: true,
outDir: 'dist',
assetsDir: '.',
emptyOutDir: true,
reportCompressedSize: false,
},
});
1 change: 1 addition & 0 deletions packages/channels/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
},
"devDependencies": {
"@kubernetes-dashboard/rpc": "workspace:*",
"@podman-desktop/kubernetes-dashboard-extension-api": "workspace:*",
"vite-plugin-dts": "^4.5.4"
}
}
12 changes: 7 additions & 5 deletions packages/channels/src/channels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,22 @@ import type { PortForwardApi } from './interface/port-forward-api';
import type { SubscribeApi } from './interface/subscribe-api';
import type { SystemApi } from './interface/system-api';
import type { ActiveResourcesCountInfo } from './model/active-resources-count-info';
import type { AvailableContextsInfo } from './model/available-contexts-info';
import type { ContextsHealthsInfo } from './model/contexts-healths-info';
import type { ContextsPermissionsInfo } from './model/contexts-permissions-info';
import type { CurrentContextInfo } from './model/current-context-info';
import type { EndpointsInfo } from './model/endpoints-info';
import type { KubernetesProvidersInfo } from './model/kubernetes-providers-info';
import type { PodLogsChunk } from './model/pod-logs-chunk';
import type { PodTerminalChunk } from './model/pod-terminal-chunk';
import type { PortForwardsInfo } from './model/port-forward-info';
import type { ResourceDetailsInfo } from './model/resource-details-info';
import type { ResourceEventsInfo } from './model/resource-events-info';
import type { ResourcesCountInfo } from './model/resources-count-info';
import type { UpdateResourceInfo } from './model/update-resource-info';
import { createRpcChannel } from '@kubernetes-dashboard/rpc';
import type {
AvailableContextsInfo,
ContextsHealthsInfo,
ContextsPermissionsInfo,
CurrentContextInfo,
ResourcesCountInfo,
} from '@podman-desktop/kubernetes-dashboard-extension-api';

// RPC channels (used by the webview to send requests to the extension)
export const API_CONTEXTS = createRpcChannel<ContextsApi>('ContextsApi');
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/src/model/active-resources-count-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/

import type { ResourceCount } from './kubernetes-resource-count';
import type { ResourceCount } from '@podman-desktop/kubernetes-dashboard-extension-api';

export interface ActiveResourcesCountInfo {
counts: ResourceCount[];
Expand Down
21 changes: 0 additions & 21 deletions packages/channels/src/model/available-contexts-info.ts

This file was deleted.

22 changes: 0 additions & 22 deletions packages/channels/src/model/current-context-info.ts

This file was deleted.

8 changes: 0 additions & 8 deletions packages/channels/src/model/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,13 @@
***********************************************************************/

export * from './active-resources-count-info';
export * from './available-contexts-info';
export * from './context-resource-events';
export * from './context-resources-details';
export * from './context-resources-items';
export * from './contexts-healths-info';
export * from './contexts-permissions-info';
export * from './current-context-info';
export * from './endpoint';
export * from './endpoints-info';
export * from './endpoints-options';
export * from './kubernetes-contexts-healths';
export * from './kubernetes-contexts-permissions';
export * from './kubernetes-providers-info';
export * from './kubernetes-resource-count';
export * from './kubernetes-troubleshooting';
export * from './openshift-types';
export * from './pod-logs-chunk';
Expand All @@ -41,7 +34,6 @@ export * from './resource-details-info';
export * from './resource-details-options';
export * from './resource-events-info';
export * from './resource-events-options';
export * from './resources-count-info';
export * from './target-ref';
export * from './update-resource-info';
export * from './update-resource-options';
31 changes: 0 additions & 31 deletions packages/channels/src/model/kubernetes-contexts-healths.ts

This file was deleted.

23 changes: 0 additions & 23 deletions packages/channels/src/model/kubernetes-resource-count.ts

This file was deleted.

3 changes: 2 additions & 1 deletion packages/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
"vite": "^7.1",
"vitest": "^3.1",
"isomorphic-ws": "^5.0.0",
"@types/ws": "^8.18.0"
"@types/ws": "^8.18.0",
"@podman-desktop/kubernetes-dashboard-extension-api": "workspace:*"
},
"dependencies": {
"@kubernetes/client-node": "^1.4.0",
Expand Down
Loading