From bbaa21a6bf5475689590dcb8935cc28b58074eae Mon Sep 17 00:00:00 2001 From: MDietermann Date: Tue, 14 Apr 2026 14:08:54 +0200 Subject: [PATCH] feat(config): add Scaffolding.Boards typed input with 6 defaults --- internal/config/config.go | 14 ++++++++++++++ internal/config/config_test.go | 23 +++++++++++++++++++++++ internal/config/defaults.yaml | 9 +++++++++ 3 files changed, 46 insertions(+) diff --git a/internal/config/config.go b/internal/config/config.go index 42d2274..f23c512 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -61,6 +61,16 @@ type RenodeConfig struct { 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. type Config struct { Version int `yaml:"version"` @@ -76,6 +86,7 @@ type Config struct { ShellConfig ShellConfigSection `yaml:"shell_config"` Neovim NeovimConfig `yaml:"neovim"` Renode RenodeConfig `yaml:"renode"` + Scaffolding Scaffolding `yaml:"scaffolding"` } const currentVersion = 1 @@ -161,5 +172,8 @@ func merge(base, over Config) Config { if over.Renode.WokwiVersion != "" || len(over.Renode.Platforms) > 0 { out.Renode = over.Renode } + if len(over.Scaffolding.Boards) > 0 { + out.Scaffolding = over.Scaffolding + } return out } diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 4becd3c..d2b31cd 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -108,3 +108,26 @@ func TestLoadRejectsUnknownVersion(t *testing.T) { 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) + } + } +} diff --git a/internal/config/defaults.yaml b/internal/config/defaults.yaml index 51da5bf..b84c562 100644 --- a/internal/config/defaults.yaml +++ b/internal/config/defaults.yaml @@ -97,3 +97,12 @@ renode: - name: nrf52840 repl_path: "platforms/cpus/nrf52840.repl" 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}