Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions arduino/cores/packagemanager/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ import (

// LoadHardware read all plaforms from the configured paths
func (pm *PackageManager) LoadHardware() error {
dirs := configuration.HardwareDirectories()
dirs := configuration.HardwareDirectories(configuration.Settings)
if err := pm.LoadHardwareFromDirectories(dirs); err != nil {
return err
}

dirs = configuration.BundleToolsDirectories()
dirs = configuration.BundleToolsDirectories(configuration.Settings)
return pm.LoadToolsFromBundleDirectories(dirs)
}

Expand Down
7 changes: 3 additions & 4 deletions arduino/cores/packagemanager/package_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/arduino/arduino-cli/configuration"
"github.com/arduino/go-paths-helper"
"github.com/arduino/go-properties-orderedmap"
"github.com/spf13/viper"
"github.com/stretchr/testify/require"
semver "go.bug.st/relaxed-semver"
)
Expand Down Expand Up @@ -213,11 +212,11 @@ func TestBoardOptionsFunctions(t *testing.T) {

func TestFindToolsRequiredForBoard(t *testing.T) {
os.Setenv("ARDUINO_DATA_DIR", dataDir1.String())
configuration.Init("")
configuration.Settings = configuration.Init("")
pm := packagemanager.NewPackageManager(
dataDir1,
configuration.PackagesDir(),
paths.New(viper.GetString("directories.Downloads")),
configuration.PackagesDir(configuration.Settings),
paths.New(configuration.Settings.GetString("directories.Downloads")),
dataDir1,
)

Expand Down
4 changes: 2 additions & 2 deletions cli/cache/clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import (

"github.com/arduino/arduino-cli/cli/errorcodes"
"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/configuration"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

func initCleanCommand() *cobra.Command {
Expand All @@ -40,7 +40,7 @@ func initCleanCommand() *cobra.Command {
func runCleanCommand(cmd *cobra.Command, args []string) {
logrus.Info("Executing `arduino cache clean`")

cachePath := viper.GetString("directories.Downloads")
cachePath := configuration.Settings.GetString("directories.Downloads")
err := os.RemoveAll(cachePath)
if err != nil {
feedback.Errorf("Error cleaning caches: %v", err)
Expand Down
19 changes: 8 additions & 11 deletions cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ import (
"github.com/arduino/arduino-cli/cli/upgrade"
"github.com/arduino/arduino-cli/cli/upload"
"github.com/arduino/arduino-cli/cli/version"
"github.com/arduino/arduino-cli/configuration"
"github.com/arduino/arduino-cli/i18n"
"github.com/arduino/arduino-cli/inventory"
"github.com/mattn/go-colorable"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

var (
Expand Down Expand Up @@ -99,15 +99,12 @@ func createCliCommandTree(cmd *cobra.Command) {

cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Print the logs on the standard output.")
cmd.PersistentFlags().String("log-level", "", "Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic")
viper.BindPFlag("logging.level", cmd.PersistentFlags().Lookup("log-level"))
cmd.PersistentFlags().String("log-file", "", "Path to the file where logs will be written.")
viper.BindPFlag("logging.file", cmd.PersistentFlags().Lookup("log-file"))
cmd.PersistentFlags().String("log-format", "", "The output format for the logs, can be {text|json}.")
viper.BindPFlag("logging.format", cmd.PersistentFlags().Lookup("log-format"))
cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", "The output format, can be {text|json}.")
cmd.PersistentFlags().StringVar(&configFile, "config-file", "", "The custom config file (if not specified the default will be used).")
cmd.PersistentFlags().StringSlice("additional-urls", []string{}, "Comma-separated list of additional URLs for the Boards Manager.")
viper.BindPFlag("board_manager.additional_urls", cmd.PersistentFlags().Lookup("additional-urls"))
configuration.BindFlags(cmd, configuration.Settings)
}

// convert the string passed to the `--log-level` option to the corresponding
Expand Down Expand Up @@ -136,10 +133,10 @@ func parseFormatString(arg string) (feedback.OutputFormat, bool) {
}

func preRun(cmd *cobra.Command, args []string) {
configFile := viper.ConfigFileUsed()
configFile := configuration.Settings.ConfigFileUsed()

// initialize inventory
inventory.Init(viper.GetString("directories.Data"))
inventory.Init(configuration.Settings.GetString("directories.Data"))

//
// Prepare logging
Expand All @@ -157,13 +154,13 @@ func preRun(cmd *cobra.Command, args []string) {
}

// set the Logger format
logFormat := strings.ToLower(viper.GetString("logging.format"))
logFormat := strings.ToLower(configuration.Settings.GetString("logging.format"))
if logFormat == "json" {
logrus.SetFormatter(&logrus.JSONFormatter{})
}

// should we log to file?
logFile := viper.GetString("logging.file")
logFile := configuration.Settings.GetString("logging.file")
if logFile != "" {
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
Expand All @@ -180,8 +177,8 @@ func preRun(cmd *cobra.Command, args []string) {
}

// configure logging filter
if lvl, found := toLogLevel(viper.GetString("logging.level")); !found {
feedback.Errorf("Invalid option for --log-level: %s", viper.GetString("logging.level"))
if lvl, found := toLogLevel(configuration.Settings.GetString("logging.level")); !found {
feedback.Errorf("Invalid option for --log-level: %s", configuration.Settings.GetString("logging.level"))
os.Exit(errorcodes.ErrBadArgument)
} else {
logrus.SetLevel(lvl)
Expand Down
4 changes: 2 additions & 2 deletions cli/compile/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"os"

"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/configuration"

"github.com/arduino/arduino-cli/cli/errorcodes"
"github.com/arduino/arduino-cli/cli/instance"
Expand All @@ -29,7 +30,6 @@ import (
"github.com/arduino/go-paths-helper"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

var (
Expand Down Expand Up @@ -124,7 +124,7 @@ func run(cmd *cobra.Command, args []string) {
Libraries: libraries,
OptimizeForDebug: optimizeForDebug,
Clean: clean,
}, os.Stdout, os.Stderr, viper.GetString("logging.level") == "debug")
}, os.Stdout, os.Stderr, configuration.Settings.GetString("logging.level") == "debug")

if err != nil {
feedback.Errorf("Error during build: %v", err)
Expand Down
4 changes: 2 additions & 2 deletions cli/config/dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import (
"os"

"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/configuration"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gopkg.in/yaml.v2"
)

Expand Down Expand Up @@ -59,5 +59,5 @@ func (dr dumpResult) String() string {

func runDumpCommand(cmd *cobra.Command, args []string) {
logrus.Info("Executing `arduino config dump`")
feedback.PrintResult(dumpResult{viper.AllSettings()})
feedback.PrintResult(dumpResult{configuration.Settings.AllSettings()})
}
61 changes: 49 additions & 12 deletions cli/config/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,21 @@ package config

import (
"os"
"path/filepath"

"github.com/arduino/arduino-cli/cli/errorcodes"
"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/configuration"
"github.com/arduino/go-paths-helper"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

var destDir string
var (
destDir string
destFile string
overwrite bool
)

const defaultFileName = "arduino-cli.yaml"

Expand All @@ -37,39 +42,71 @@ func initInitCommand() *cobra.Command {
Long: "Creates or updates the configuration file in the data directory or custom directory with the current configuration settings.",
Example: "" +
" # Writes current configuration to the configuration file in the data directory.\n" +
" " + os.Args[0] + " config init",
" " + os.Args[0] + " config init" +
" " + os.Args[0] + " config init --dest-dir /home/user/MyDirectory" +
" " + os.Args[0] + " config init --dest-file /home/user/MyDirectory/my_settings.yaml",
Args: cobra.NoArgs,
Run: runInitCommand,
}
initCommand.Flags().StringVar(&destDir, "dest-dir", "", "Sets where to save the configuration file.")
initCommand.Flags().StringVar(&destFile, "dest-file", "", "Sets where to save the configuration file.")
initCommand.Flags().BoolVar(&overwrite, "overwrite", false, "Overwrite existing config file.")
return initCommand
}

func runInitCommand(cmd *cobra.Command, args []string) {
if destDir == "" {
destDir = viper.GetString("directories.Data")
if destFile != "" && destDir != "" {
feedback.Errorf("Can't use both --dest-file and --dest-dir flags at the same time.")
os.Exit(errorcodes.ErrGeneric)
}

absPath, err := filepath.Abs(destDir)
if err != nil {
feedback.Errorf("Cannot find absolute path: %v", err)
var configFileAbsPath *paths.Path
var absPath *paths.Path
var err error

switch {
case destFile != "":
configFileAbsPath, err = paths.New(destFile).Abs()
if err != nil {
feedback.Errorf("Cannot find absolute path: %v", err)
os.Exit(errorcodes.ErrGeneric)
}

absPath = configFileAbsPath.Parent()
case destDir == "":
destDir = configuration.Settings.GetString("directories.Data")
fallthrough
default:
absPath, err = paths.New(destDir).Abs()
if err != nil {
feedback.Errorf("Cannot find absolute path: %v", err)
os.Exit(errorcodes.ErrGeneric)
}
configFileAbsPath = absPath.Join(defaultFileName)
}

if !overwrite && configFileAbsPath.Exist() {
feedback.Error("Config file already exists, use --overwrite to discard the existing one.")
os.Exit(errorcodes.ErrGeneric)
}
configFileAbsPath := filepath.Join(absPath, defaultFileName)

logrus.Infof("Writing config file to: %s", absPath)

if err := os.MkdirAll(absPath, os.FileMode(0755)); err != nil {
if err := absPath.MkdirAll(); err != nil {
feedback.Errorf("Cannot create config file directory: %v", err)
os.Exit(errorcodes.ErrGeneric)
}

if err := viper.WriteConfigAs(configFileAbsPath); err != nil {
newSettings := viper.New()
configuration.SetDefaults(newSettings)
configuration.BindFlags(cmd, newSettings)

if err := newSettings.WriteConfigAs(configFileAbsPath.String()); err != nil {
feedback.Errorf("Cannot create config file: %v", err)
os.Exit(errorcodes.ErrGeneric)
}

msg := "Config file written to: " + configFileAbsPath
msg := "Config file written to: " + configFileAbsPath.String()
logrus.Info(msg)
feedback.Print(msg)
}
12 changes: 6 additions & 6 deletions cli/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/cli/globals"
"github.com/arduino/arduino-cli/commands/daemon"
"github.com/arduino/arduino-cli/configuration"
srv_commands "github.com/arduino/arduino-cli/rpc/commands"
srv_debug "github.com/arduino/arduino-cli/rpc/debug"
srv_monitor "github.com/arduino/arduino-cli/rpc/monitor"
Expand All @@ -36,22 +37,21 @@ import (
"github.com/segmentio/stats/v4"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"google.golang.org/grpc"
)

// NewCommand created a new `daemon` command
func NewCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "daemon",
Short: fmt.Sprintf("Run as a daemon on port %s", viper.GetString("daemon.port")),
Short: fmt.Sprintf("Run as a daemon on port %s", configuration.Settings.GetString("daemon.port")),
Long: "Running as a daemon the initialization of cores and libraries is done only once.",
Example: " " + os.Args[0] + " daemon",
Args: cobra.NoArgs,
Run: runDaemonCommand,
}
cmd.PersistentFlags().String("port", "", "The TCP port the daemon will listen to")
viper.BindPFlag("daemon.port", cmd.PersistentFlags().Lookup("port"))
configuration.Settings.BindPFlag("daemon.port", cmd.PersistentFlags().Lookup("port"))
cmd.Flags().BoolVar(&daemonize, "daemonize", false, "Do not terminate daemon process if the parent process dies")
return cmd
}
Expand All @@ -60,16 +60,16 @@ var daemonize bool

func runDaemonCommand(cmd *cobra.Command, args []string) {

if viper.GetBool("telemetry.enabled") {
if configuration.Settings.GetBool("telemetry.enabled") {
telemetry.Activate("daemon")
stats.Incr("daemon", stats.T("success", "true"))
defer stats.Flush()
}
port := viper.GetString("daemon.port")
port := configuration.Settings.GetString("daemon.port")
s := grpc.NewServer()

// Set specific user-agent for the daemon
viper.Set("network.user_agent_ext", "daemon")
configuration.Settings.Set("network.user_agent_ext", "daemon")

// register the commands service
srv_commands.RegisterArduinoCoreServer(s, &daemon.ArduinoCoreServerImpl{
Expand Down
9 changes: 9 additions & 0 deletions commands/board/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,19 @@ import (
"testing"

"github.com/arduino/arduino-cli/commands"
"github.com/arduino/arduino-cli/configuration"
"github.com/arduino/go-properties-orderedmap"
"github.com/stretchr/testify/require"
)

func init() {
configuration.Settings = configuration.Init("")
}

func reset() {
configuration.Settings = configuration.Init("")
}

func TestGetByVidPid(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, `
Expand Down
9 changes: 4 additions & 5 deletions commands/compile/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ import (
"github.com/pkg/errors"
"github.com/segmentio/stats/v4"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)

// Compile FIXMEDOC
Expand Down Expand Up @@ -122,11 +121,11 @@ func Compile(ctx context.Context, req *rpc.CompileReq, outStream, errStream io.W
builderCtx.SketchLocation = sketch.FullPath

// FIXME: This will be redundant when arduino-builder will be part of the cli
builderCtx.HardwareDirs = configuration.HardwareDirectories()
builderCtx.BuiltInToolsDirs = configuration.BundleToolsDirectories()
builderCtx.HardwareDirs = configuration.HardwareDirectories(configuration.Settings)
builderCtx.BuiltInToolsDirs = configuration.BundleToolsDirectories(configuration.Settings)

builderCtx.OtherLibrariesDirs = paths.NewPathList(req.GetLibraries()...)
builderCtx.OtherLibrariesDirs.Add(configuration.LibrariesDir())
builderCtx.OtherLibrariesDirs.Add(configuration.LibrariesDir(configuration.Settings))

if req.GetBuildPath() != "" {
builderCtx.BuildPath = paths.New(req.GetBuildPath())
Expand Down Expand Up @@ -168,7 +167,7 @@ func Compile(ctx context.Context, req *rpc.CompileReq, outStream, errStream io.W
builderCtx.ArduinoAPIVersion = "10607"

// Check if Arduino IDE is installed and get it's libraries location.
dataDir := paths.New(viper.GetString("directories.Data"))
dataDir := paths.New(configuration.Settings.GetString("directories.Data"))
preferencesTxt := dataDir.Join("preferences.txt")
ideProperties, err := properties.LoadFromPath(preferencesTxt)
if err == nil {
Expand Down
2 changes: 1 addition & 1 deletion commands/core/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func TestPlatformSearch(t *testing.T) {
err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json"))
require.Nil(t, err)

configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String())
configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String())

inst, err := instance.CreateInstance()
require.Nil(t, err)
Expand Down
Loading