Skip to content

Commit 411f10d

Browse files
committed
Initial commit
1 parent df8c924 commit 411f10d

File tree

6 files changed

+46
-1
lines changed

6 files changed

+46
-1
lines changed

commands/daemon/testdata/arduino-cli.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ board_manager:
22
additional_urls:
33
- http://foobar.com
44
- http://example.com
5+
additional_paths: []
56

67
daemon:
78
port: "50051"

commands/instances.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,30 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexReq, downloadCB Downlo
200200
}
201201

202202
indexpath := paths.New(configuration.Settings.GetString("directories.Data"))
203+
json_paths := []string{}
204+
json_paths = append(json_paths, configuration.Settings.GetStringSlice("board_manager.additional_paths")...)
205+
for _, x := range json_paths {
206+
//path_to_json, err := paths.New(x).Abs()
207+
path_to_json := indexpath.Join(x)
208+
209+
if _, err := packageindex.LoadIndex(path_to_json); err != nil {
210+
return nil, fmt.Errorf("invalid package index in %s: %s", path_to_json, err)
211+
}
212+
213+
if err := indexpath.MkdirAll(); err != nil {
214+
return nil, fmt.Errorf("can't create data directory %s: %s", indexpath, err)
215+
}
216+
217+
//may not be necessary
218+
//coreIndexPath := indexpath.Join(path.Base(path_to_json.Path))
219+
//if err := tmp.CopyTo(coreIndexPath); err != nil {
220+
// return nil, fmt.Errorf("saving downloaded index %s: %s", path_to_json, err)
221+
//}
222+
}
203223
urls := []string{globals.DefaultIndexURL}
204224
urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...)
205225
for _, u := range urls {
226+
logrus.Info("URL: %s", u)
206227
URL, err := url.Parse(u)
207228
if err != nil {
208229
logrus.Warnf("unable to parse additional URL: %s", u)
@@ -238,7 +259,7 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexReq, downloadCB Downlo
238259
// Check for signature
239260
var tmpSig *paths.Path
240261
var coreIndexSigPath *paths.Path
241-
if URL.Hostname() == "downloads.arduino.cc" {
262+
if URL.Hostname() == "downloads.WRONG.net" {
242263
URLSig, err := url.Parse(URL.String())
243264
if err != nil {
244265
return nil, fmt.Errorf("parsing url for index signature check: %s", err)
@@ -649,6 +670,19 @@ func createInstance(ctx context.Context, getLibOnly bool) (*createInstanceResult
649670
}
650671
}
651672

673+
indexpath := paths.New(configuration.Settings.GetString("directories.Data"))
674+
json_paths := []string{}
675+
json_paths = append(json_paths, configuration.Settings.GetStringSlice("board_manager.additional_paths")...)
676+
for _, x := range json_paths {
677+
//path_to_json, err := paths.New(x).Abs()
678+
path_to_json := indexpath.Join(x)
679+
680+
_, err := res.Pm.LoadPackageIndexFromFile(path_to_json)
681+
if err != nil {
682+
res.PlatformIndexErrors = append(res.PlatformIndexErrors, err.Error())
683+
}
684+
}
685+
652686
if err := res.Pm.LoadHardware(); err != nil {
653687
return res, fmt.Errorf("error loading hardware packages: %s", err)
654688
}

configuration/configuration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ func BindFlags(cmd *cobra.Command, settings *viper.Viper) {
7676
settings.BindPFlag("logging.file", cmd.Flag("log-file"))
7777
settings.BindPFlag("logging.format", cmd.Flag("log-format"))
7878
settings.BindPFlag("board_manager.additional_urls", cmd.Flag("additional-urls"))
79+
settings.BindPFlag("board_manager.additional_paths", cmd.Flag("additional-paths"))
7980
}
8081

8182
// getDefaultArduinoDataDir returns the full path to the default arduino folder

configuration/configuration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func TestInit(t *testing.T) {
8989
require.Equal(t, "text", settings.GetString("logging.format"))
9090

9191
require.Empty(t, settings.GetStringSlice("board_manager.additional_urls"))
92+
require.Empty(t, settings.GetStringSlice("board_manager.additional_paths"))
9293

9394
require.NotEmpty(t, settings.GetString("directories.Data"))
9495
require.NotEmpty(t, settings.GetString("directories.Downloads"))

configuration/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func SetDefaults(settings *viper.Viper) {
3333

3434
// Boards Manager
3535
settings.SetDefault("board_manager.additional_urls", []string{})
36+
settings.SetDefault("board_manager.additional_paths", []string{})
3637

3738
// arduino directories
3839
settings.SetDefault("directories.Data", getDefaultArduinoDataDir())

docs/configuration.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- `board_manager`
44
- `additional_urls` - the URLs to any additional Boards Manager package index files needed for your boards platforms.
5+
- `additional_paths` - the file paths to any additional Boards Manager package index files needed for your boards platforms.
56
- `daemon` - options related to running Arduino CLI as a [gRPC] server.
67
- `port` - TCP port used for gRPC client connections.
78
- `directories` - directories used by Arduino CLI.
@@ -66,6 +67,12 @@ Setting an additional Boards Manager URL using the `ARDUINO_BOARD_MANAGER_ADDITI
6667
$ export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS=https://downloads.arduino.cc/packages/package_staging_index.json
6768
```
6869

70+
Setting an additional Boards Manager URL using the `ARDUINO_BOARD_MANAGER_ADDITIONAL_PATHS` environment variable:
71+
72+
```sh
73+
$ export ARDUINO_BOARD_MANAGER_ADDITIONAL_PATHS=packages/package_staging_index.json
74+
```
75+
6976
### Configuration file
7077

7178
[`arduino-cli config init`][arduino-cli config init] creates or updates a configuration file with the current

0 commit comments

Comments
 (0)