@@ -75,6 +75,7 @@ type PlatformRelease struct {
75
75
PluggableDiscoveryAware bool `json:"-"` // true if the Platform supports pluggable discovery (no compatibility layer required)
76
76
Monitors map [string ]* MonitorDependency `json:"-"`
77
77
MonitorsDevRecipes map [string ]string `json:"-"`
78
+ Compatible bool `json:"-"` // true if at all ToolDependencies are available for the current OS/ARCH.
78
79
}
79
80
80
81
// BoardManifest contains information about a board. These metadata are usually
@@ -229,6 +230,21 @@ func (platform *Platform) GetLatestRelease() *PlatformRelease {
229
230
return platform .FindReleaseWithVersion (latestVersion )
230
231
}
231
232
233
+ // GetLatestCompatibleRelease returns the latest compatible release of this platform, or nil if no
234
+ // compatible releases are available.
235
+ func (platform * Platform ) GetLatestCompatibleRelease () * PlatformRelease {
236
+ var maximum * PlatformRelease
237
+ for _ , release := range platform .Releases {
238
+ if ! release .IsCompatible () {
239
+ continue
240
+ }
241
+ if maximum == nil || release .Version .GreaterThan (maximum .Version ) {
242
+ maximum = release
243
+ }
244
+ }
245
+ return maximum
246
+ }
247
+
232
248
// GetAllReleases returns all the releases of this platform, or an empty
233
249
// slice if no releases are available
234
250
func (platform * Platform ) GetAllReleases () []* PlatformRelease {
@@ -249,6 +265,18 @@ func (platform *Platform) GetAllReleasesVersions() []*semver.Version {
249
265
return versions
250
266
}
251
267
268
+ // GetAllCompatibleReleasesVersions returns all the version numbers in this Platform Package that contains compatible tools.
269
+ func (platform * Platform ) GetAllCompatibleReleasesVersions () []* semver.Version {
270
+ versions := []* semver.Version {}
271
+ for _ , release := range platform .Releases {
272
+ if ! release .IsCompatible () {
273
+ continue
274
+ }
275
+ versions = append (versions , release .Version )
276
+ }
277
+ return versions
278
+ }
279
+
252
280
// latestReleaseVersion obtains latest version number, or nil if no release available
253
281
func (platform * Platform ) latestReleaseVersion () * semver.Version {
254
282
// TODO: Cache latest version using a field in Platform
@@ -266,6 +294,18 @@ func (platform *Platform) latestReleaseVersion() *semver.Version {
266
294
return max
267
295
}
268
296
297
+ // latestCompatibleReleaseVersion obtains latest version number, for platforms that contains compatible tools, or nil if no release available
298
+ func (platform * Platform ) latestCompatibleReleaseVersion () * semver.Version {
299
+ versions := platform .GetAllCompatibleReleasesVersions ()
300
+ var maxVer * semver.Version
301
+ for _ , v := range versions {
302
+ if maxVer == nil || v .GreaterThan (maxVer ) {
303
+ maxVer = v
304
+ }
305
+ }
306
+ return maxVer
307
+ }
308
+
269
309
// GetAllInstalled returns all installed PlatformRelease
270
310
func (platform * Platform ) GetAllInstalled () []* PlatformRelease {
271
311
res := []* PlatformRelease {}
@@ -422,3 +462,9 @@ func (release *PlatformRelease) HasMetadata() bool {
422
462
installedJSONPath := release .InstallDir .Join ("installed.json" )
423
463
return installedJSONPath .Exist ()
424
464
}
465
+
466
+ // IsCompatible returns true if all the tools dependencies of a PlatformRelease
467
+ // are available in the current OS/ARCH.
468
+ func (release * PlatformRelease ) IsCompatible () bool {
469
+ return release .Compatible
470
+ }
0 commit comments