package upgrade import ( "context" "fmt" "git.cycore.io/scm/talos-upgrade/pkg/node" "git.cycore.io/scm/talos-upgrade/pkg/palette" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/pkg/errors" ) type Node struct { core *CoreState node *node.Node } func (n *Node) Init() tea.Cmd { return nil } func (n *Node) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return nil, nil } func (n *Node) View() string { ver, err := n.node.Version() if err != nil { ver = "Unknown" } if ver == n.core.SelectedVersion { return upgradeDone(ver) } return ver } func (c *CoreState) UpdateNodeList(ctx context.Context) error { list, err := node.GetNodes(ctx, c.TalosClient) if err != nil { return err } c.Nodes = list lowest, err := node.LowestVersion(c.Nodes) if err != nil { return errors.Wrap(err, "failed to determiner lowest installed Talos version") } c.LowestTalosVersion = lowest highest, err := node.HighestVersion(c.Nodes) if err != nil { return errors.Wrap(err, "failed to determiner highest installed Talos version") } c.HighestTalosVersion = highest return nil } func checkMark() string { return lipgloss.NewStyle().SetString("✓"). Foreground(lipgloss.Color(palette.BrightGreen)). PaddingRight(1). String() } func upgradeDone(version string) string { verString := lipgloss.NewStyle(). SetString(version). Foreground(lipgloss.Color(palette.Green)). PaddingRight(1). String() return fmt.Sprintf("%s %s", checkMark(), verString) } func upgradeActive() string { return lipgloss.NewStyle().SetString("upgrading..."). Foreground(lipgloss.Color(palette.Yellow)). PaddingRight(1). String() }