From db1e1f9b38e130260b0050b0ee3004897cb9a94b Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 27 Jun 2025 14:17:40 +0200 Subject: [PATCH 1/5] Do not output empty 'libraries:' field if not needed in sketch.yaml --- internal/arduino/sketch/profiles.go | 3 +++ internal/arduino/sketch/profiles_test.go | 3 --- .../arduino/sketch/testdata/SketchWithProfiles/sketch.yml | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/arduino/sketch/profiles.go b/internal/arduino/sketch/profiles.go index cd32ccdf681..2783270ab65 100644 --- a/internal/arduino/sketch/profiles.go +++ b/internal/arduino/sketch/profiles.go @@ -187,6 +187,9 @@ type ProfileRequiredLibraries []*ProfileLibraryReference // AsYaml outputs the required libraries as Yaml func (p *ProfileRequiredLibraries) AsYaml() string { + if len(*p) == 0 { + return "" + } res := " libraries:\n" for _, lib := range *p { res += lib.AsYaml() diff --git a/internal/arduino/sketch/profiles_test.go b/internal/arduino/sketch/profiles_test.go index e2595ed06f9..5be45603914 100644 --- a/internal/arduino/sketch/profiles_test.go +++ b/internal/arduino/sketch/profiles_test.go @@ -16,7 +16,6 @@ package sketch import ( - "fmt" "testing" "github.com/arduino/go-paths-helper" @@ -28,7 +27,6 @@ func TestProjectFileLoading(t *testing.T) { sketchProj := paths.New("testdata", "SketchWithProfiles", "sketch.yml") proj, err := LoadProjectFile(sketchProj) require.NoError(t, err) - fmt.Println(proj) golden, err := sketchProj.ReadFile() require.NoError(t, err) require.Equal(t, proj.AsYaml(), string(golden)) @@ -37,7 +35,6 @@ func TestProjectFileLoading(t *testing.T) { sketchProj := paths.New("testdata", "SketchWithDefaultFQBNAndPort", "sketch.yml") proj, err := LoadProjectFile(sketchProj) require.NoError(t, err) - fmt.Println(proj) golden, err := sketchProj.ReadFile() require.NoError(t, err) require.Equal(t, proj.AsYaml(), string(golden)) diff --git a/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml index 868d8eb5116..d4e7f525b84 100644 --- a/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml +++ b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml @@ -9,6 +9,12 @@ profiles: - Arduino_ConnectionHandler (0.6.4) - TinyDHT sensor library (1.1.0) + nanorp_nolib: + fqbn: arduino:mbed_nano:nanorp2040connect + programmer: p1 + platforms: + - platform: arduino:mbed_nano (2.1.0) + another_profile_name: notes: testing the limit of the AVR platform, may be unstable fqbn: arduino:avr:uno From 4ef9bbe1d049d96f6d5b464eb9ec32b2266fffcf Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 28 Jun 2025 00:05:48 +0200 Subject: [PATCH 2/5] Slightly refactored IndexFromPlatformRelease function This will help to simplify the next commits. --- internal/arduino/cores/packageindex/index.go | 129 +++++++++++-------- 1 file changed, 73 insertions(+), 56 deletions(-) diff --git a/internal/arduino/cores/packageindex/index.go b/internal/arduino/cores/packageindex/index.go index c2c601c500b..9545046af22 100644 --- a/internal/arduino/cores/packageindex/index.go +++ b/internal/arduino/cores/packageindex/index.go @@ -151,19 +151,6 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) { // which in turn contains a single indexPlatformRelease converted from the one // passed as argument func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { - boards := []indexBoard{} - for _, manifest := range pr.BoardsManifest { - board := indexBoard{ - Name: manifest.Name, - } - for _, id := range manifest.ID { - if id.USB != "" { - board.ID = []indexBoardID{{USB: id.USB}} - } - } - boards = append(boards, board) - } - tools := []indexToolDependency{} for _, t := range pr.ToolDependencies { tools = append(tools, indexToolDependency{ @@ -189,56 +176,86 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { }) } - packageTools := []*indexToolRelease{} - for name, tool := range pr.Platform.Package.Tools { - for _, toolRelease := range tool.Releases { - flavours := []indexToolReleaseFlavour{} - for _, flavour := range toolRelease.Flavors { - flavours = append(flavours, indexToolReleaseFlavour{ - OS: flavour.OS, - URL: flavour.Resource.URL, - ArchiveFileName: flavour.Resource.ArchiveFileName, - Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)), - Checksum: flavour.Resource.Checksum, + // Helper functions: those are needed to build an extract of the package_index.json + // that is compatible with the one used by the CLI. + // The installed.json is a simplified version of the cores.Packages + // and therefore we need to extract the relevant information from the + // cores.PlatformRelease and cores.Package structures. + extractIndexPackage := func(pack *cores.Package) *indexPackage { + packageTools := []*indexToolRelease{} + for name, tool := range pack.Tools { + for _, toolRelease := range tool.Releases { + flavours := []indexToolReleaseFlavour{} + for _, flavour := range toolRelease.Flavors { + flavours = append(flavours, indexToolReleaseFlavour{ + OS: flavour.OS, + URL: flavour.Resource.URL, + ArchiveFileName: flavour.Resource.ArchiveFileName, + Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)), + Checksum: flavour.Resource.Checksum, + }) + } + packageTools = append(packageTools, &indexToolRelease{ + Name: name, + Version: toolRelease.Version, + Systems: flavours, }) } - packageTools = append(packageTools, &indexToolRelease{ - Name: name, - Version: toolRelease.Version, - Systems: flavours, - }) + } + return &indexPackage{ + Name: pack.Name, + Maintainer: pack.Maintainer, + WebsiteURL: pack.WebsiteURL, + URL: pack.URL, + Email: pack.Email, + Platforms: nil, + Tools: packageTools, + Help: indexHelp{Online: pack.Help.Online}, + } + } + extractIndexPlatformRelease := func(pr *cores.PlatformRelease) *indexPlatformRelease { + boards := []indexBoard{} + for _, manifest := range pr.BoardsManifest { + board := indexBoard{ + Name: manifest.Name, + } + for _, id := range manifest.ID { + if id.USB != "" { + board.ID = []indexBoardID{{USB: id.USB}} + } + } + boards = append(boards, board) + } + + return &indexPlatformRelease{ + Name: pr.Name, + Architecture: pr.Platform.Architecture, + Version: pr.Version, + Deprecated: pr.Deprecated, + Category: pr.Category, + URL: pr.Resource.URL, + ArchiveFileName: pr.Resource.ArchiveFileName, + Checksum: pr.Resource.Checksum, + Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)), + Help: indexHelp{Online: pr.Help.Online}, + Boards: boards, + ToolDependencies: nil, + DiscoveryDependencies: nil, + MonitorDependencies: nil, } } + mainPlatform := extractIndexPlatformRelease(pr) + mainPlatform.ToolDependencies = tools + mainPlatform.DiscoveryDependencies = discoveries + mainPlatform.MonitorDependencies = monitors + + mainPackage := extractIndexPackage(pr.Platform.Package) + mainPackage.Platforms = []*indexPlatformRelease{mainPlatform} + return Index{ IsTrusted: pr.IsTrusted, - Packages: []*indexPackage{ - { - Name: pr.Platform.Package.Name, - Maintainer: pr.Platform.Package.Maintainer, - WebsiteURL: pr.Platform.Package.WebsiteURL, - URL: pr.Platform.Package.URL, - Email: pr.Platform.Package.Email, - Platforms: []*indexPlatformRelease{{ - Name: pr.Name, - Architecture: pr.Platform.Architecture, - Version: pr.Version, - Deprecated: pr.Deprecated, - Category: pr.Category, - URL: pr.Resource.URL, - ArchiveFileName: pr.Resource.ArchiveFileName, - Checksum: pr.Resource.Checksum, - Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)), - Boards: boards, - Help: indexHelp{Online: pr.Help.Online}, - ToolDependencies: tools, - DiscoveryDependencies: discoveries, - MonitorDependencies: monitors, - }}, - Tools: packageTools, - Help: indexHelp{Online: pr.Platform.Package.Help.Online}, - }, - }, + Packages: []*indexPackage{mainPackage}, } } From 10358c0453a1a03cf528bd30b50bca20dc504308 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 30 Jun 2025 10:23:00 +0200 Subject: [PATCH 3/5] Extract also referenced platform tools in installed.json. If a platform requires tools from another referenced platform, we must extract the relevant data in the `installed.json` file too. --- internal/arduino/cores/packageindex/index.go | 17 ++++++++++++++++- internal/arduino/cores/status.go | 7 +++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/internal/arduino/cores/packageindex/index.go b/internal/arduino/cores/packageindex/index.go index 9545046af22..20522fe32ca 100644 --- a/internal/arduino/cores/packageindex/index.go +++ b/internal/arduino/cores/packageindex/index.go @@ -151,6 +151,9 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) { // which in turn contains a single indexPlatformRelease converted from the one // passed as argument func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { + // While enumerating the dependencies we also build a set of required packages. + requiredPackages := map[string]bool{} + tools := []indexToolDependency{} for _, t := range pr.ToolDependencies { tools = append(tools, indexToolDependency{ @@ -158,6 +161,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { Name: t.ToolName, Version: t.ToolVersion, }) + requiredPackages[t.ToolPackager] = true } discoveries := []indexDiscoveryDependency{} @@ -166,6 +170,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { Packager: d.Packager, Name: d.Name, }) + requiredPackages[d.Packager] = true } monitors := []indexMonitorDependency{} @@ -174,6 +179,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { Packager: m.Packager, Name: m.Name, }) + requiredPackages[m.Packager] = true } // Helper functions: those are needed to build an extract of the package_index.json @@ -249,13 +255,22 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { mainPlatform.ToolDependencies = tools mainPlatform.DiscoveryDependencies = discoveries mainPlatform.MonitorDependencies = monitors + delete(requiredPackages, pr.Platform.Package.Name) mainPackage := extractIndexPackage(pr.Platform.Package) mainPackage.Platforms = []*indexPlatformRelease{mainPlatform} + packages := []*indexPackage{mainPackage} + for requiredPackageName := range requiredPackages { + requiredPackage, ok := pr.Platform.Package.Packages.GetPackage(requiredPackageName) + if ok { + packages = append(packages, extractIndexPackage(requiredPackage)) + } + } + return Index{ IsTrusted: pr.IsTrusted, - Packages: []*indexPackage{mainPackage}, + Packages: packages, } } diff --git a/internal/arduino/cores/status.go b/internal/arduino/cores/status.go index 42ed1177e0a..cf6d262c584 100644 --- a/internal/arduino/cores/status.go +++ b/internal/arduino/cores/status.go @@ -50,6 +50,13 @@ type Package struct { Packages Packages `json:"-"` } +// GetPackage returns the specified Package if it exists +// and a boolean indicating whether it was found or not. +func (packages Packages) GetPackage(packager string) (*Package, bool) { + targetPackage, ok := packages[packager] + return targetPackage, ok +} + // GetOrCreatePackage returns the specified Package or creates an empty one // filling all the cross-references func (packages Packages) GetOrCreatePackage(packager string) *Package { From 7e7d49d61244d24258e79a2342f810873688cb04 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 3 Jul 2025 14:37:35 +0200 Subject: [PATCH 4/5] Refactoring unit-test Just moving code, no semantic change. Helps to get the following commit cleaner. --- .../arduino/cores/packageindex/index_test.go | 523 ++++++++---------- 1 file changed, 243 insertions(+), 280 deletions(-) diff --git a/internal/arduino/cores/packageindex/index_test.go b/internal/arduino/cores/packageindex/index_test.go index cdc38022f21..03369b28b79 100644 --- a/internal/arduino/cores/packageindex/index_test.go +++ b/internal/arduino/cores/packageindex/index_test.go @@ -40,271 +40,206 @@ func TestIndexParsing(t *testing.T) { } func TestIndexFromPlatformRelease(t *testing.T) { - pr := &cores.PlatformRelease{ - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/cores/avr-1.6.23.tar.bz2", - ArchiveFileName: "avr-1.6.23.tar.bz2", - Checksum: "SHA-256:18618d7f256f26cd77c35f4c888d5d1b2334f07925094fdc99ac3188722284aa", - Size: 5001988, - }, - Version: semver.MustParse("1.8.3"), - Help: cores.PlatformReleaseHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - BoardsManifest: []*cores.BoardManifest{ - {Name: "Arduino Yún"}, - {Name: "Arduino/Genuino Uno"}, - {Name: "Arduino Uno WiFi"}, - }, - ToolDependencies: cores.ToolDependencies{ - { - ToolPackager: "arduino", - ToolName: "avr-gcc", - ToolVersion: semver.ParseRelaxed("5.4.0-atmel3.6.1-arduino2"), - }, - { - ToolPackager: "arduino", - ToolName: "avrdude", - ToolVersion: semver.ParseRelaxed("6.3.0-arduino14"), - }, - { - ToolPackager: "arduino", - ToolName: "arduinoOTA", - ToolVersion: semver.ParseRelaxed("1.2.1"), - }, - }, - DiscoveryDependencies: cores.DiscoveryDependencies{ - { - Packager: "arduino", - Name: "ble-discovery", - }, - { - Packager: "arduino", - Name: "serial-discovery", + arduinoTools := map[string]*cores.Tool{ + "serial-discovery": { + Name: "serial-discovery", + Releases: map[semver.NormalizedString]*cores.ToolRelease{ + "1.0.0": { + Version: semver.ParseRelaxed("1.0.0"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "some-serial-discovery-1.0.0-url", + ArchiveFileName: "serial-discovery-1.0.0.tar.bz2", + Checksum: "SHA-256:some-serial-discovery-1.0.0-sha", + Size: 201341, + }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "some-serial-discovery-1.0.0-other-url", + ArchiveFileName: "serial-discovery-1.0.0.tar.gz", + Checksum: "SHA-256:some-serial-discovery-1.0.0-other-sha", + Size: 222918, + }, + }, + }, + }, + "0.1.0": { + Version: semver.ParseRelaxed("0.1.0"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "some-serial-discovery-0.1.0-url", + ArchiveFileName: "serial-discovery-0.1.0.tar.bz2", + Checksum: "SHA-256:some-serial-discovery-0.1.0-sha", + Size: 201341, + }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "some-serial-discovery-0.1.0-other-url", + ArchiveFileName: "serial-discovery-0.1.0.tar.gz", + Checksum: "SHA-256:some-serial-discovery-0.1.0-other-sha", + Size: 222918, + }, + }, + }, + }, }, }, - MonitorDependencies: cores.MonitorDependencies{ - { - Packager: "arduino", - Name: "ble-monitor", - }, - { - Packager: "arduino", - Name: "serial-monitor", + "ble-discovery": { + Name: "ble-discovery", + Releases: map[semver.NormalizedString]*cores.ToolRelease{ + "1.0.0": { + Version: semver.ParseRelaxed("1.0.0"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "some-ble-discovery-1.0.0-url", + ArchiveFileName: "ble-discovery-1.0.0.tar.bz2", + Checksum: "SHA-256:some-ble-discovery-1.0.0-sha", + Size: 201341, + }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "some-ble-discovery-1.0.0-other-url", + ArchiveFileName: "ble-discovery-1.0.0.tar.gz", + Checksum: "SHA-256:some-ble-discovery-1.0.0-other-sha", + Size: 222918, + }, + }, + }, + }, + "0.1.0": { + Version: semver.ParseRelaxed("0.1.0"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "some-ble-discovery-0.1.0-url", + ArchiveFileName: "ble-discovery-0.1.0.tar.bz2", + Checksum: "SHA-256:some-ble-discovery-0.1.0-sha", + Size: 201341, + }, + }, + + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "some-ble-discovery-0.1.0-other-url", + ArchiveFileName: "ble-discovery-0.1.0.tar.gz", + Checksum: "SHA-256:some-ble-discovery-0.1.0-other-sha", + Size: 222918, + }, + }, + }, + }, }, }, - Name: "Arduino AVR Boards", - Category: "Arduino", - Platform: &cores.Platform{ - Architecture: "avr", - Package: &cores.Package{ - Name: "arduino", - Maintainer: "Arduino", - WebsiteURL: "https://arduino.cc/", - URL: "", - Email: "packages@arduino.cc", - Help: cores.PackageHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - Tools: map[string]*cores.Tool{ - "serial-discovery": { - Name: "serial-discovery", - Releases: map[semver.NormalizedString]*cores.ToolRelease{ - "1.0.0": { - Version: semver.ParseRelaxed("1.0.0"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "some-serial-discovery-1.0.0-url", - ArchiveFileName: "serial-discovery-1.0.0.tar.bz2", - Checksum: "SHA-256:some-serial-discovery-1.0.0-sha", - Size: 201341, - }, - }, - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "some-serial-discovery-1.0.0-other-url", - ArchiveFileName: "serial-discovery-1.0.0.tar.gz", - Checksum: "SHA-256:some-serial-discovery-1.0.0-other-sha", - Size: 222918, - }, - }, - }, + "bossac": { + Name: "bossac", + Releases: map[semver.NormalizedString]*cores.ToolRelease{ + "1.6.1-arduino": { + Version: semver.ParseRelaxed("1.6.1-arduino"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", + ArchiveFileName: "bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", + Checksum: "SHA-256:8c4e63db982178919c824e7a35580dffc95c3426afa7285de3eb583982d4d391", + Size: 201341, }, - "0.1.0": { - Version: semver.ParseRelaxed("0.1.0"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "some-serial-discovery-0.1.0-url", - ArchiveFileName: "serial-discovery-0.1.0.tar.bz2", - Checksum: "SHA-256:some-serial-discovery-0.1.0-sha", - Size: 201341, - }, - }, - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "some-serial-discovery-0.1.0-other-url", - ArchiveFileName: "serial-discovery-0.1.0.tar.gz", - Checksum: "SHA-256:some-serial-discovery-0.1.0-other-sha", - Size: 222918, - }, - }, - }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/bossac-1.6.1-arduino-mingw32.tar.gz", + ArchiveFileName: "bossac-1.6.1-arduino-mingw32.tar.gz", + Checksum: "SHA-256:d59f43e2e83a337d04c4ae88b195a4ee175b8d87fff4c43144d23412a4a9513b", + Size: 222918, }, }, }, - "ble-discovery": { - Name: "ble-discovery", - Releases: map[semver.NormalizedString]*cores.ToolRelease{ - "1.0.0": { - Version: semver.ParseRelaxed("1.0.0"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "some-ble-discovery-1.0.0-url", - ArchiveFileName: "ble-discovery-1.0.0.tar.bz2", - Checksum: "SHA-256:some-ble-discovery-1.0.0-sha", - Size: 201341, - }, - }, - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "some-ble-discovery-1.0.0-other-url", - ArchiveFileName: "ble-discovery-1.0.0.tar.gz", - Checksum: "SHA-256:some-ble-discovery-1.0.0-other-sha", - Size: 222918, - }, - }, - }, + }, + "1.7.0": { + Version: semver.ParseRelaxed("1.7.0"), + Flavors: []*cores.Flavor{ + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/bossac-1.7.0-arduino-mingw32.tar.bz2", + ArchiveFileName: "bossac-1.7.0-arduino-mingw32.tar.bz2", + Checksum: "SHA-256:9ef7d11b4fabca0adc17102a0290957d5cc26ce46b422c3a5344722c80acc7b2", + Size: 243066, }, - "0.1.0": { - Version: semver.ParseRelaxed("0.1.0"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "some-ble-discovery-0.1.0-url", - ArchiveFileName: "ble-discovery-0.1.0.tar.bz2", - Checksum: "SHA-256:some-ble-discovery-0.1.0-sha", - Size: 201341, - }, - }, - - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "some-ble-discovery-0.1.0-other-url", - ArchiveFileName: "ble-discovery-0.1.0.tar.gz", - Checksum: "SHA-256:some-ble-discovery-0.1.0-other-sha", - Size: 222918, - }, - }, - }, + }, + { + OS: "x86_64-apple-darwin", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/bossac-1.7.0-arduino-x86_64-apple-darwin.tar.bz2", + ArchiveFileName: "bossac-1.7.0-arduino-x86_64-apple-darwin.tar.bz2", + Checksum: "SHA-256:feac36ab38876c163dcf51bdbcfbed01554eede3d41c59a0e152e170fe5164d2", + Size: 63822, }, }, }, - "bossac": { - Name: "bossac", - Releases: map[semver.NormalizedString]*cores.ToolRelease{ - "1.6.1-arduino": { - Version: semver.ParseRelaxed("1.6.1-arduino"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - ArchiveFileName: "bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - Checksum: "SHA-256:8c4e63db982178919c824e7a35580dffc95c3426afa7285de3eb583982d4d391", - Size: 201341, - }, - }, - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/bossac-1.6.1-arduino-mingw32.tar.gz", - ArchiveFileName: "bossac-1.6.1-arduino-mingw32.tar.gz", - Checksum: "SHA-256:d59f43e2e83a337d04c4ae88b195a4ee175b8d87fff4c43144d23412a4a9513b", - Size: 222918, - }, - }, - }, + }, + }, + }, + "arm-none-eabi-gcc": { + Name: "arm-none-eabi-gcc", + Releases: map[semver.NormalizedString]*cores.ToolRelease{ + "4.8.3-2014q1": { + Version: semver.ParseRelaxed("4.8.3-2014q1"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + Checksum: "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", + Size: 44423906, }, - "1.7.0": { - Version: semver.ParseRelaxed("1.7.0"), - Flavors: []*cores.Flavor{ - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/bossac-1.7.0-arduino-mingw32.tar.bz2", - ArchiveFileName: "bossac-1.7.0-arduino-mingw32.tar.bz2", - Checksum: "SHA-256:9ef7d11b4fabca0adc17102a0290957d5cc26ce46b422c3a5344722c80acc7b2", - Size: 243066, - }, - }, - { - OS: "x86_64-apple-darwin", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/bossac-1.7.0-arduino-x86_64-apple-darwin.tar.bz2", - ArchiveFileName: "bossac-1.7.0-arduino-x86_64-apple-darwin.tar.bz2", - Checksum: "SHA-256:feac36ab38876c163dcf51bdbcfbed01554eede3d41c59a0e152e170fe5164d2", - Size: 63822, - }, - }, - }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", + Checksum: "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", + Size: 84537449, }, }, }, - "arm-none-eabi-gcc": { - Name: "arm-none-eabi-gcc", - Releases: map[semver.NormalizedString]*cores.ToolRelease{ - "4.8.3-2014q1": { - Version: semver.ParseRelaxed("4.8.3-2014q1"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - Checksum: "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", - Size: 44423906, - }, - }, - { - OS: "i686-mingw32", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - Checksum: "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", - Size: 84537449, - }, - }, - }, + }, + "7-2017q4": { + Version: semver.ParseRelaxed("7-2017q4"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + Checksum: "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", + Size: 44423906, }, - "7-2017q4": { - Version: semver.ParseRelaxed("7-2017q4"), - Flavors: []*cores.Flavor{ - { - OS: "arm-linux-gnueabihf", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - Checksum: "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", - Size: 44423906, - }, - }, - { - OS: "aarch64-linux-gnu", - Resource: &resources.DownloadResource{ - URL: "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - ArchiveFileName: "gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - Checksum: "SHA-256:6fb5752fb4d11012bd0a1ceb93a19d0641ff7cf29d289b3e6b86b99768e66f76", - Size: 99558726, - }, - }, - }, + }, + { + OS: "aarch64-linux-gnu", + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", + ArchiveFileName: "gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", + Checksum: "SHA-256:6fb5752fb4d11012bd0a1ceb93a19d0641ff7cf29d289b3e6b86b99768e66f76", + Size: 99558726, }, }, }, @@ -313,6 +248,58 @@ func TestIndexFromPlatformRelease(t *testing.T) { }, } + avrPlatformRelease := &cores.PlatformRelease{ + Resource: &resources.DownloadResource{ + URL: "http://downloads.arduino.cc/cores/avr-1.6.23.tar.bz2", + ArchiveFileName: "avr-1.6.23.tar.bz2", + Checksum: "SHA-256:18618d7f256f26cd77c35f4c888d5d1b2334f07925094fdc99ac3188722284aa", + Size: 5001988, + }, + Version: semver.MustParse("1.8.3"), + Help: cores.PlatformReleaseHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + BoardsManifest: []*cores.BoardManifest{ + {Name: "Arduino Yún"}, + {Name: "Arduino/Genuino Uno"}, + {Name: "Arduino Uno WiFi"}, + }, + ToolDependencies: cores.ToolDependencies{ + {ToolPackager: "arduino", ToolName: "avr-gcc", ToolVersion: semver.ParseRelaxed("5.4.0-atmel3.6.1-arduino2")}, + {ToolPackager: "arduino", ToolName: "avrdude", ToolVersion: semver.ParseRelaxed("6.3.0-arduino14")}, + {ToolPackager: "arduino", ToolName: "arduinoOTA", ToolVersion: semver.ParseRelaxed("1.2.1")}, + }, + DiscoveryDependencies: cores.DiscoveryDependencies{ + {Packager: "arduino", Name: "ble-discovery"}, + {Packager: "arduino", Name: "serial-discovery"}, + }, + MonitorDependencies: cores.MonitorDependencies{ + {Packager: "arduino", Name: "ble-monitor"}, + {Packager: "arduino", Name: "serial-monitor"}, + }, + Name: "Arduino AVR Boards", + Category: "Arduino", + } + avrPlatform := &cores.Platform{ + Architecture: "avr", + Releases: map[semver.NormalizedString]*cores.PlatformRelease{ + avrPlatformRelease.Version.NormalizedString(): avrPlatformRelease, + }, + } + avrPlatformRelease.Platform = avrPlatform + + arduinoPackage := &cores.Package{ + Name: "arduino", + Maintainer: "Arduino", + WebsiteURL: "https://arduino.cc/", + URL: "", + Email: "packages@arduino.cc", + Help: cores.PackageHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Tools: arduinoTools, + Platforms: map[string]*cores.Platform{ + "avr": avrPlatform, + }, + } + avrPlatform.Package = arduinoPackage + expectedIndex := Index{ IsTrusted: false, Packages: []*indexPackage{{ @@ -338,41 +325,17 @@ func TestIndexFromPlatformRelease(t *testing.T) { }, Help: indexHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, ToolDependencies: []indexToolDependency{ - { - Packager: "arduino", - Name: "avr-gcc", - Version: semver.ParseRelaxed("5.4.0-atmel3.6.1-arduino2"), - }, - { - Packager: "arduino", - Name: "avrdude", - Version: semver.ParseRelaxed("6.3.0-arduino14"), - }, - { - Packager: "arduino", - Name: "arduinoOTA", - Version: semver.ParseRelaxed("1.2.1"), - }, + {Packager: "arduino", Name: "avr-gcc", Version: semver.ParseRelaxed("5.4.0-atmel3.6.1-arduino2")}, + {Packager: "arduino", Name: "avrdude", Version: semver.ParseRelaxed("6.3.0-arduino14")}, + {Packager: "arduino", Name: "arduinoOTA", Version: semver.ParseRelaxed("1.2.1")}, }, DiscoveryDependencies: []indexDiscoveryDependency{ - { - Packager: "arduino", - Name: "ble-discovery", - }, - { - Packager: "arduino", - Name: "serial-discovery", - }, + {Packager: "arduino", Name: "ble-discovery"}, + {Packager: "arduino", Name: "serial-discovery"}, }, MonitorDependencies: []indexMonitorDependency{ - { - Packager: "arduino", - Name: "ble-monitor", - }, - { - Packager: "arduino", - Name: "serial-monitor", - }, + {Packager: "arduino", Name: "ble-monitor"}, + {Packager: "arduino", Name: "serial-monitor"}, }, }}, Tools: []*indexToolRelease{ @@ -540,7 +503,7 @@ func TestIndexFromPlatformRelease(t *testing.T) { }}, } - in := IndexFromPlatformRelease(pr) + in := IndexFromPlatformRelease(avrPlatformRelease) require.Equal(t, expectedIndex.IsTrusted, in.IsTrusted) require.Equal(t, len(expectedIndex.Packages), len(in.Packages)) From 5e15ea327efca296715106619a353825e56dbc1b Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 3 Jul 2025 14:49:29 +0200 Subject: [PATCH 5/5] Added unit-test --- .../arduino/cores/packageindex/index_test.go | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/internal/arduino/cores/packageindex/index_test.go b/internal/arduino/cores/packageindex/index_test.go index 03369b28b79..ccd7ba89898 100644 --- a/internal/arduino/cores/packageindex/index_test.go +++ b/internal/arduino/cores/packageindex/index_test.go @@ -270,6 +270,7 @@ func TestIndexFromPlatformRelease(t *testing.T) { DiscoveryDependencies: cores.DiscoveryDependencies{ {Packager: "arduino", Name: "ble-discovery"}, {Packager: "arduino", Name: "serial-discovery"}, + {Packager: "dev", Name: "dev-discovery"}, }, MonitorDependencies: cores.MonitorDependencies{ {Packager: "arduino", Name: "ble-monitor"}, @@ -300,6 +301,51 @@ func TestIndexFromPlatformRelease(t *testing.T) { } avrPlatform.Package = arduinoPackage + dependentPackage := &cores.Package{ + Name: "dev", + Maintainer: "Arduino Dev", + WebsiteURL: "https://arduino.cc/", + URL: "", + Email: "packages@arduino.cc", + Help: cores.PackageHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Tools: map[string]*cores.Tool{ + "dev-discovery": { + Name: "dev-discovery", + Releases: map[semver.NormalizedString]*cores.ToolRelease{ + "1.0.0": { + Version: semver.ParseRelaxed("1.0.0"), + Flavors: []*cores.Flavor{ + { + OS: "arm-linux-gnueabihf", + Resource: &resources.DownloadResource{ + URL: "dev-discovery-1.0.0-url", + ArchiveFileName: "dev-discovery-1.0.0.tar.bz2", + Checksum: "SHA-256:dev-discovery-1.0.0-sha", + Size: 201341, + }, + }, + { + OS: "i686-mingw32", + Resource: &resources.DownloadResource{ + URL: "dev-discovery-1.0.0-other-url", + ArchiveFileName: "dev-discovery-1.0.0.tar.gz", + Checksum: "SHA-256:dev-discovery-1.0.0-other-sha", + Size: 222918, + }, + }, + }, + }, + }, + }, + }, + } + + packages := cores.NewPackages() + packages[arduinoPackage.Name] = arduinoPackage + arduinoPackage.Packages = packages + packages[dependentPackage.Name] = dependentPackage + dependentPackage.Packages = packages + expectedIndex := Index{ IsTrusted: false, Packages: []*indexPackage{{ @@ -332,6 +378,7 @@ func TestIndexFromPlatformRelease(t *testing.T) { DiscoveryDependencies: []indexDiscoveryDependency{ {Packager: "arduino", Name: "ble-discovery"}, {Packager: "arduino", Name: "serial-discovery"}, + {Packager: "dev", Name: "dev-discovery"}, }, MonitorDependencies: []indexMonitorDependency{ {Packager: "arduino", Name: "ble-monitor"}, @@ -500,6 +547,35 @@ func TestIndexFromPlatformRelease(t *testing.T) { }, }, }, + }, { + Name: "dev", + Maintainer: "Arduino Dev", + WebsiteURL: "https://arduino.cc/", + URL: "", + Email: "packages@arduino.cc", + Help: indexHelp{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Tools: []*indexToolRelease{ + { + Name: "dev-discovery", + Version: semver.ParseRelaxed("1.0.0"), + Systems: []indexToolReleaseFlavour{ + { + OS: "arm-linux-gnueabihf", + URL: "dev-discovery-1.0.0-url", + ArchiveFileName: "dev-discovery-1.0.0.tar.bz2", + Checksum: "SHA-256:dev-discovery-1.0.0-sha", + Size: "201341", + }, + { + OS: "i686-mingw32", + URL: "dev-discovery-1.0.0-other-url", + ArchiveFileName: "dev-discovery-1.0.0.tar.gz", + Checksum: "SHA-256:dev-discovery-1.0.0-other-sha", + Size: "222918", + }, + }, + }, + }, }}, } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy