talos-upgrade/pkg/upgrade/loadStatus.go
2023-10-20 17:28:58 -04:00

106 lines
2.1 KiB
Go

package upgrade
import (
"git.cycore.io/scm/talos-upgrade/pkg/palette"
"git.cycore.io/scm/talos-upgrade/pkg/release"
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/google/go-github/v55/github"
"github.com/pkg/errors"
)
type LoadState struct {
Core *CoreState
progressPercent float64
Err error
spinner spinner.Model
textStyle func(...string) string
spinnerStyle lipgloss.Style
helpStyle func(...string) string
}
func (l *LoadState) Init() tea.Cmd {
l.spinner = spinner.New(
spinner.WithSpinner(spinner.Globe),
)
l.textStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(palette.Foreground)).Render
l.spinnerStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(palette.Blue))
l.helpStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(palette.BrightBlack)).Render
go func() {
var err error
defer func() {
l.progressPercent = 1.0
l.Err = err
}()
if err = l.Core.UpdateNodeList(l.Core.ctx); err != nil {
err = errors.Wrap(err, "failed to update node list")
return
}
l.progressPercent = 0.5
if l.Core.CurrentReleases == nil {
var list []*github.RepositoryRelease
//list, err := release.GetAfter(s.Core.ctx, s.Core.LowestTalosVersion)
list, err = release.GetAll(l.Core.ctx)
if err != nil {
err = errors.Wrap(err, "failed to load current Talos releases")
return
}
l.Core.CurrentReleases = list
}
}()
return l.spinner.Tick
}
func (l *LoadState) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
return l, tea.Quit
case tea.WindowSizeMsg:
l.Core.Width = msg.Width
l.Core.Height = msg.Height
return l, nil
case spinner.TickMsg:
if l.progressPercent == 1.0 {
return NewSelectRelease(l.Core), nil
}
var cmd tea.Cmd
l.spinner, cmd = l.spinner.Update(msg)
return l, cmd
default:
if l.progressPercent == 1.0 {
return NewSelectRelease(l.Core), nil
}
return l, nil
}
}
func (l *LoadState) View() string {
pad := " "
return "\n" +
pad + l.spinner.View() + " loading system status..."
}