Skip to content

Commit 64d019d

Browse files
authored
[breaking] Do not prevent CLI startup if inventory.yaml is corrupted (#2232)
* Made `inventory` package private. * If an error occurs reading the inventory.xml just log it and replace it. * Added integration test
1 parent 53004ef commit 64d019d

File tree

7 files changed

+36
-15
lines changed

7 files changed

+36
-15
lines changed

Diff for: commands/board/list.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232
"github.com/arduino/arduino-cli/arduino/discovery"
3333
"github.com/arduino/arduino-cli/arduino/httpclient"
3434
"github.com/arduino/arduino-cli/commands"
35-
"github.com/arduino/arduino-cli/inventory"
35+
"github.com/arduino/arduino-cli/internal/inventory"
3636
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3737
"github.com/pkg/errors"
3838
"github.com/sirupsen/logrus"

Diff for: commands/compile/compile.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
"github.com/arduino/arduino-cli/commands"
3232
"github.com/arduino/arduino-cli/configuration"
3333
"github.com/arduino/arduino-cli/i18n"
34-
"github.com/arduino/arduino-cli/inventory"
34+
"github.com/arduino/arduino-cli/internal/inventory"
3535
"github.com/arduino/arduino-cli/legacy/builder"
3636
"github.com/arduino/arduino-cli/legacy/builder/types"
3737
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"

Diff for: docs/UPGRADING.md

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ Here you can find a list of migration guides to handle breaking changes between
44

55
## 0.34.0
66

7+
### golang package `github.com/arduino/arduino-cli/inventory` removed from public API
8+
9+
The package `inventory` is no more a public golang API.
10+
711
### `board list --watch` command JSON output has changed
812

913
`board list --watch` command JSON output changed from:

Diff for: internal/cli/cli.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import (
4343
"github.com/arduino/arduino-cli/internal/cli/upgrade"
4444
"github.com/arduino/arduino-cli/internal/cli/upload"
4545
"github.com/arduino/arduino-cli/internal/cli/version"
46-
"github.com/arduino/arduino-cli/inventory"
46+
"github.com/arduino/arduino-cli/internal/inventory"
4747
versioninfo "github.com/arduino/arduino-cli/version"
4848
"github.com/fatih/color"
4949
"github.com/mattn/go-colorable"

Diff for: internal/cli/updater/updater.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
"github.com/arduino/arduino-cli/configuration"
2626
"github.com/arduino/arduino-cli/i18n"
2727
"github.com/arduino/arduino-cli/internal/cli/feedback"
28-
"github.com/arduino/arduino-cli/inventory"
28+
"github.com/arduino/arduino-cli/internal/inventory"
2929
"github.com/arduino/arduino-cli/version"
3030
"github.com/fatih/color"
3131
semver "go.bug.st/relaxed-semver"

Diff for: internal/integrationtest/board/board_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -589,3 +589,21 @@ func TestBoardListWithFailedBuiltinInstallation(t *testing.T) {
589589
require.Empty(t, stderr)
590590
require.Contains(t, string(stdout), "Downloading missing tool builtin:serial-discovery")
591591
}
592+
593+
func TestCLIStartupWithCorruptedInventory(t *testing.T) {
594+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
595+
defer env.CleanUp()
596+
597+
_, _, err := cli.Run("core", "update-index")
598+
require.NoError(t, err)
599+
600+
f, err := cli.DataDir().Join("inventory.yaml").Append()
601+
require.NoError(t, err)
602+
_, err = f.WriteString(`data: '[{"name":"WCH;32?'","fqbn":"esp32:esp32:esp32s3camlcd"}]'`)
603+
require.NoError(t, err)
604+
605+
// the CLI should not be able to load inventory and report it to the logs
606+
_, stderr, err := cli.Run("core", "update-index", "-v")
607+
require.NoError(t, err)
608+
require.Contains(t, string(stderr), "Error loading inventory store")
609+
}

Diff for: inventory/inventory.go renamed to internal/inventory/inventory.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
"github.com/arduino/arduino-cli/i18n"
2525
"github.com/gofrs/uuid"
26+
"github.com/sirupsen/logrus"
2627
"github.com/spf13/viper"
2728
)
2829

@@ -46,17 +47,15 @@ func Init(configPath string) error {
4647
Store.AddConfigPath(configPath)
4748
// Attempt to read config file
4849
if err := Store.ReadInConfig(); err != nil {
49-
// ConfigFileNotFoundError is acceptable, anything else
50-
// should be reported to the user
51-
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
52-
if err := generateInstallationData(); err != nil {
53-
return err
54-
}
55-
if err := WriteStore(); err != nil {
56-
return err
57-
}
58-
} else {
59-
return fmt.Errorf(tr("reading inventory file: %w"), err)
50+
if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
51+
// If an error occurs during initalization of the store, just log it and recreate it from scratch.
52+
logrus.WithError(err).Error("Error loading inventory store")
53+
}
54+
if err := generateInstallationData(); err != nil {
55+
return err
56+
}
57+
if err := WriteStore(); err != nil {
58+
return err
6059
}
6160
}
6261

0 commit comments

Comments
 (0)