106 lines
2.1 KiB
Go
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..."
|
|
}
|