diff --git a/cli/cli.go b/cli/cli.go index cbfab85eb77..ee32b40a154 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -78,6 +78,7 @@ func createCliCommandTree(cmd *cobra.Command) { cmd.PersistentFlags().BoolVar(&globals.Debug, "debug", false, "Enables debug output (super verbose, used to debug the CLI).") cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", "The output format, can be [text|json].") cmd.PersistentFlags().StringVar(&globals.YAMLConfigFile, "config-file", "", "The custom config file (if not specified the default will be used).") + cmd.PersistentFlags().StringSliceVar(&globals.AdditionalUrls, "additional-urls", []string{}, "Additional URLs for the board manager.") } func preRun(cmd *cobra.Command, args []string) { diff --git a/cli/globals/globals.go b/cli/globals/globals.go index 556b125b69f..92e831afba3 100644 --- a/cli/globals/globals.go +++ b/cli/globals/globals.go @@ -39,6 +39,8 @@ var ( Config *configs.Configuration // YAMLConfigFile contains the path to the config file YAMLConfigFile string + // AdditionalUrls contains the list of additional urls the boards manager can use + AdditionalUrls []string ) func getHTTPClientHeader() http.Header { diff --git a/cli/instance/instance.go b/cli/instance/instance.go index 76604d4beb8..d7e73eded0e 100644 --- a/cli/instance/instance.go +++ b/cli/instance/instance.go @@ -62,6 +62,11 @@ func initInstance() *rpc.InitResp { func packageManagerInitReq() *rpc.InitReq { urls := []string{} + + for _, urlString := range globals.AdditionalUrls { + urls = append(urls, urlString) + } + for _, URL := range globals.Config.BoardManagerAdditionalUrls { urls = append(urls, URL.String()) } diff --git a/test/test_board.py b/test/test_board.py index 76351e1f4b3..66f3b198f5c 100644 --- a/test/test_board.py +++ b/test/test_board.py @@ -19,7 +19,7 @@ @pytest.mark.skipif(running_on_ci(), reason="VMs have no serial ports") -def test_board_list(run_command): +def test_core_list(run_command): result = run_command("core update-index") assert result.ok result = run_command("board list --format json") @@ -33,9 +33,29 @@ def test_board_list(run_command): @pytest.mark.skipif(running_on_ci(), reason="VMs have no serial ports") -def test_board_listall(run_command): +def test_core_listall(run_command): assert run_command("core update-index") result = run_command("board listall") print(result.stderr, result.stdout) assert result.ok assert ["Board", "Name", "FQBN"] == result.stdout.splitlines()[0].strip().split() + + +def test_core_search(run_command): + url = "https://raw.githubusercontent.com/arduino/arduino-cli/master/test/testdata/test_index.json" + assert run_command("core update-index --additional-urls={}".format(url)) + # default search + result = run_command("core search avr") + assert result.ok + assert 2 < len(result.stdout.splitlines()) + result = run_command("core search avr --format json") + assert result.ok + data = json.loads(result.stdout) + assert 0 < len(data) + # additional URL + result = run_command( + "core search test_core --format json --additional-urls={}".format(url) + ) + assert result.ok + data = json.loads(result.stdout) + assert 1 == len(data) diff --git a/test/testdata/core.txt b/test/testdata/core.txt new file mode 100644 index 00000000000..72c5593cdcb --- /dev/null +++ b/test/testdata/core.txt @@ -0,0 +1 @@ +HELO diff --git a/test/testdata/test_index.json b/test/testdata/test_index.json new file mode 100644 index 00000000000..d84277fbc13 --- /dev/null +++ b/test/testdata/test_index.json @@ -0,0 +1,35 @@ +{ + "packages": [ + { + "maintainer": "Arduino", + "help": { + "online": "https://github.com/Arduino/arduino-cli" + }, + "websiteURL": "https://github.com/Arduino/arduino-cli", + "platforms": [ + { + "category": "Test Category", + "help": { + "online": "https://github.com/Arduino/arduino-cli" + }, + "url": "https://raw.githubusercontent.com/arduino/arduino-cli/massi/additional-urls/test/testdata/core.txt", + "checksum": "SHA-256:1ba93f6aea56842dfef065c0f5eb0a34c1f78b72b3f2426c94e47ba3a359c9ff", + "name": "test_core", + "version": "1.0.0", + "architecture": "x86", + "archiveFileName": "core.txt", + "size": "2799", + "toolsDependencies": [], + "boards": [ + { + "name": "Test Board" + } + ] + } + ], + "tools": [], + "email": "test@example.com", + "name": "test" + } + ] +}