@@ -113,26 +113,45 @@ func (a *ArduinoPlatformUpdater) ListUpgradablePackages(cfg config.Configuration
113113 if platformSummary == nil {
114114 return nil , nil // No platform found
115115 }
116+ releasesMap := platformSummary .GetReleases ()
116117
117- installedVersionString := platformSummary . GetInstalledVersion ( )
118+ releases := make ([] string , 0 , len ( releasesMap ) )
118119
119- installedV , err := semver .NewVersion (installedVersionString )
120- if err != nil {
121- slog .Warn ("Failed to parse installed version" , "version" , installedVersionString , "error" , err )
120+ for k := range releasesMap {
121+ releases = append (releases , k )
122+ }
123+ bestVersion , err := findBestCandidate (
124+ platformSummary .GetInstalledVersion (),
125+ releases ,
126+ cfg .MaxAllowedMajorVersion ,
127+ )
128+
129+ if bestVersion == "" || err != nil {
122130 return nil , nil
123131 }
132+ return []update.UpgradablePackage {{
133+ Type : update .Arduino ,
134+ Name : "arduino:zephyr" ,
135+ FromVersion : platformSummary .GetInstalledVersion (),
136+ ToVersion : bestVersion ,
137+ }}, nil
138+ }
139+ func findBestCandidate (installedStr string , availableVersions []string , maxMajorConfig int ) (string , error ) {
140+ installedV , err := semver .NewVersion (installedStr )
141+ if err != nil {
142+ return "" , err
143+ }
124144
125- var maxMajor uint64
126- if cfg . MaxAllowedMajorVersion > 0 {
127- maxMajor = uint64 ( cfg . MaxAllowedMajorVersion )
145+ maxMajor := uint64 ( maxMajorConfig )
146+ if maxMajorConfig <= 0 {
147+ maxMajor = installedV . Major ( )
128148 }
149+
129150 var bestUpdateV * semver.Version
130151
131- allReleases := platformSummary .GetReleases ()
132- for versionString := range allReleases {
133- candidateV , err := semver .NewVersion (versionString )
152+ for _ , vStr := range availableVersions {
153+ candidateV , err := semver .NewVersion (vStr )
134154 if err != nil {
135- slog .Debug ("Skipping unparsable version" , "version" , versionString , "error" , err )
136155 continue
137156 }
138157
@@ -143,23 +162,15 @@ func (a *ArduinoPlatformUpdater) ListUpgradablePackages(cfg config.Configuration
143162 if ! candidateV .GreaterThan (installedV ) {
144163 continue
145164 }
146-
147165 if bestUpdateV == nil || candidateV .GreaterThan (bestUpdateV ) {
148166 bestUpdateV = candidateV
149167 }
150168 }
169+
151170 if bestUpdateV == nil {
152- slog .Debug ("No suitable updates found within major version constraint" )
153- return nil , nil
171+ return "" , nil
154172 }
155- slog .Debug (" bestUpdateV.Original()" , bestUpdateV .Original (), "" )
156- slog .Debug (" bestUpdateV.String()" , bestUpdateV .String (), "" )
157- return []update.UpgradablePackage {{
158- Type : update .Arduino ,
159- Name : "arduino:zephyr" ,
160- FromVersion : platformSummary .GetInstalledVersion (),
161- ToVersion : bestUpdateV .Original (),
162- }}, nil
173+ return bestUpdateV .Original (), nil
163174}
164175
165176// UpgradePackages implements ServiceUpdater.
0 commit comments