Cluster config backup archives kubeconfig, talosconfig, config.yaml,
secrets.yaml, and Talos node configs for disaster recovery. Appears as
"Cluster Config" row on the backups page with its own detail page.
Backup schedules are now shown on each app's individual backup page
instead of the main backups overview, with active operations visible
per-app for real-time feedback during backup/restore.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RegisterClient was async (channel-based), so Broadcast could be processed
before the client was registered in the map, causing flaky test failures.
Register directly under the mutex instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Handle unchecked errors (errcheck), fix nil-deref false positives (SA5011),
suppress deprecated-but-functional API warnings (SA1019), remove unused code,
and use fmt.Fprintf over WriteString(fmt.Sprintf(...)).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Updated `checkSourceDrift` to read version from app.yaml and corresponding slot manifest.
- Introduced `computeUpgradePlanFromMeta` to handle upgrade plans using centralized routing rules from app.yaml.
- Enhanced `ComputeUpgradePlan` to fallback to old-style manifest.yaml if app.yaml is not present.
- Added tests for both new and old upgrade plan computation methods, ensuring backward compatibility.
- Improved handling of upgrade paths, including waypoint resolution and circular dependency detection.
- Updated AppSidebar to rename "Available Apps" to "App Directory" for better user understanding.
- Refactored AppsComponent to streamline app data handling and improve loading states.
- Introduced AppDirectoryPage to provide a dedicated view for browsing available apps.
- Added AppInfoPage to display detailed information about individual apps, including README and configuration options.
- Implemented useCatalogReadme hook to fetch README content for apps.
- Enhanced API service to include a method for fetching app README files.
- Improved error handling and loading states across components for better user experience.
- Deleted ServiceLifecycleBadges, ServiceLogViewer, ServiceLogsDialog, ServiceStatusBadge, and ServiceStatusDialog components.
- Removed useServices and useServiceStatus hooks.
- Cleaned up services API by removing servicesApi and related types.
- Updated index files to reflect the removal of service components and hooks.
Config-only apps (e.g., SMTP) have no kustomization.yaml or install.sh — they only
provide configuration for other apps. Previously they showed a permanent yellow dot
because their status was always "added". Now the API detects config-only apps from
directory contents and the frontend suppresses status indicators for them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SMTP is now managed as an infrastructure app (apps.smtp.*), not as a
cloud-level config (cloud.smtp.*). Remove the SMTP struct from the API
config, the SMTP card from the advanced config page, and update tests
and documentation to reference the new location.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added 'operation:cancelled' event handling in useGlobalSSE and useOperations hooks.
- Implemented useCancelOperation hook for cancelling operations with immediate UI feedback.
- Enhanced useSchedules hook to utilize SSE for schedule updates and improved schedule management.
- Updated BackupsPage to include schedule management UI and display active operations.
- Refactored operations handling to streamline fetching and filtering of operations.
- Improved backup and recovery plan handling with new health summary and recovery plan tracking.
- Updated API services for schedules and operations to align with new backend endpoints.
The Go structs used snake_case JSON tags (kubernetes_version, control_plane_nodes, etc.)
but the frontend expected camelCase, with no conversion layer. This broke the Kubernetes
version, node counts, and node status display on the dashboard and cluster pages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Continuation of blue-green backup work. Includes recovery plan
generation, active deployment tracking, and strategy updates for
postgres, mysql, longhorn, and config. Incomplete — branched to
make way for services/apps convergence.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Implemented `node upgrade <hostname> <version>` command to upgrade a node's Talos version.
- Implemented `node rollback <hostname>` command to rollback a node to its previous Talos version.
- Added corresponding API calls for node upgrade and rollback in the nodes service.
- Enhanced CLI help documentation for new commands.
feat: introduce Talos utilities in CLI
- Added `talos` command group for Talos Image Factory utilities.
- Implemented `talos versions` command to list available Talos versions.
- Implemented `talos validate <schematic-id> <version>` command to validate schematic compatibility.
- Implemented `talos client` command to show talosctl client information and upgrade functionality.
feat: integrate Talos version selection in UI components
- Created `TalosVersionSelect` component for selecting Talos versions.
- Updated `CentralComponent`, `ClusterSettings`, `NodeUpgradeDialog`, and asset pages to use the new version selection component.
- Added validation feedback for schematic compatibility in relevant components.
fix: update entity tile to support version display
- Modified `EntityTile` component to accept React nodes for descriptions, allowing for version display alongside IP addresses.
chore: refactor API hooks for Talos
- Created new hooks for fetching Talos versions, validating schematics, and managing Talos client information and upgrades.
- Updated existing services and components to utilize the new hooks for improved data management and reactivity.
- Implemented ResolveNamespace method to determine the Kubernetes namespace for an app based on priority: config.yaml, manifest, or appName.
- Updated AppsGetLogs and AppsGetEvents handlers to use the resolved namespace.
- Modified backup process to correctly reference the app's namespace when copying secrets.
- Added unit tests for ResolveNamespace and copyDir functions to ensure correct behavior.
- Removed the ClusterServicesComponent and integrated its functionality into the AppsComponent.
- Updated AppSidebar to reflect the removal of cluster services navigation.
- Adjusted AppsComponent to handle infrastructure services, including fetching, compiling, and deploying.
- Enhanced AppDetailPanel to support infrastructure-specific actions and lifecycle status display.
- Modified routing to redirect cluster-related paths to the apps section, ensuring proper phase checks.
- Updated phase guard logic to accommodate multiple required phases for app management.
- Cleaned up unused ServiceCard component and related imports.
- Adjusted app status types to include category for better categorization of apps.
refactor(logs): Enhance pod retrieval logic in GetLogs and StreamLogs methods
refactor(backup): Update JSON unmarshalling to marshal response data before parsing