Skip to content

Please make the JSON output of board details deterministic #2209

Closed
@dankeboy36

Description

@dankeboy36

Describe the request

If I run ./arduino-cli board details -b arduino:avr:unomini --format json twice, they give different JSON output. The contents are the same, but the JSON structure is not deterministic. It would be great if the CLI could do it. Thanks!

Describe the current behavior

Run ./arduino-cli board details -b arduino:avr:unomini --format json twice and compare the content. They're different.

./arduino-cli version \
&& ./arduino-cli board details -b arduino:avr:unomini --format json >> bd_1.json \
&& ./arduino-cli board details -b arduino:avr:unomini --format json >> bd_2.json \
&& diff bd_1.json bd_2.json >> bd_diff.diff
arduino-cli  Version: git-snapshot Commit: 8cd72974 Date: 2023-06-11T14:33:49Z
Click to see bd_diff.diff

177a178,187
>       "id": "jtag3isp",
>       "name": "Atmel JTAGICE3 (ISP mode)"
>     },
>     {
>       "platform": "Arduino AVR Boards",
>       "id": "parallel",
>       "name": "Parallel Programmer"
>     },
>     {
>       "platform": "Arduino AVR Boards",
183,184c193,194
<       "id": "usbGemma",
<       "name": "Arduino Gemma"
---
>       "id": "avrispmkii",
>       "name": "AVRISP mkII"
193,194c203,204
<       "id": "arduinoasispatmega32u4",
<       "name": "Arduino as ISP (ATmega32U4)"
---
>       "id": "atmel_ice",
>       "name": "Atmel-ICE (AVR)"
198,199c208,209
<       "id": "parallel",
<       "name": "Parallel Programmer"
---
>       "id": "jtag3",
>       "name": "Atmel JTAGICE3 (JTAG mode)"
203,204c213,214
<       "id": "avrispmkii",
<       "name": "AVRISP mkII"
---
>       "id": "usbGemma",
>       "name": "Arduino Gemma"
208,209c218,219
<       "id": "arduinoasisp",
<       "name": "Arduino as ISP"
---
>       "id": "buspirate",
>       "name": "BusPirate as ISP"
218,222d227
<       "id": "atmel_ice",
<       "name": "Atmel-ICE (AVR)"
<     },
<     {
<       "platform": "Arduino AVR Boards",
228,234c233,234
<       "id": "arduinoisporg",
<       "name": "ArduinoISP.org"
<     },
<     {
<       "platform": "Arduino AVR Boards",
<       "id": "jtag3",
<       "name": "Atmel JTAGICE3 (JTAG mode)"
---
>       "id": "arduinoisp",
>       "name": "ArduinoISP"
238,239c238,239
<       "id": "jtag3isp",
<       "name": "Atmel JTAGICE3 (ISP mode)"
---
>       "id": "arduinoisporg",
>       "name": "ArduinoISP.org"
243,244c243,244
<       "id": "arduinoisp",
<       "name": "ArduinoISP"
---
>       "id": "arduinoasispatmega32u4",
>       "name": "Arduino as ISP (ATmega32U4)"
248,249c248,249
<       "id": "buspirate",
<       "name": "BusPirate as ISP"
---
>       "id": "arduinoasisp",
>       "name": "Arduino as ISP"
371a372,373
>     "runtime.tools.mklittlefs-3.0.0-gnu12-dc7f933.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/mklittlefs/3.0.0-gnu12-dc7f933",
>     "runtime.tools.mkspiffs-0.2.3.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/mkspiffs/0.2.3",
376d377
<     "runtime.tools.serial-monitor-0.11.0.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.11.0",
378,379c379
<     "runtime.tools.mkspiffs-0.2.3.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/mkspiffs/0.2.3",
<     "runtime.tools.mklittlefs-3.0.0-gnu12-dc7f933.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/mklittlefs/3.0.0-gnu12-dc7f933",
---
>     "runtime.tools.serial-monitor-0.11.0.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.11.0",
385a386,393
>     "runtime.tools.arm-none-eabi-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4",
>     "runtime.tools.arm-none-eabi-gcc-7-2017q4.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4",
>     "runtime.tools.dfu-util.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/dfu-util/0.10.0-arduino1",
>     "runtime.tools.dfu-util-0.10.0-arduino1.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/dfu-util/0.10.0-arduino1",
>     "runtime.tools.ctags.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/ctags/5.8-arduino11",
>     "runtime.tools.ctags-5.8-arduino11.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/ctags/5.8-arduino11",
>     "runtime.tools.mdns-discovery.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/mdns-discovery/1.0.9",
>     "runtime.tools.mdns-discovery-1.0.9.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/mdns-discovery/1.0.9",
388,395d395
<     "runtime.tools.xtensa-esp32s3-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.xtensa-esp32s3-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.python3.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1",
<     "runtime.tools.python3-3.7.2-post1.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1",
<     "runtime.tools.mkspiffs.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/mkspiffs/3.1.0-gcc10.3-e5f9fec",
<     "runtime.tools.mkspiffs-3.1.0-gcc10.3-e5f9fec.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/mkspiffs/3.1.0-gcc10.3-e5f9fec",
<     "runtime.tools.xtensa-lx106-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.1.0-gcc10.3-e5f9fec",
<     "runtime.tools.xtensa-lx106-elf-gcc-3.1.0-gcc10.3-e5f9fec.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.1.0-gcc10.3-e5f9fec",
398,405d397
<     "runtime.tools.imgtool.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/imgtool/1.8.0-arduino.1",
<     "runtime.tools.imgtool-1.8.0-arduino.1.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/imgtool/1.8.0-arduino.1",
<     "runtime.tools.serial-monitor.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.13.0",
<     "runtime.tools.serial-monitor-0.13.0.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.13.0",
<     "runtime.tools.teensy-monitor.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-monitor/1.57.2",
<     "runtime.tools.teensy-monitor-1.57.2.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-monitor/1.57.2",
<     "runtime.tools.teensy-compile.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-compile/5.4.1",
<     "runtime.tools.teensy-compile-5.4.1.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-compile/5.4.1",
408,409d399
<     "runtime.tools.arm-none-eabi-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4",
<     "runtime.tools.arm-none-eabi-gcc-7-2017q4.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4",
412,417c402,409
<     "runtime.tools.xtensa-esp32-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.xtensa-esp32-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.esptool_py.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/esptool_py/4.5.1",
<     "runtime.tools.esptool_py-4.5.1.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/esptool_py/4.5.1",
<     "runtime.tools.bossac.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino2",
<     "runtime.tools.bossac-1.9.1-arduino2.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino2",
---
>     "runtime.tools.teensy-monitor.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-monitor/1.57.2",
>     "runtime.tools.teensy-monitor-1.57.2.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-monitor/1.57.2",
>     "runtime.tools.teensy-compile.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-compile/5.4.1",
>     "runtime.tools.teensy-compile-5.4.1.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-compile/5.4.1",
>     "runtime.tools.xtensa-esp32s2-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s2-elf-gcc/esp-2021r2-patch5-8.4.0",
>     "runtime.tools.xtensa-esp32s2-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s2-elf-gcc/esp-2021r2-patch5-8.4.0",
>     "runtime.tools.xtensa-lx106-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.1.0-gcc10.3-e5f9fec",
>     "runtime.tools.xtensa-lx106-elf-gcc-3.1.0-gcc10.3-e5f9fec.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.1.0-gcc10.3-e5f9fec",
420,423c412,417
<     "runtime.tools.dfu-util.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/dfu-util/0.10.0-arduino1",
<     "runtime.tools.dfu-util-0.10.0-arduino1.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/dfu-util/0.10.0-arduino1",
<     "runtime.tools.ctags.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/ctags/5.8-arduino11",
<     "runtime.tools.ctags-5.8-arduino11.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/ctags/5.8-arduino11",
---
>     "runtime.tools.serial-monitor.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.13.0",
>     "runtime.tools.serial-monitor-0.13.0.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/serial-monitor/0.13.0",
>     "runtime.tools.xtensa-esp-elf-gdb.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp-elf-gdb/11.2_20220823",
>     "runtime.tools.xtensa-esp-elf-gdb-11.2_20220823.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp-elf-gdb/11.2_20220823",
>     "runtime.tools.xtensa-esp32s3-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0",
>     "runtime.tools.xtensa-esp32s3-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0",
425a420,429
>     "runtime.tools.teensy-discovery.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-discovery/1.57.2",
>     "runtime.tools.teensy-discovery-1.57.2.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-discovery/1.57.2",
>     "runtime.tools.bossac.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino2",
>     "runtime.tools.bossac-1.9.1-arduino2.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino2",
>     "runtime.tools.imgtool.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/imgtool/1.8.0-arduino.1",
>     "runtime.tools.imgtool-1.8.0-arduino.1.path=/Users/akos.kitta/Library/Arduino15/packages/arduino/tools/imgtool/1.8.0-arduino.1",
>     "runtime.tools.python3.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1",
>     "runtime.tools.python3-3.7.2-post1.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1",
>     "runtime.tools.mkspiffs.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/mkspiffs/3.1.0-gcc10.3-e5f9fec",
>     "runtime.tools.mkspiffs-3.1.0-gcc10.3-e5f9fec.path=/Users/akos.kitta/Library/Arduino15/packages/esp8266/tools/mkspiffs/3.1.0-gcc10.3-e5f9fec",
428,431d431
<     "runtime.tools.xtensa-esp32s2-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s2-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.xtensa-esp32s2-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32s2-elf-gcc/esp-2021r2-patch5-8.4.0",
<     "runtime.tools.xtensa-esp-elf-gdb.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp-elf-gdb/11.2_20220823",
<     "runtime.tools.xtensa-esp-elf-gdb-11.2_20220823.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp-elf-gdb/11.2_20220823",
434,439c434,439
<     "runtime.tools.mdns-discovery.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/mdns-discovery/1.0.9",
<     "runtime.tools.mdns-discovery-1.0.9.path=/Users/akos.kitta/Library/Arduino15/packages/builtin/tools/mdns-discovery/1.0.9",
<     "runtime.tools.teensy-discovery.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-discovery/1.57.2",
<     "runtime.tools.teensy-discovery-1.57.2.path=/Users/akos.kitta/Library/Arduino15/packages/teensy/tools/teensy-discovery/1.57.2",
<     "extra.time.utc=1686494811",
<     "extra.time.local=1686502011",
---
>     "runtime.tools.esptool_py.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/esptool_py/4.5.1",
>     "runtime.tools.esptool_py-4.5.1.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/esptool_py/4.5.1",
>     "runtime.tools.xtensa-esp32-elf-gcc.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0",
>     "runtime.tools.xtensa-esp32-elf-gcc-esp-2021r2-patch5-8.4.0.path=/Users/akos.kitta/Library/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0",
>     "extra.time.utc=1686494812",
>     "extra.time.local=1686502012",

Arduino CLI version

8cd7297

Operating system

macOS

Operating system version

11.7.7

Additional context

No response

Issue checklist

  • I searched for previous requests in the issue tracker
  • I verified the feature was still missing when using the nightly build
  • My request contains all necessary details

Metadata

Metadata

Labels

topic: codeRelated to content of the project itselftype: enhancementProposed improvement

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions