feat(config): add Scaffolding.Boards typed input with 6 defaults

This commit is contained in:
MDietermann
2026-04-14 14:08:54 +02:00
parent 698271a235
commit bbaa21a6bf
3 changed files with 46 additions and 0 deletions

View File

@@ -61,6 +61,16 @@ type RenodeConfig struct {
Platforms []RenodePlatform `yaml:"platforms"` Platforms []RenodePlatform `yaml:"platforms"`
} }
type Board struct {
Name string `yaml:"name"`
FQBN string `yaml:"fqbn"`
Template string `yaml:"template"`
}
type Scaffolding struct {
Boards []Board `yaml:"boards"`
}
// Config is the fully-resolved runtime configuration. // Config is the fully-resolved runtime configuration.
type Config struct { type Config struct {
Version int `yaml:"version"` Version int `yaml:"version"`
@@ -76,6 +86,7 @@ type Config struct {
ShellConfig ShellConfigSection `yaml:"shell_config"` ShellConfig ShellConfigSection `yaml:"shell_config"`
Neovim NeovimConfig `yaml:"neovim"` Neovim NeovimConfig `yaml:"neovim"`
Renode RenodeConfig `yaml:"renode"` Renode RenodeConfig `yaml:"renode"`
Scaffolding Scaffolding `yaml:"scaffolding"`
} }
const currentVersion = 1 const currentVersion = 1
@@ -161,5 +172,8 @@ func merge(base, over Config) Config {
if over.Renode.WokwiVersion != "" || len(over.Renode.Platforms) > 0 { if over.Renode.WokwiVersion != "" || len(over.Renode.Platforms) > 0 {
out.Renode = over.Renode out.Renode = over.Renode
} }
if len(over.Scaffolding.Boards) > 0 {
out.Scaffolding = over.Scaffolding
}
return out return out
} }

View File

@@ -108,3 +108,26 @@ func TestLoadRejectsUnknownVersion(t *testing.T) {
t.Fatal("expected version error") t.Fatal("expected version error")
} }
} }
func TestDefaultsCarryScaffoldingBoards(t *testing.T) {
cfg, err := Load("/nonexistent/overlay.yaml")
if err != nil {
t.Fatal(err)
}
if len(cfg.Scaffolding.Boards) < 6 {
t.Fatalf("want >= 6 boards, got %d", len(cfg.Scaffolding.Boards))
}
want := map[string]string{
"uno": "arduino:avr:uno", "mega": "arduino:avr:mega", "nano": "arduino:avr:nano",
"esp32": "esp32:esp32:esp32", "esp32s3": "esp32:esp32:esp32s3", "esp8266": "esp8266:esp8266:nodemcuv2",
}
got := map[string]string{}
for _, b := range cfg.Scaffolding.Boards {
got[b.Name] = b.FQBN
}
for name, fqbn := range want {
if got[name] != fqbn {
t.Errorf("board %q: got fqbn %q, want %q", name, got[name], fqbn)
}
}
}

View File

@@ -97,3 +97,12 @@ renode:
- name: nrf52840 - name: nrf52840
repl_path: "platforms/cpus/nrf52840.repl" repl_path: "platforms/cpus/nrf52840.repl"
machine: "nRF52840" machine: "nRF52840"
scaffolding:
boards:
- {name: uno, fqbn: "arduino:avr:uno", template: uno}
- {name: mega, fqbn: "arduino:avr:mega", template: mega}
- {name: nano, fqbn: "arduino:avr:nano", template: nano}
- {name: esp32, fqbn: "esp32:esp32:esp32", template: esp32}
- {name: esp32s3, fqbn: "esp32:esp32:esp32s3", template: esp32s3}
- {name: esp8266, fqbn: "esp8266:esp8266:nodemcuv2", template: esp8266}