Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d20e576

Browse files
return different exit codes in the upload command
1 parent 0a73399 commit d20e576

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

‎internal/cli/upload/upload.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func runUploadCommand(command *cobra.Command, args []string) {
9292

9393
sk, err := sketch.New(sketchPath)
9494
if err != nil && importDir == "" && importFile == "" {
95-
feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric)
95+
feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrSketchError)
9696
}
9797

9898
instance, profile := instance.CreateAndInitWithProfile(profileArg.Get(), sketchPath)
@@ -136,7 +136,7 @@ func runUploadCommand(command *cobra.Command, args []string) {
136136
msg += tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform)
137137
}
138138
}
139-
feedback.Fatal(msg, feedback.ErrGeneric)
139+
feedback.Fatal(msg, feedback.ErrBoardUpload)
140140
}
141141

142142
fields := map[string]string{}
@@ -169,7 +169,7 @@ func runUploadCommand(command *cobra.Command, args []string) {
169169
UserFields: fields,
170170
}
171171
if err := upload.Upload(context.Background(), req, stdOut, stdErr); err != nil {
172-
feedback.FatalError(err, feedback.ErrGeneric)
172+
feedback.FatalError(err, feedback.ErrBoardUpload)
173173
}
174174
feedback.PrintResult(stdIOResult())
175175
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// This file is part of arduino-cli.
2+
//
3+
// Copyright 2023 ARDUINO SA (http://www.arduino.cc/)
4+
//
5+
// This software is released under the GNU General Public License version 3,
6+
// which covers the main part of arduino-cli.
7+
// The terms of this license can be found at:
8+
// https://www.gnu.org/licenses/gpl-3.0.en.html
9+
//
10+
// You can be released from the requirements of the above licenses by purchasing
11+
// a commercial license. Buying such a license is mandatory if you want to
12+
// modify or otherwise use the software for commercial activities involving the
13+
// Arduino software without disclosing the source code of your own applications.
14+
// To purchase a commercial license, send an email to license@arduino.cc.
15+
16+
package assert
17+
18+
import (
19+
"os/exec"
20+
"testing"
21+
22+
"github.com/arduino/arduino-cli/internal/cli/feedback"
23+
"github.com/stretchr/testify/require"
24+
)
25+
26+
func CmdExitCode(t *testing.T, expected feedback.ExitCode, err error) {
27+
var cmdErr *exec.ExitError
28+
require.ErrorAs(t, err, &cmdErr)
29+
require.Equal(t, expected, feedback.ExitCode(cmdErr.ExitCode()))
30+
}

‎internal/integrationtest/compile_1/compile_test.go‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import (
2626
"time"
2727

2828
"github.com/arduino/arduino-cli/arduino/builder/cpp"
29+
"github.com/arduino/arduino-cli/internal/cli/feedback"
2930
"github.com/arduino/arduino-cli/internal/integrationtest"
31+
"github.com/arduino/arduino-cli/internal/integrationtest/assert"
3032
"github.com/arduino/go-paths-helper"
3133
"github.com/stretchr/testify/require"
3234
"go.bug.st/testifyjson/requirejson"
@@ -91,21 +93,26 @@ func compileErrorMessage(t *testing.T, env *integrationtest.Environment, cli *in
9193
_, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", abcdef.String())
9294
require.Error(t, err)
9395
require.Contains(t, string(stderr), "no such file or directory:")
96+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
9497
_, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("ABCDEF.ino").String())
9598
require.Error(t, err)
9699
require.Contains(t, string(stderr), "no such file or directory:")
100+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
97101
_, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("QWERTY").String())
98102
require.Error(t, err)
99103
require.Contains(t, string(stderr), "no such file or directory:")
104+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
100105

101106
err = abcdef.Mkdir()
102107
require.NoError(t, err)
103108
_, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.String())
104109
require.Error(t, err)
105110
require.Contains(t, string(stderr), "main file missing from sketch:")
111+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
106112
_, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("ABCDEF.ino").String())
107113
require.Error(t, err)
108114
require.Contains(t, string(stderr), "no such file or directory:")
115+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
109116

110117
qwertyIno := abcdef.Join("QWERTY.ino")
111118
f, err := qwertyIno.Create()
@@ -114,6 +121,7 @@ func compileErrorMessage(t *testing.T, env *integrationtest.Environment, cli *in
114121
_, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", qwertyIno.String())
115122
require.Error(t, err)
116123
require.Contains(t, string(stderr), "main file missing from sketch:")
124+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
117125
}
118126

