Detailed changes
@@ -5,7 +5,6 @@ go 1.25.0
require (
github.com/JohannesKaufmann/html-to-markdown v1.6.0
github.com/MakeNowJust/heredoc v1.0.0
- github.com/Masterminds/semver/v3 v3.4.0
github.com/PuerkitoBio/goquery v1.10.3
github.com/alecthomas/chroma/v2 v2.20.0
github.com/anthropics/anthropic-sdk-go v1.13.0
@@ -18,8 +18,6 @@ github.com/JohannesKaufmann/html-to-markdown v1.6.0 h1:04VXMiE50YYfCfLboJCLcgqF5
github.com/JohannesKaufmann/html-to-markdown v1.6.0/go.mod h1:NUI78lGg/a7vpEJTz/0uOcYMaibytE4BUOQS8k78yPQ=
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
-github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
-github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk=
github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo=
github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y=
@@ -353,7 +353,7 @@ func (app *App) checkForUpdates(ctx context.Context) {
checkCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
info, err := update.Check(checkCtx)
- if err != nil || info == nil || !info.Available {
+ if err != nil || !info.Available() {
return
}
app.events <- pubsub.UpdateAvailableMsg{
@@ -9,7 +9,6 @@ import (
"strings"
"time"
- "github.com/Masterminds/semver/v3"
"github.com/charmbracelet/crush/internal/version"
)
@@ -23,35 +22,28 @@ type Info struct {
CurrentVersion string
LatestVersion string
ReleaseURL string
- Available bool
}
+func (i Info) Available() bool { return i.CurrentVersion != i.LatestVersion }
+
// Check checks if a new version is available.
-func Check(ctx context.Context) (*Info, error) {
- info := &Info{
+func Check(ctx context.Context) (Info, error) {
+ info := Info{
CurrentVersion: version.Version,
+ LatestVersion: version.Version,
}
- cv, err := semver.NewVersion(version.Version)
- if err != nil {
- // its devel, unknown, etc
+ if info.CurrentVersion == "devel" || info.CurrentVersion == "unknown" {
return info, nil
}
release, err := fetchLatestRelease(ctx)
if err != nil {
- return nil, fmt.Errorf("failed to fetch latest release: %w", err)
- }
-
- lv, err := semver.NewVersion(release.TagName)
- if err != nil {
- return nil, fmt.Errorf("failed to parse latest version: %w", err)
+ return info, fmt.Errorf("failed to fetch latest release: %w", err)
}
info.LatestVersion = strings.TrimPrefix(release.TagName, "v")
info.ReleaseURL = release.HTMLURL
- info.Available = lv.GreaterThan(cv)
-
return info, nil
}
@@ -1,7 +1,6 @@
package update
import (
- "context"
"testing"
"github.com/charmbracelet/crush/internal/version"
@@ -9,18 +8,26 @@ import (
)
func TestCheckForUpdate_DevelopmentVersion(t *testing.T) {
- // Test that development versions don't trigger updates.
- ctx := context.Background()
-
- // Temporarily set version to development version.
originalVersion := version.Version
version.Version = "unknown"
- defer func() {
+ t.Cleanup(func() {
version.Version = originalVersion
- }()
+ })
- info, err := Check(ctx)
+ info, err := Check(t.Context())
+ require.NoError(t, err)
+ require.NotNil(t, info)
+ require.False(t, info.Available())
+}
+
+func TestCheckForUpdate_Old(t *testing.T) {
+ originalVersion := version.Version
+ version.Version = "0.10.0"
+ t.Cleanup(func() {
+ version.Version = originalVersion
+ })
+ info, err := Check(t.Context())
require.NoError(t, err)
require.NotNil(t, info)
- require.False(t, info.Available)
+ require.True(t, info.Available())
}