@@ -122,26 +122,45 @@ func (a *ArduinoPlatformUpdater) ListUpgradablePackages(cfg config.Configuration
122122 if platformSummary == nil {
123123 return nil , nil // No platform found
124124 }
125+ releasesMap := platformSummary .GetReleases ()
125126
126- installedVersionString := platformSummary . GetInstalledVersion ( )
127+ releases := make ([] string , 0 , len ( releasesMap ) )
127128
128- installedV , err := semver .NewVersion (installedVersionString )
129- if err != nil {
130- slog .Warn ("Failed to parse installed version" , "version" , installedVersionString , "error" , err )
129+ for k := range releasesMap {
130+ releases = append (releases , k )
131+ }
132+ bestVersion , err := findBestCandidate (
133+ platformSummary .GetInstalledVersion (),
134+ releases ,
135+ cfg .MaxAllowedMajorVersion ,
136+ )
137+
138+ if bestVersion == "" || err != nil {
131139 return nil , nil
132140 }
141+ return []update.UpgradablePackage {{
142+ Type : update .Arduino ,
143+ Name : "arduino:zephyr" ,
144+ FromVersion : platformSummary .GetInstalledVersion (),
145+ ToVersion : bestVersion ,
146+ }}, nil
147+ }
148+ func findBestCandidate (installedStr string , availableVersions []string , maxMajorConfig int ) (string , error ) {
149+ installedV , err := semver .NewVersion (installedStr )
150+ if err != nil {
151+ return "" , err
152+ }
133153
134- var maxMajor uint64
135- if cfg . MaxAllowedMajorVersion > 0 {
136- maxMajor = uint64 ( cfg . MaxAllowedMajorVersion )
154+ maxMajor := uint64 ( maxMajorConfig )
155+ if maxMajorConfig <= 0 {
156+ maxMajor = installedV . Major ( )
137157 }
158+
138159 var bestUpdateV * semver.Version
139160
140- allReleases := platformSummary .GetReleases ()
141- for versionString := range allReleases {
142- candidateV , err := semver .NewVersion (versionString )
161+ for _ , vStr := range availableVersions {
162+ candidateV , err := semver .NewVersion (vStr )
143163 if err != nil {
144- slog .Debug ("Skipping unparsable version" , "version" , versionString , "error" , err )
145164 continue
146165 }
147166
@@ -152,23 +171,15 @@ func (a *ArduinoPlatformUpdater) ListUpgradablePackages(cfg config.Configuration
152171 if ! candidateV .GreaterThan (installedV ) {
153172 continue
154173 }
155-
156174 if bestUpdateV == nil || candidateV .GreaterThan (bestUpdateV ) {
157175 bestUpdateV = candidateV
158176 }
159177 }
178+
160179 if bestUpdateV == nil {
161- slog .Debug ("No suitable updates found within major version constraint" )
162- return nil , nil
180+ return "" , nil
163181 }
164- slog .Debug (" bestUpdateV.Original()" , bestUpdateV .Original (), "" )
165- slog .Debug (" bestUpdateV.String()" , bestUpdateV .String (), "" )
166- return []update.UpgradablePackage {{
167- Type : update .Arduino ,
168- Name : "arduino:zephyr" ,
169- FromVersion : platformSummary .GetInstalledVersion (),
170- ToVersion : bestUpdateV .Original (),
171- }}, nil
182+ return bestUpdateV .Original (), nil
172183}
173184
174185// UpgradePackages implements ServiceUpdater.
0 commit comments