119127
func compileWithSimpleSketch(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
@@ -228,6 +236,7 @@ func compileWithSketchWithSymlinkSelfloop(t *testing.T, env *integrationtest.Env
228236
// returning a different error detailed message
229237
require.Contains(t, string(stderr), "Can't open sketch:")
230238
require.Error(t, err)
239+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
231240
}
232241
{
233242
sketchName := "CompileIntegrationTestSymlinkDirLoop"
@@ -254,6 +263,7 @@ func compileWithSketchWithSymlinkSelfloop(t *testing.T, env *integrationtest.Env
254263
// returning a different error detailed message
255264
require.Contains(t, string(stderr), "Can't open sketch:")
256265
require.Error(t, err)
266+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
257267
}
258268
}
259269

@@ -349,6 +359,7 @@ func compileWithMultipleBuildPropertyFlags(t *testing.T, env *integrationtest.En
349359
sketchPath.String(), "--verbose", "--clean",
350360
)
351361
require.Error(t, err)
362+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
352363

353364
// Compile using multiple build properties separated by a space and properly quoted
354365
stdout, _, err := cli.Run(
@@ -366,6 +377,7 @@ func compileWithMultipleBuildPropertyFlags(t *testing.T, env *integrationtest.En
366377
sketchPath.String(), "--verbose", "--clean",
367378
)
368379
require.Error(t, err)
380+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
369381

370382
stdout, _, err = cli.Run(
371383
"compile", "-b", fqbn,
@@ -376,6 +388,7 @@ func compileWithMultipleBuildPropertyFlags(t *testing.T, env *integrationtest.En
376388
require.Error(t, err)
377389
require.NotContains(t, string(stdout), "-DPIN=2")
378390
require.Contains(t, string(stdout), "-DSSID=\\\"This is a String\\\"")
391+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
379392

380393
stdout, _, err = cli.Run(
381394
"compile", "-b", fqbn,
@@ -621,16 +634,19 @@ func compileWithMultipleMainFiles(t *testing.T, env *integrationtest.Environment
621634
_, stderr, err := cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
622635
require.Error(t, err)
623636
require.Contains(t, string(stderr), "Can't open sketch: multiple main sketch files found")
637+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
624638

625639
// Build sketch from .ino file
626640
_, stderr, err = cli.Run("compile", "--clean", "-b", fqbn, sketchFileIno.String())
627641
require.Error(t, err)
628642
require.Contains(t, string(stderr), "Can't open sketch: multiple main sketch files found")
643+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
629644

630645
// Build sketch from .pde file
631646
_, stderr, err = cli.Run("compile", "--clean", "-b", fqbn, sketchFilePde.String())
632647
require.Error(t, err)
633648
require.Contains(t, string(stderr), "Can't open sketch: multiple main sketch files found")
649+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
634650
}
635651

636652
func compileCaseMismatchFails(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
@@ -653,16 +669,19 @@ func compileCaseMismatchFails(t *testing.T, env *integrationtest.Environment, cl
653669
_, stderr, err := cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
654670
require.Error(t, err)
655671
require.Contains(t, string(stderr), "Can't open sketch:")
672+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
656673
// * Compiling with sketch main file
657674
_, stderr, err = cli.Run("compile", "--clean", "-b", fqbn, sketchMainFile.String())
658675
require.Error(t, err)
659676
require.Contains(t, string(stderr), "Can't open sketch:")
677+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
660678
// * Compiling in sketch path
661679
cli.SetWorkingDir(sketchPath)
662680
defer cli.SetWorkingDir(env.RootDir())
663681
_, stderr, err = cli.Run("compile", "--clean", "-b", fqbn)
664682
require.Error(t, err)
665683
require.Contains(t, string(stderr), "Can't open sketch:")
684+
assert.CmdExitCode(t, feedback.ErrSketchError, err)
666685
}
667686

668687
func compileOnlyCompilationDatabaseFlag(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
@@ -721,6 +740,7 @@ func compileUsingPlatformLocalTxt(t *testing.T, env *integrationtest.Environment
721740
_, stderr, err := cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
722741
require.Error(t, err)
723742
require.Contains(t, string(stderr), "my-compiler-that-does-not-exist")
743+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
724744
}
725745

726746
func compileUsingBoardsLocalTxt(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
@@ -737,6 +757,7 @@ func compileUsingBoardsLocalTxt(t *testing.T, env *integrationtest.Environment,
737757
_, stderr, err := cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
738758
require.Error(t, err)
739759
require.Contains(t, string(stderr), "Error during build: Invalid FQBN: board arduino:avr:nessuno not found")
760+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
740761

741762
// Use custom boards.local.txt with made arduino:avr:nessuno board
742763
boardsLocalTxt := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.5", "boards.local.txt")
@@ -999,6 +1020,7 @@ func TestCompileManuallyInstalledPlatformUsingPlatformLocalTxt(t *testing.T) {
9991020
_, stderr, err := cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
10001021
require.Error(t, err)
10011022
require.Contains(t, string(stderr), "my-compiler-that-does-not-exist")
1023+
assert.CmdExitCode(t, feedback.ErrCompilation, err)
10021024
}
10031025

10041026
func compileWithInvalidBuildOptionJson(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
@@ -1134,6 +1156,7 @@ func compileWithFakeSecureBootCore(t *testing.T, env *integrationtest.Environmen
11341156
)
11351157
require.Error(t, err)
11361158
require.Contains(t, string(stderr), "Flag --sign-key is mandatory when used in conjunction with: --keys-keychain, --sign-key, --encrypt-key")
1159+
assert.CmdExitCode(t, feedback.ErrBadArgument, err)
11371160

11381161
// Verifies compilation works with secure boot enabled and when overriding the sign key and encryption key used
11391162
keysDir := cli.SketchbookDir().Join("keys_dir")

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /