feat(kube): Kubernetes UI — FreeLens v5 feature parity #85

Merged
sarman merged 6 commits from feat/kube-ui-feature-parity into master 2026-06-09 02:05:06 +00:00
Owner

Summary

  • Navigation restructure: 13-section hierarchy matching FreeLens/Lens v5 layout (Cluster, Nodes, Workloads, Config, Network, Storage, Namespaces, Events, Helm, Access Control, Custom Resources) with correct groupings
  • 44 new Rust commands: list_replicationcontrollers, list_poddisruptionbudgets, list_leases, list_crds, list_namespaces_resource, attach_pod, force_delete_resource, helm_list_releases, helm_upgrade, helm_rollback, helm_uninstall, get_resource_yaml, stream_pod_logs, suspend_cronjob, trigger_cronjob, and 29 others — all wired through lib.rs invoke handler
  • Helm binary: scripts/download-helm.sh + src-tauri/src/shell/helm.rs bundled helm binary management mirroring the kubectl pattern
  • 15 new React components: HelmChartList, HelmReleaseList, CrdList, CustomResourceList, WorkloadOverview, LogStreamPanel, ShellExecModal, AttachModal, LogsModal, ScaleModal, ConfirmDeleteDialog, ResourceActionMenu, EndpointList, EndpointSliceList, NamespaceList, plus stubs for all new resource types
  • Resource action menus: state-aware context menus on all resource types; Force Delete only shown for Running/Pending pods; all destructive actions gated behind ConfirmDeleteDialog
  • Log streaming: LogStreamPanel with follow toggle, timestamps toggle, text search/filter, and download
  • 363 Rust tests (all passing); 268 frontend tests (all passing)
  • Fix stale nav section names in KubernetesPage.test.tsx ("Services & Networking""Network", "Config & Storage""Config" + "Storage")
  • Add .claude/ to ESLint ignores

Test plan

  • cargo test → 363 pass
  • npm run test:run → 268 pass
  • npx tsc --noEmit → 0 errors
  • npx eslint . --max-warnings 0 → 0 warnings
  • cargo fmt --check → clean
  • cargo clippy -- -D warnings → 0 warnings
  • Manual: all 14+ new nav items render without crashing against a live cluster
  • Manual: Pod action menu shows Shell, Logs, Attach, Edit, Delete; Force Delete hidden for Succeeded/Failed pods
  • Manual: Delete confirmation dialog shows resource name before proceeding
  • Manual: Log streaming follows in real time; search highlights matches; download works
  • Manual: Helm Charts list and Releases list render; Upgrade/Rollback/Uninstall actions work
  • Manual: CRD list renders; clicking a CRD shows its custom resource instances
## Summary - **Navigation restructure**: 13-section hierarchy matching FreeLens/Lens v5 layout (Cluster, Nodes, Workloads, Config, Network, Storage, Namespaces, Events, Helm, Access Control, Custom Resources) with correct groupings - **44 new Rust commands**: `list_replicationcontrollers`, `list_poddisruptionbudgets`, `list_leases`, `list_crds`, `list_namespaces_resource`, `attach_pod`, `force_delete_resource`, `helm_list_releases`, `helm_upgrade`, `helm_rollback`, `helm_uninstall`, `get_resource_yaml`, `stream_pod_logs`, `suspend_cronjob`, `trigger_cronjob`, and 29 others — all wired through `lib.rs` invoke handler - **Helm binary**: `scripts/download-helm.sh` + `src-tauri/src/shell/helm.rs` bundled helm binary management mirroring the kubectl pattern - **15 new React components**: `HelmChartList`, `HelmReleaseList`, `CrdList`, `CustomResourceList`, `WorkloadOverview`, `LogStreamPanel`, `ShellExecModal`, `AttachModal`, `LogsModal`, `ScaleModal`, `ConfirmDeleteDialog`, `ResourceActionMenu`, `EndpointList`, `EndpointSliceList`, `NamespaceList`, plus stubs for all new resource types - **Resource action menus**: state-aware context menus on all resource types; Force Delete only shown for Running/Pending pods; all destructive actions gated behind `ConfirmDeleteDialog` - **Log streaming**: `LogStreamPanel` with follow toggle, timestamps toggle, text search/filter, and download - **363 Rust tests** (all passing); **268 frontend tests** (all passing) - Fix stale nav section names in `KubernetesPage.test.tsx` (`"Services & Networking"` → `"Network"`, `"Config & Storage"` → `"Config"` + `"Storage"`) - Add `.claude/` to ESLint ignores ## Test plan - [ ] `cargo test` → 363 pass - [ ] `npm run test:run` → 268 pass - [ ] `npx tsc --noEmit` → 0 errors - [ ] `npx eslint . --max-warnings 0` → 0 warnings - [ ] `cargo fmt --check` → clean - [ ] `cargo clippy -- -D warnings` → 0 warnings - [ ] Manual: all 14+ new nav items render without crashing against a live cluster - [ ] Manual: Pod action menu shows Shell, Logs, Attach, Edit, Delete; Force Delete hidden for Succeeded/Failed pods - [ ] Manual: Delete confirmation dialog shows resource name before proceeding - [ ] Manual: Log streaming follows in real time; search highlights matches; download works - [ ] Manual: Helm Charts list and Releases list render; Upgrade/Rollback/Uninstall actions work - [ ] Manual: CRD list renders; clicking a CRD shows its custom resource instances
sarman added 6 commits 2026-06-09 01:48:45 +00:00
- Apply cargo fmt to src-tauri/src/commands/kube.rs (CI was failing)
- Update pr-review.yml to use qwen3-coder-next model via liteLLM
- Add TICKET-kube-ui-feature-parity.md gap analysis for FreeLens parity

Co-Authored-By: TFTSR Engineering <noreply@tftsr.com>
Add interfaces and invoke() wrappers for new resource types, Helm, CRDs,
resource actions (attach, force-delete, describe, get-yaml, log streaming),
and workload controls (restart/scale statefulset/daemonset/replicaset, cronjob ops).

Co-Authored-By: TFTSR Engineering <noreply@tftsr.com>
New list commands: list_replicationcontrollers, list_poddisruptionbudgets,
list_priorityclasses, list_runtimeclasses, list_leases,
list_mutatingwebhookconfigurations, list_validatingwebhookconfigurations,
list_endpoints, list_endpointslices, list_ingressclasses,
list_namespaces_resource, list_crds, list_custom_resources

New action commands: force_delete_resource, describe_resource,
get_resource_yaml, attach_pod, restart_statefulset, restart_daemonset,
scale_statefulset, scale_replicaset, scale_replicationcontroller,
suspend_cronjob, resume_cronjob, trigger_cronjob,
create_namespace, delete_namespace

Log streaming: stream_pod_logs (tokio task + Tauri events), stop_log_stream

Helm: helm_list_repos, helm_add_repo, helm_update_repos, helm_search_repo,
helm_list_releases, helm_uninstall, helm_rollback

Infrastructure: shell/helm.rs locate_helm(), scripts/download-helm.sh,
AppState.log_streams for stream lifecycle management

363/363 tests passing, zero clippy warnings

Co-Authored-By: TFTSR Engineering <noreply@tftsr.com>
Navigation:
- Restructure to match requested layout: Cluster, Nodes, Workloads, Config,
  Network, Storage, Namespaces, Events, Helm, Access Control, Custom Resources
- Workloads: add Overview dashboard and Replication Controllers
- Config: add PDB, PriorityClass, RuntimeClass, Lease, Mutating/Validating Webhooks
- Network: add Endpoints, EndpointSlices, IngressClasses; move Port Forwarding here
- Helm and Custom Resources sections wired through

New shared components:
- ResourceActionMenu: state-aware MoreHorizontal dropdown
- ConfirmDeleteDialog: confirmation guard for all destructive operations
- ScaleModal: replica count dialog (Deployments, StatefulSets, ReplicaSets, RCs)
- LogsModal: container log viewer replacing PodList inline dialog
- ShellExecModal: kubectl exec -it with container and shell selector
- AttachModal: kubectl attach -it with container selector

New resource list components (12):
ReplicationControllerList, PodDisruptionBudgetList, PriorityClassList,
RuntimeClassList, LeaseList, MutatingWebhookList, ValidatingWebhookList,
EndpointList, EndpointSliceList, IngressClassList, NamespaceList,
WorkloadOverview

New advanced components (5):
LogStreamPanel (Tauri-event streaming, follow/search/download),
HelmChartList, HelmReleaseList, CrdList, CustomResourceList

Updated 24 existing list components with context-appropriate action menus:
- Pods: Logs, Shell, Attach, Edit, Delete, Force Delete (state-aware)
- Deployments: Scale, Restart, Rollback, Edit, Delete
- StatefulSets/ReplicaSets: Scale, Restart/none, Edit, Delete
- DaemonSets: Restart, Edit, Delete
- Jobs: Edit, Delete
- CronJobs: Suspend/Resume (state-aware), Trigger, Edit, Delete
- Services/Ingresses/ConfigMaps/Secrets/HPAs/PVCs/PVs/StorageClasses/
  NetworkPolicies/ResourceQuotas/LimitRanges: Edit, Delete
- Nodes: Cordon/Uncordon (state-aware), Drain, Edit
- All RBAC resources: Edit, Delete

Co-Authored-By: TFTSR Engineering <noreply@tftsr.com>
Co-Authored-By: TFTSR Engineering <noreply@tftsr.com>
test(kube): fix stale nav section assertions + add research docs
Some checks failed
PR Review Automation / review (pull_request) Has been cancelled
Test / frontend-tests (pull_request) Successful in 1m40s
Test / frontend-typecheck (pull_request) Successful in 1m43s
Test / rust-fmt-check (pull_request) Successful in 10m59s
Test / rust-clippy (pull_request) Successful in 12m55s
Test / rust-tests (pull_request) Successful in 14m30s
7a6a47a21b
KubernetesPage.test.tsx had two stale section heading assertions from
before the nav restructure:
- "Services & Networking" → "Network"
- "Config & Storage" → "Config" + "Storage" (now separate sections)
Also renamed the matching it() description for accuracy.

eslint.config.js: add .claude/ to ignores (session memory dir).

Adds FreeLens feature inventory (md + json) generated during
gap analysis research for this feature parity work.
sarman merged commit 3f83486b9f into master 2026-06-09 02:05:06 +00:00
sarman deleted branch feat/kube-ui-feature-parity 2026-06-09 02:05:06 +00:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sarman/tftsr-devops_investigation#85
No description provided.