@@ -16,8 +16,9 @@ import (
1616const repo = "nathfavour/vibeauracle"
1717
1818type releaseInfo struct {
19- TagName string `json:"tag_name"`
20- Assets []struct {
19+ TagName string `json:"tag_name"`
20+ TargetCommitish string `json:"target_commitish"`
21+ Assets []struct {
2122 Name string `json:"name"`
2223 BrowserDownloadURL string `json:"browser_download_url"`
2324 } `json:"assets"`
@@ -43,15 +44,40 @@ func getLatestRelease() (*releaseInfo, error) {
4344 return & releases [0 ], nil
4445}
4546
47+ func isUpdateAvailable (latest * releaseInfo ) bool {
48+ if Version == "dev" {
49+ return true // Always allow update from dev
50+ }
51+
52+ // If tags match, check the commit SHA
53+ if latest .TagName == Version {
54+ // If both are 'latest', compare the SHAs
55+ if Version == "latest" {
56+ return latest .TargetCommitish != Commit
57+ }
58+ return false
59+ }
60+
61+ return true
62+ }
63+
4664// checkUpdateSilent checks for updates and prints a message if one is available
4765func checkUpdateSilent () {
4866 latest , err := getLatestRelease ()
4967 if err != nil {
5068 return // Fail silently for background checks
5169 }
5270
53- if latest .TagName != Version {
54- fmt .Printf ("\n ✨ A new version of vibeaura is available: %s (current: %s)\n " , latest .TagName , Version )
71+ if isUpdateAvailable (latest ) {
72+ fmt .Printf ("\n ✨ A new version of vibeaura is available: %s" , latest .TagName )
73+ if Version == "latest" && latest .TargetCommitish != "" {
74+ fmt .Printf (" (%s)" , latest .TargetCommitish [:7 ])
75+ }
76+ fmt .Printf (" (current: %s" , Version )
77+ if Commit != "none" {
78+ fmt .Printf ("-%s" , Commit [:7 ])
79+ }
80+ fmt .Println (")" )
5581 fmt .Println ("👉 Run 'vibeaura update' to install it instantly.\n " )
5682 }
5783}
@@ -60,20 +86,24 @@ var updateCmd = &cobra.Command{
6086 Use : "update" ,
6187 Short : "Update vibeaura to the latest version" ,
6288 RunE : func (cmd * cobra.Command , args []string ) error {
63- fmt .Printf ("Current version: %s\n " , Version )
89+ fmt .Printf ("Current version: %s (commit: %s) \n " , Version , Commit )
6490 fmt .Println ("Checking for updates..." )
6591
6692 latest , err := getLatestRelease ()
6793 if err != nil {
6894 return fmt .Errorf ("checking for updates: %w" , err )
6995 }
7096
71- if latest . TagName == Version && Version != "dev" {
97+ if ! isUpdateAvailable ( latest ) {
7298 fmt .Println ("vibeaura is already up to date!" )
7399 return nil
74100 }
75101
76- fmt .Printf ("New version available: %s\n " , latest .TagName )
102+ fmt .Printf ("New version available: %s" , latest .TagName )
103+ if latest .TagName == "latest" {
104+ fmt .Printf (" (commit: %s)" , latest .TargetCommitish )
105+ }
106+ fmt .Println ()
77107
78108 // Determine target asset name
79109 goos := runtime .GOOS
0 commit comments