Skip to content

Commit e7ba99f

Browse files
authored
[breaking] fix: remove tree config lookup (arduino#2085)
1 parent 5e251e8 commit e7ba99f

File tree

10 files changed

+117
-178
lines changed

10 files changed

+117
-178
lines changed

Diff for: configuration/configuration.go

+2-20
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ func GetDefaultBuiltinLibrariesDir() string {
136136
return filepath.Join(getDefaultArduinoDataDir(), "libraries")
137137
}
138138

139-
// FindConfigFileInArgsOrWorkingDirectory returns the config file path using the
139+
// FindConfigFileInArgs returns the config file path using the
140140
// argument '--config-file' (if specified) or looking in the current working dir
141-
func FindConfigFileInArgsOrWorkingDirectory(args []string) string {
141+
func FindConfigFileInArgs(args []string) string {
142142
// Look for '--config-file' argument
143143
for i, arg := range args {
144144
if arg == "--config-file" {
@@ -147,23 +147,5 @@ func FindConfigFileInArgsOrWorkingDirectory(args []string) string {
147147
}
148148
}
149149
}
150-
151-
// Look into current working directory
152-
if cwd, err := paths.Getwd(); err != nil {
153-
return ""
154-
} else if configFile := searchConfigTree(cwd); configFile != nil {
155-
return configFile.Join("arduino-cli.yaml").String()
156-
}
157150
return ""
158151
}
159-
160-
func searchConfigTree(cwd *paths.Path) *paths.Path {
161-
// go back up to root and search for the config file
162-
for _, path := range cwd.Parents() {
163-
if path.Join("arduino-cli.yaml").Exist() {
164-
return path
165-
}
166-
}
167-
168-
return nil
169-
}

Diff for: configuration/configuration_test.go

+4-67
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"path/filepath"
2222
"testing"
2323

24-
paths "github.com/arduino/go-paths-helper"
2524
"github.com/stretchr/testify/require"
2625
)
2726

@@ -39,45 +38,6 @@ func tmpDirOrDie() string {
3938
return dir
4039
}
4140

42-
func TestSearchConfigTreeNotFound(t *testing.T) {
43-
tmp := tmpDirOrDie()
44-
require.Empty(t, searchConfigTree(paths.New(tmp)))
45-
}
46-
47-
func TestSearchConfigTreeSameFolder(t *testing.T) {
48-
tmp := tmpDirOrDie()
49-
defer os.RemoveAll(tmp)
50-
_, err := os.Create(filepath.Join(tmp, "arduino-cli.yaml"))
51-
require.Nil(t, err)
52-
require.Equal(t, tmp, searchConfigTree(paths.New(tmp)).String())
53-
}
54-
55-
func TestSearchConfigTreeInParent(t *testing.T) {
56-
tmp := tmpDirOrDie()
57-
defer os.RemoveAll(tmp)
58-
target := filepath.Join(tmp, "foo", "bar")
59-
err := os.MkdirAll(target, os.ModePerm)
60-
require.Nil(t, err)
61-
_, err = os.Create(filepath.Join(tmp, "arduino-cli.yaml"))
62-
require.Nil(t, err)
63-
require.Equal(t, tmp, searchConfigTree(paths.New(target)).String())
64-
}
65-
66-
var result *paths.Path
67-
68-
func BenchmarkSearchConfigTree(b *testing.B) {
69-
tmp := tmpDirOrDie()
70-
defer os.RemoveAll(tmp)
71-
target := filepath.Join(tmp, "foo", "bar", "baz")
72-
os.MkdirAll(target, os.ModePerm)
73-
74-
var s *paths.Path
75-
for n := 0; n < b.N; n++ {
76-
s = searchConfigTree(paths.New(target))
77-
}
78-
result = s
79-
}
80-
8141
func TestInit(t *testing.T) {
8242
tmp := tmpDirOrDie()
8343
defer os.RemoveAll(tmp)
@@ -100,38 +60,15 @@ func TestInit(t *testing.T) {
10060
}
10161

10262
func TestFindConfigFile(t *testing.T) {
103-
configFile := FindConfigFileInArgsOrWorkingDirectory([]string{"--config-file"})
63+
configFile := FindConfigFileInArgs([]string{"--config-file"})
10464
require.Equal(t, "", configFile)
10565

106-
configFile = FindConfigFileInArgsOrWorkingDirectory([]string{"--config-file", "some/path/to/config"})
66+
configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config"})
10767
require.Equal(t, "some/path/to/config", configFile)
10868

109-
configFile = FindConfigFileInArgsOrWorkingDirectory([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"})
69+
configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"})
11070
require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile)
11171

112-
configFile = FindConfigFileInArgsOrWorkingDirectory([]string{})
72+
configFile = FindConfigFileInArgs([]string{})
11373
require.Equal(t, "", configFile)
114-
115-
// Create temporary directories
116-
tmp := tmpDirOrDie()
117-
defer os.RemoveAll(tmp)
118-
target := filepath.Join(tmp, "foo", "bar", "baz")
119-
os.MkdirAll(target, os.ModePerm)
120-
require.Nil(t, os.Chdir(target))
121-
122-
// Create a config file
123-
f, err := os.Create(filepath.Join(target, "..", "..", "arduino-cli.yaml"))
124-
require.Nil(t, err)
125-
f.Close()
126-
127-
configFile = FindConfigFileInArgsOrWorkingDirectory([]string{})
128-
require.Equal(t, filepath.Join(tmp, "foo", "arduino-cli.yaml"), configFile)
129-
130-
// Create another config file
131-
f, err = os.Create(filepath.Join(target, "arduino-cli.yaml"))
132-
require.Nil(t, err)
133-
f.Close()
134-
135-
configFile = FindConfigFileInArgsOrWorkingDirectory([]string{})
136-
require.Equal(t, filepath.Join(target, "arduino-cli.yaml"), configFile)
13774
}

Diff for: docs/UPGRADING.md

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
Here you can find a list of migration guides to handle breaking changes between releases of the CLI.
44

5+
## 0.32.0
6+
7+
Configuration file lookup in current working directory and its parents is dropped. The command line flag `--config-file`
8+
must be specified to use an alternative configuration file from the one in the data directory.
9+
510
## 0.31.0
611

712
### Added `post_install` script support for tools

Diff for: docs/configuration.md

-2
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,6 @@ The configuration file must be named `arduino-cli`, with the appropriate file ex
116116
Configuration files in the following locations are recognized by Arduino CLI:
117117

118118
1. Location specified by the [`--config-file`][arduino cli command reference] command line flag
119-
1. Current working directory
120-
1. Any parent directory of the current working directory (more immediate parents having higher precedence)
121119
1. Arduino CLI data directory (as configured by `directories.data`)
122120

123121
If multiple configuration files are present, the one highest on the above list is used. Configuration files are not

Diff for: docsgen/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func main() {
3131

3232
os.MkdirAll(os.Args[1], 0755) // Create the output folder if it doesn't already exist
3333

34-
configuration.Settings = configuration.Init(configuration.FindConfigFileInArgsOrWorkingDirectory(os.Args))
34+
configuration.Settings = configuration.Init(configuration.FindConfigFileInArgs(os.Args))
3535
cli := cli.NewCommand()
3636
cli.DisableAutoGenTag = true // Disable addition of auto-generated date stamp
3737
err := doc.GenMarkdownTree(cli, os.Args[1])

Diff for: internal/integrationtest/compile_1/compile_test.go

+22-14
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ func compileWithExportBinariesConfig(t *testing.T, env *integrationtest.Environm
526526
defer cli.WorkingDir().Join("arduino-cli.yaml").Remove()
527527

528528
// Test if arduino-cli config file written in the previous run has the `always_export_binaries` flag set.
529-
stdout, _, err := cli.Run("config", "dump", "--format", "json")
529+
stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml")
530530
require.NoError(t, err)
531531
requirejson.Contains(t, stdout, `
532532
{
@@ -536,7 +536,7 @@ func compileWithExportBinariesConfig(t *testing.T, env *integrationtest.Environm
536536
}`)
537537

538538
// Test compilation with export binaries env var set
539-
_, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String())
539+
_, _, err = cli.Run("compile", "-b", fqbn, "--config-file", "arduino-cli.yaml", sketchPath.String())
540540
require.NoError(t, err)
541541
require.DirExists(t, sketchPath.Join("build").String())
542542

@@ -563,7 +563,7 @@ func compileWithInvalidUrl(t *testing.T, env *integrationtest.Environment, cli *
563563
require.NoError(t, err)
564564
defer cli.WorkingDir().Join("arduino-cli.yaml").Remove()
565565

566-
_, stderr, err := cli.Run("compile", "-b", fqbn, sketchPath.String())
566+
_, stderr, err := cli.Run("compile", "-b", fqbn, "--config-file", "arduino-cli.yaml", sketchPath.String())
567567
require.NoError(t, err)
568568
require.Contains(t, string(stderr), "Error initializing instance: Loading index file: loading json index file")
569569
expectedIndexfile := cli.DataDir().Join("package_example_index.json")
@@ -813,10 +813,10 @@ func TestCompileWithCustomLibraries(t *testing.T) {
813813
require.NoError(t, err)
814814

815815
// Init the environment explicitly
816-
_, _, err = cli.Run("update")
816+
_, _, err = cli.Run("update", "--config-file", "arduino-cli.yaml")
817817
require.NoError(t, err)
818818

819-
_, _, err = cli.Run("core", "install", "esp8266:esp8266")
819+
_, _, err = cli.Run("core", "install", "esp8266:esp8266", "--config-file", "arduino-cli.yaml")
820820
require.NoError(t, err)
821821

822822
sketchName := "sketch_with_multiple_custom_libraries"
@@ -825,7 +825,12 @@ func TestCompileWithCustomLibraries(t *testing.T) {
825825

826826
firstLib := sketchPath.Join("libraries1")
827827
secondLib := sketchPath.Join("libraries2")
828-
_, _, err = cli.Run("compile", "--libraries", firstLib.String(), "--libraries", secondLib.String(), "-b", fqbn, sketchPath.String())
828+
_, _, err = cli.Run("compile", "--libraries",
829+
firstLib.String(),
830+
"--libraries", secondLib.String(),
831+
"-b", fqbn,
832+
"--config-file", "arduino-cli.yaml",
833+
sketchPath.String())
829834
require.NoError(t, err)
830835
}
831836

@@ -839,26 +844,26 @@ func TestCompileWithArchivesAndLongPaths(t *testing.T) {
839844
require.NoError(t, err)
840845

841846
// Init the environment explicitly
842-
_, _, err = cli.Run("update")
847+
_, _, err = cli.Run("update", "--config-file", "arduino-cli.yaml")
843848
require.NoError(t, err)
844849

845850
// Install core to compile
846-
_, _, err = cli.Run("core", "install", "esp8266:[email protected]")
851+
_, _, err = cli.Run("core", "install", "esp8266:[email protected]", "--config-file", "arduino-cli.yaml")
847852
require.NoError(t, err)
848853

849854
// Install test library
850-
_, _, err = cli.Run("lib", "install", "ArduinoIoTCloud")
855+
_, _, err = cli.Run("lib", "install", "ArduinoIoTCloud", "--config-file", "arduino-cli.yaml")
851856
require.NoError(t, err)
852857

853-
stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--format", "json")
858+
stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--format", "json", "--config-file", "arduino-cli.yaml")
854859
require.NoError(t, err)
855860
var libOutput []map[string]interface{}
856861
err = json.Unmarshal(stdout, &libOutput)
857862
require.NoError(t, err)
858863
sketchPath := paths.New(libOutput[0]["library"].(map[string]interface{})["install_dir"].(string))
859864
sketchPath = sketchPath.Join("examples", "ArduinoIoTCloud-Advanced")
860865

861-
_, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String())
866+
_, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml")
862867
require.NoError(t, err)
863868
}
864869

@@ -908,16 +913,19 @@ func TestCompileWithFullyPrecompiledLibrary(t *testing.T) {
908913
// https://arduino.github.io/arduino-cli/latest/library-specification/#precompiled-binaries
909914
wd, err := paths.Getwd()
910915
require.NoError(t, err)
911-
_, _, err = cli.Run("lib", "install", "--zip-path", wd.Parent().Join("testdata", "Arduino_TensorFlowLite-2.1.0-ALPHA-precompiled.zip").String())
916+
_, _, err = cli.Run("lib", "install",
917+
"--zip-path", wd.Parent().Join("testdata", "Arduino_TensorFlowLite-2.1.0-ALPHA-precompiled.zip").String(),
918+
"--config-file", "arduino-cli.yaml",
919+
)
912920
require.NoError(t, err)
913921
sketchFolder := cli.SketchbookDir().Join("libraries", "Arduino_TensorFlowLite", "examples", "hello_world")
914922

915923
// Install example dependency
916-
_, _, err = cli.Run("lib", "install", "Arduino_LSM9DS1")
924+
_, _, err = cli.Run("lib", "install", "Arduino_LSM9DS1", "--config-file", "arduino-cli.yaml")
917925
require.NoError(t, err)
918926

919927
// Compile and verify dependencies detection for fully precompiled library is skipped
920-
stdout, _, err := cli.Run("compile", "-b", fqbn, sketchFolder.String(), "-v")
928+
stdout, _, err := cli.Run("compile", "-b", fqbn, "--config-file", "arduino-cli.yaml", sketchFolder.String(), "-v")
921929
require.NoError(t, err)
922930
require.Contains(t, string(stdout), "Skipping dependencies detection for precompiled library Arduino_TensorFlowLite")
923931
}

0 commit comments

Comments
 (0)