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
5 changes: 4 additions & 1 deletion commands/errors.go → arduino/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,19 @@
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to [email protected].

package commands
package arduino

import (
"fmt"

"github.com/arduino/arduino-cli/i18n"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

var tr = i18n.Tr

func composeErrorMsg(msg string, cause error) string {
if cause == nil {
return msg
Expand Down
4 changes: 2 additions & 2 deletions cli/core/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import (
"fmt"
"os"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/cli/arguments"
"github.com/arduino/arduino-cli/cli/errorcodes"
"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/cli/instance"
"github.com/arduino/arduino-cli/cli/output"
"github.com/arduino/arduino-cli/commands"
"github.com/arduino/arduino-cli/commands/core"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -97,7 +97,7 @@ func runUpgradeCommand(cmd *cobra.Command, args []string) {
}

if _, err := core.PlatformUpgrade(context.Background(), r, output.ProgressBar(), output.TaskProgress()); err != nil {
if errors.Is(err, &commands.PlatformAlreadyAtTheLatestVersionError{}) {
if errors.Is(err, &arduino.PlatformAlreadyAtTheLatestVersionError{}) {
feedback.Print(err.Error())
continue
}
Expand Down
13 changes: 7 additions & 6 deletions commands/board/attach.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"strings"
"time"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/cores"
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
"github.com/arduino/arduino-cli/arduino/sketch"
Expand All @@ -38,15 +39,15 @@ var tr = i18n.Tr
func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.TaskProgressCB) (*rpc.BoardAttachResponse, error) {
pm := commands.GetPackageManager(req.GetInstance().GetId())
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}
var sketchPath *paths.Path
if req.GetSketchPath() != "" {
sketchPath = paths.New(req.GetSketchPath())
}
sk, err := sketch.New(sketchPath)
if err != nil {
return nil, &commands.CantOpenSketchError{Cause: err}
return nil, &arduino.CantOpenSketchError{Cause: err}
}

boardURI := req.GetBoardUri()
Expand All @@ -62,7 +63,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
} else {
deviceURI, err := url.Parse(boardURI)
if err != nil {
return nil, &commands.InvalidArgumentError{Message: tr("Invalid Device URL format"), Cause: err}
return nil, &arduino.InvalidArgumentError{Message: tr("Invalid Device URL format"), Cause: err}
}

var findBoardFunc func(*packagemanager.PackageManager, *discovery.Monitor, *url.URL) *cores.Board
Expand All @@ -72,7 +73,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
case "http", "https", "tcp", "udp":
findBoardFunc = findNetworkConnectedBoard
default:
return nil, &commands.InvalidArgumentError{Message: tr("Invalid device port type provided")}
return nil, &arduino.InvalidArgumentError{Message: tr("Invalid device port type provided")}
}

duration, err := time.ParseDuration(req.GetSearchTimeout())
Expand All @@ -88,7 +89,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
// TODO: Handle the case when no board is found.
board := findBoardFunc(pm, monitor, deviceURI)
if board == nil {
return nil, &commands.InvalidArgumentError{Message: tr("No supported board found at %s", deviceURI)}
return nil, &arduino.InvalidArgumentError{Message: tr("No supported board found at %s", deviceURI)}
}
taskCB(&rpc.TaskProgress{Name: tr("Board found: %s", board.Name())})

Expand All @@ -103,7 +104,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta

err = sk.ExportMetadata()
if err != nil {
return nil, &commands.PermissionDeniedError{Message: tr("Cannot export sketch metadata"), Cause: err}
return nil, &arduino.PermissionDeniedError{Message: tr("Cannot export sketch metadata"), Cause: err}
}
taskCB(&rpc.TaskProgress{Name: tr("Selected fqbn: %s", sk.Metadata.CPU.Fqbn), Completed: true})
return &rpc.BoardAttachResponse{}, nil
Expand Down
7 changes: 4 additions & 3 deletions commands/board/details.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package board
import (
"context"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/cores"
"github.com/arduino/arduino-cli/commands"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand All @@ -28,17 +29,17 @@ import (
func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) {
pm := commands.GetPackageManager(req.GetInstance().GetId())
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}

fqbn, err := cores.ParseFQBN(req.GetFqbn())
if err != nil {
return nil, &commands.InvalidFQBNError{Cause: err}
return nil, &arduino.InvalidFQBNError{Cause: err}
}

boardPackage, boardPlatform, board, boardProperties, boardRefPlatform, err := pm.ResolveFQBN(fqbn)
if err != nil {
return nil, &commands.UnknownFQBNError{Cause: err}
return nil, &arduino.UnknownFQBNError{Cause: err}
}

details := &rpc.BoardDetailsResponse{}
Expand Down
13 changes: 7 additions & 6 deletions commands/board/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"strings"
"time"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
"github.com/arduino/arduino-cli/arduino/discovery"
"github.com/arduino/arduino-cli/commands"
Expand Down Expand Up @@ -143,7 +144,7 @@ func identify(pm *packagemanager.PackageManager, port *discovery.Port) ([]*rpc.B
logrus.Debug("Board not recognized")
} else if err != nil {
// this is bad, bail out
return nil, &commands.UnavailableError{Message: tr("Error getting board info from Arduino Cloud")}
return nil, &arduino.UnavailableError{Message: tr("Error getting board info from Arduino Cloud")}
}

// add a DetectedPort entry in any case: the `Boards` field will
Expand Down Expand Up @@ -188,15 +189,15 @@ func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, e error) {

pm := commands.GetPackageManager(req.GetInstance().Id)
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}

dm := pm.DiscoveryManager()
if errs := dm.RunAll(); len(errs) > 0 {
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
}
if errs := dm.StartAll(); len(errs) > 0 {
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
}
defer func() {
if errs := dm.StopAll(); len(errs) > 0 {
Expand All @@ -208,7 +209,7 @@ func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, e error) {
retVal := []*rpc.DetectedPort{}
ports, errs := pm.DiscoveryManager().List()
if len(errs) > 0 {
return nil, &commands.UnavailableError{Message: tr("Error getting board list"), Cause: fmt.Errorf("%v", errs)}
return nil, &arduino.UnavailableError{Message: tr("Error getting board list"), Cause: fmt.Errorf("%v", errs)}
}
for _, port := range ports {
boards, err := identify(pm, port)
Expand Down Expand Up @@ -237,7 +238,7 @@ func Watch(instanceID int32, interrupt <-chan bool) (<-chan *rpc.BoardListWatchR
runErrs := dm.RunAll()
if len(runErrs) == len(dm.IDs()) {
// All discoveries failed to run, we can't do anything
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", runErrs)}
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", runErrs)}
}

eventsChan, errs := dm.StartSyncAll()
Expand Down
3 changes: 2 additions & 1 deletion commands/board/listall.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"context"
"strings"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/utils"
"github.com/arduino/arduino-cli/commands"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand All @@ -28,7 +29,7 @@ import (
func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) {
pm := commands.GetPackageManager(req.GetInstance().GetId())
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}

searchArgs := strings.Join(req.GetSearchArgs(), " ")
Expand Down
3 changes: 2 additions & 1 deletion commands/board/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"sort"
"strings"

"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/utils"
"github.com/arduino/arduino-cli/commands"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand All @@ -32,7 +33,7 @@ import (
func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) {
pm := commands.GetPackageManager(req.GetInstance().GetId())
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}

res := &rpc.BoardSearchResponse{Boards: []*rpc.BoardListItem{}}
Expand Down
3 changes: 2 additions & 1 deletion commands/bundled_tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package commands

import (
"github.com/arduino/arduino-cli/arduino"
"github.com/arduino/arduino-cli/arduino/cores"
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand Down Expand Up @@ -49,7 +50,7 @@ func InstallToolRelease(pm *packagemanager.PackageManager, toolRelease *cores.To
err := pm.InstallTool(toolRelease)
if err != nil {
log.WithError(err).Warn("Cannot install tool")
return &FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
}
log.Info("Tool installed")
taskCB(&rpc.TaskProgress{Message: tr("%s installed", toolRelease), Completed: true})
Expand Down
35 changes: 18 additions & 17 deletions commands/compile/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ package compile

import (
"context"
"errors"
"fmt"
"io"
"path/filepath"
"sort"
"strconv"
"strings"

"github.com/arduino/arduino-cli/arduino"
bldr "github.com/arduino/arduino-cli/arduino/builder"
"github.com/arduino/arduino-cli/arduino/cores"
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
Expand Down Expand Up @@ -89,29 +90,29 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream

pm := commands.GetPackageManager(req.GetInstance().GetId())
if pm == nil {
return nil, &commands.InvalidInstanceError{}
return nil, &arduino.InvalidInstanceError{}
}

logrus.Tracef("Compile %s for %s started", req.GetSketchPath(), req.GetFqbn())
if req.GetSketchPath() == "" {
return nil, &commands.MissingSketchPathError{}
return nil, &arduino.MissingSketchPathError{}
}
sketchPath := paths.New(req.GetSketchPath())
sk, err := sketch.New(sketchPath)
if err != nil {
return nil, &commands.CantOpenSketchError{Cause: err}
return nil, &arduino.CantOpenSketchError{Cause: err}
}

fqbnIn := req.GetFqbn()
if fqbnIn == "" && sk != nil && sk.Metadata != nil {
fqbnIn = sk.Metadata.CPU.Fqbn
}
if fqbnIn == "" {
return nil, &commands.MissingFQBNError{}
return nil, &arduino.MissingFQBNError{}
}
fqbn, err := cores.ParseFQBN(fqbnIn)
if err != nil {
return nil, &commands.InvalidFQBNError{Cause: err}
return nil, &arduino.InvalidFQBNError{Cause: err}
}

targetPlatform := pm.FindPlatform(&packagemanager.PlatformReference{
Expand All @@ -124,7 +125,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
// "\"%[1]s:%[2]s\" platform is not installed, please install it by running \""+
// version.GetAppName()+" core install %[1]s:%[2]s\".", fqbn.Package, fqbn.PlatformArch)
// feedback.Error(errorMessage)
return nil, &commands.PlatformNotFound{Platform: targetPlatform.String(), Cause: errors.New(tr("platform not installed"))}
return nil, &arduino.PlatformNotFound{Platform: targetPlatform.String(), Cause: fmt.Errorf(tr("platform not installed"))}
}

builderCtx := &types.Context{}
Expand All @@ -147,7 +148,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
builderCtx.BuildPath = paths.New(req.GetBuildPath()).Canonical()
}
if err = builderCtx.BuildPath.MkdirAll(); err != nil {
return nil, &commands.PermissionDeniedError{Message: tr("Cannot create build directory"), Cause: err}
return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build directory"), Cause: err}
}
builderCtx.CompilationDatabase = bldr.NewCompilationDatabase(
builderCtx.BuildPath.Join("compile_commands.json"),
Expand Down Expand Up @@ -177,7 +178,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
builderCtx.BuildCachePath = paths.New(req.GetBuildCachePath())
err = builderCtx.BuildCachePath.MkdirAll()
if err != nil {
return nil, &commands.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err}
return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err}
}
}

Expand Down Expand Up @@ -222,20 +223,20 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
if req.GetShowProperties() {
compileErr := builder.RunParseHardwareAndDumpBuildProperties(builderCtx)
if compileErr != nil {
compileErr = &commands.CompileFailedError{Message: err.Error()}
compileErr = &arduino.CompileFailedError{Message: err.Error()}
}
return r, compileErr
} else if req.GetPreprocess() {
compileErr := builder.RunPreprocess(builderCtx)
if compileErr != nil {
compileErr = &commands.CompileFailedError{Message: err.Error()}
compileErr = &arduino.CompileFailedError{Message: err.Error()}
}
return r, compileErr
}

// if it's a regular build, go on...
if err := builder.RunBuilder(builderCtx); err != nil {
return r, &commands.CompileFailedError{Message: err.Error()}
return r, &arduino.CompileFailedError{Message: err.Error()}
}

// If the export directory is set we assume you want to export the binaries
Expand All @@ -257,17 +258,17 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
}
logrus.WithField("path", exportPath).Trace("Saving sketch to export path.")
if err := exportPath.MkdirAll(); err != nil {
return r, &commands.PermissionDeniedError{Message: tr("Error creating output dir"), Cause: err}
return r, &arduino.PermissionDeniedError{Message: tr("Error creating output dir"), Cause: err}
}

// Copy all "sketch.ino.*" artifacts to the export directory
baseName, ok := builderCtx.BuildProperties.GetOk("build.project_name") // == "sketch.ino"
if !ok {
return r, &commands.MissingPlatformPropertyError{Property: "build.project_name"}
return r, &arduino.MissingPlatformPropertyError{Property: "build.project_name"}
}
buildFiles, err := builderCtx.BuildPath.ReadDir()
if err != nil {
return r, &commands.PermissionDeniedError{Message: tr("Error reading build directory"), Cause: err}
return r, &arduino.PermissionDeniedError{Message: tr("Error reading build directory"), Cause: err}
}
buildFiles.FilterPrefix(baseName)
for _, buildFile := range buildFiles {
Expand All @@ -277,7 +278,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
WithField("dest", exportedFile).
Trace("Copying artifact.")
if err = buildFile.CopyTo(exportedFile); err != nil {
return r, &commands.PermissionDeniedError{Message: tr("Error copying output file %s", buildFile), Cause: err}
return r, &arduino.PermissionDeniedError{Message: tr("Error copying output file %s", buildFile), Cause: err}
}
}
}
Expand All @@ -286,7 +287,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
for _, lib := range builderCtx.ImportedLibraries {
rpcLib, err := lib.ToRPCLibrary()
if err != nil {
return r, &commands.PermissionDeniedError{Message: tr("Error getting information for library %s", lib.Name), Cause: err}
return r, &arduino.PermissionDeniedError{Message: tr("Error getting information for library %s", lib.Name), Cause: err}
}
importedLibs = append(importedLibs, rpcLib)
}
Expand Down
Loading