diff --git a/cmd/dbc/main.go b/cmd/dbc/main.go index 45117db..fa13ed7 100644 --- a/cmd/dbc/main.go +++ b/cmd/dbc/main.go @@ -20,6 +20,7 @@ import ( "os" "slices" + "github.com/Masterminds/semver/v3" "github.com/alexflint/go-arg" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -226,6 +227,14 @@ func main() { prog = tea.NewProgram(m) } + latestVer, err := dbc.GetLatestDbcVersion() + if !args.Quiet && dbc.Version != "(devel)" && err == nil { + if semver.MustParse(dbc.Version).LessThan(latestVer) { + fmt.Printf(descStyle.Render("dbc version %s is available! You are using version %s. Please upgrade.\n\n"), + latestVer, dbc.Version) + } + } + if m, err = prog.Run(); err != nil { fmt.Fprintln(os.Stderr, "Error running program:", err) os.Exit(1) diff --git a/drivers.go b/drivers.go index 28bcf08..0fe61a3 100644 --- a/drivers.go +++ b/drivers.go @@ -502,3 +502,17 @@ func SignedByColumnar(lib, sig io.Reader) error { return result.SignatureError() } + +func GetLatestDbcVersion() (*semver.Version, error) { + resp, err := makereq("https://dbc.columnar.tech") + if err != nil { + return nil, fmt.Errorf("failed to fetch latest dbc version: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusNoContent { + return nil, fmt.Errorf("failed to fetch latest dbc version: %s", resp.Status) + } + + return semver.NewVersion(resp.Header.Get("x-dbc-latest")) +}