Skip to content

Commit abdd1e4

Browse files
committed
Added additional index URLx flags to ease plugin development
1 parent e814a42 commit abdd1e4

File tree

6 files changed

+58
-34
lines changed

6 files changed

+58
-34
lines changed

Diff for: cli/cli.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"os"
2525

2626
"github.com/arduino/arduino-fwuploader/cli/certificates"
27+
"github.com/arduino/arduino-fwuploader/cli/common"
2728
"github.com/arduino/arduino-fwuploader/cli/firmware"
2829
"github.com/arduino/arduino-fwuploader/cli/version"
2930

@@ -36,11 +37,13 @@ import (
3637
)
3738

3839
var (
39-
outputFormat string
40-
verbose bool
41-
logFile string
42-
logFormat string
43-
logLevel string
40+
outputFormat string
41+
verbose bool
42+
logFile string
43+
logFormat string
44+
logLevel string
45+
additionalFirmwareURLs []string
46+
additionalPackageURLs []string
4447
)
4548

4649
func NewCommand() *cobra.Command {
@@ -63,7 +66,8 @@ func NewCommand() *cobra.Command {
6366
rootCmd.PersistentFlags().StringVar(&logFormat, "log-format", "", "The output format for the logs, can be {text|json}.")
6467
rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic")
6568
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Print the logs on the standard output.")
66-
69+
rootCmd.PersistentFlags().StringArrayVarP(&additionalFirmwareURLs, "additional-fw-index", "F", nil, "Additional firmwares index URLs (useful for testing purposes)")
70+
rootCmd.PersistentFlags().StringArrayVarP(&additionalPackageURLs, "additional-packages-index", "P", nil, "Additional packages index URLs (useful for testing purposes)")
6771
return rootCmd
6872
}
6973

@@ -84,7 +88,6 @@ func toLogLevel(s string) (t logrus.Level, found bool) {
8488
}
8589

8690
func preRun(cmd *cobra.Command, args []string) {
87-
8891
// Prepare the Feedback system
8992
// check the right output format was passed
9093
format, found := feedback.ParseOutputFormat(outputFormat)
@@ -132,4 +135,8 @@ func preRun(cmd *cobra.Command, args []string) {
132135
}
133136

134137
logrus.Info(v.VersionInfo)
138+
139+
// Setup additional indexes
140+
common.AdditionalPackageIndexURLs = append(common.AdditionalPackageIndexURLs, additionalPackageURLs...)
141+
common.AdditionalFirmwareIndexURLs = append(common.AdditionalFirmwareIndexURLs, additionalFirmwareURLs...)
135142
}

Diff for: cli/common/common.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,40 @@ import (
3737
"github.com/sirupsen/logrus"
3838
)
3939

40+
// AdditionalPackageIndexURLs is a list of additional package_index.json URLs that
41+
// are loaded together with the main index.
42+
var AdditionalPackageIndexURLs []string
43+
44+
// AdditionalFirmwareIndexURLs is a list of additional firwamre_index.json URLs that
45+
// are loaded together with the main index.
46+
var AdditionalFirmwareIndexURLs []string
47+
4048
// InitIndexes downloads and parses the package_index.json and firmwares_index.json
4149
func InitIndexes() (*packagemanager.PackageManager, *firmwareindex.Index) {
4250
// Load main package index and optional additional indexes
4351
pmbuilder := packagemanager.NewBuilder(nil, nil, nil, nil, "")
4452
if err := indexes.GetPackageIndex(pmbuilder, globals.PackageIndexGZURL); err != nil {
4553
feedback.Fatal(fmt.Sprintf("Can't load package index: %s", err), feedback.ErrGeneric)
4654
}
55+
for _, indexURL := range AdditionalPackageIndexURLs {
56+
if err := indexes.GetPackageIndex(pmbuilder, indexURL); err != nil {
57+
feedback.Fatal(fmt.Sprintf("Can't load firmware index: %s", err), feedback.ErrGeneric)
58+
}
59+
}
4760

48-
firmwareIndex, err := indexes.GetFirmwareIndex()
61+
// Load main firmware index and optional additional indexes
62+
firmwareIndex, err := indexes.GetFirmwareIndex(globals.ModuleFirmwareIndexGZURL)
4963
if err != nil {
5064
feedback.Fatal(fmt.Sprintf("Can't load firmware index: %s", err), feedback.ErrGeneric)
5165
}
66+
for _, additionalURL := range AdditionalFirmwareIndexURLs {
67+
additionalIndex, err := indexes.GetFirmwareIndex(additionalURL)
68+
if err != nil {
69+
feedback.Fatal(fmt.Sprintf("Can't load firmware index: %s", err), feedback.ErrGeneric)
70+
}
71+
firmwareIndex.MergeWith(additionalIndex)
72+
}
73+
5274
return pmbuilder.Build(), firmwareIndex
5375
}
5476

Diff for: cli/firmware/list.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import (
2222
"os"
2323

2424
"github.com/arduino/arduino-cli/table"
25+
"github.com/arduino/arduino-fwuploader/cli/common"
2526
"github.com/arduino/arduino-fwuploader/cli/feedback"
26-
"github.com/arduino/arduino-fwuploader/indexes"
2727
"github.com/spf13/cobra"
2828
semver "go.bug.st/relaxed-semver"
2929
)
@@ -56,10 +56,7 @@ type FirmwareResult struct {
5656
type FirmwareListResult []*FirmwareResult
5757

5858
func list(fqbn string) {
59-
firmwareIndex, err := indexes.GetFirmwareIndex()
60-
if err != nil {
61-
feedback.FatalError(err, feedback.ErrGeneric)
62-
}
59+
_, firmwareIndex := common.InitIndexes()
6360

6461
res := FirmwareListResult{}
6562
for _, board := range firmwareIndex.Boards {

Diff for: indexes/firmwareindex/firmwareindex.go

+7
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,13 @@ func LoadIndexNoSign(jsonIndexFile *paths.Path) (*Index, error) {
125125
return &index, nil
126126
}
127127

128+
// MergeWith merge this index with the other given index (the boards from the other index)
129+
// are added to this one.
130+
func (i *Index) MergeWith(j *Index) {
131+
i.Boards = append(i.Boards, j.Boards...)
132+
i.IsTrusted = i.IsTrusted && j.IsTrusted
133+
}
134+
128135
// GetBoard returns the IndexBoard for the given FQBN
129136
func (i *Index) GetBoard(fqbn string) *IndexBoard {
130137
for _, b := range i.Boards {

Diff for: indexes/indexes.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323

2424
"github.com/arduino/arduino-cli/arduino/cores"
2525
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
26-
"github.com/arduino/arduino-fwuploader/cli/globals"
2726
"github.com/arduino/arduino-fwuploader/indexes/download"
2827
"github.com/arduino/arduino-fwuploader/indexes/firmwareindex"
2928
"github.com/sirupsen/logrus"
@@ -58,13 +57,16 @@ func GetPackageIndex(pmbuilder *packagemanager.Builder, indexURL string) error {
5857
logrus.Error(err)
5958
return err
6059
}
61-
pmbuilder.LoadPackageIndexFromFile(indexPath)
62-
return nil
60+
_, err = pmbuilder.LoadPackageIndexFromFile(indexPath)
61+
if err != nil {
62+
logrus.Error(err)
63+
}
64+
return err
6365
}
6466

6567
// GetFirmwareIndex downloads and loads the arduino-fwuploader module_firmware_index.json
66-
func GetFirmwareIndex() (*firmwareindex.Index, error) {
67-
indexPath, err := download.DownloadIndex(globals.ModuleFirmwareIndexGZURL)
68+
func GetFirmwareIndex(indexUrl string) (*firmwareindex.Index, error) {
69+
indexPath, err := download.DownloadIndex(indexUrl)
6870
if err != nil {
6971
logrus.Error(err)
7072
return nil, err

Diff for: indexes/indexes_test.go

+5-16
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,19 @@ package indexes
2121
import (
2222
"testing"
2323

24-
"github.com/arduino/arduino-cli/arduino/cores/packageindex"
25-
"github.com/arduino/go-paths-helper"
24+
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
25+
"github.com/arduino/arduino-fwuploader/cli/globals"
2626
"github.com/stretchr/testify/require"
2727
)
2828

29-
func TestGetToolRelease(t *testing.T) {
30-
indexFile := paths.New("testdata/package_index.json")
31-
index, err := packageindex.LoadIndexNoSign(indexFile)
32-
require.NoError(t, err)
33-
toolRelease := GetToolRelease(index, "arduino:[email protected]")
34-
35-
require.Equal(t, toolRelease.Version.String(), "1.7.0-arduino3")
36-
require.Equal(t, toolRelease.Tool.Name, "bossac")
37-
require.NotEmpty(t, toolRelease.Flavors)
38-
}
39-
4029
func TestGetPackageIndex(t *testing.T) {
41-
index, err := GetPackageIndex()
30+
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "")
31+
err := GetPackageIndex(pmb, globals.PackageIndexGZURL)
4232
require.NoError(t, err)
43-
require.NotNil(t, index)
4433
}
4534

4635
func TestGetFirmwareIndex(t *testing.T) {
47-
index, err := GetFirmwareIndex()
36+
index, err := GetFirmwareIndex(globals.ModuleFirmwareIndexGZURL)
4837
require.NoError(t, err)
4938
require.NotNil(t, index)
5039
}

0 commit comments

Comments
 (0)