Skip to content

Please make the output of the board listall --format json deterministic #1909

Closed
@kittaakos

Description

@kittaakos

Describe the request

During the review of arduino/arduino-ide#1520, I noticed that the output of board listall --format json is not always the same. It's not a big deal, but it works fine with the non json output. It would be great to have the same result when I execute the same command twice. This also affects the gRPC API.

Update:
For completeness, the order of the boards inside a platform matches the boards.txt order, but the platforms' order seems "random".

Describe the current behavior

I am using a CLI from c8ff042:

% ./arduino-cli version                
arduino-cli  Version: git-snapshot Commit: c8ff0425 Date: 2022-10-06T06:38:53Z

I have the following platforms installed:

% ./arduino-cli core list              
ID                Installed Latest Name                          
arduino:mbed_nano 3.2.0     3.3.0  Arduino Mbed OS Nano Boards   
arduino:nrf52     1.0.2     1.0.2  Arduino nRF52 Boards          
littleBits:avr    1.0.0     1.0.0  littleBits Arduino AVR Modules

When I run board listall without the --format json flags, I always get the same result:

% ./arduino-cli board listall
Board Name                              FQBN                                
Arduino Nano 33 BLE                     arduino:mbed_nano:nano33ble         
Arduino Nano RP2040 Connect             arduino:mbed_nano:nanorp2040connect 
Arduino Primo                           arduino:nrf52:primo                 
Arduino Primo Core                      arduino:nrf52:primo_core            
littleBits w6 Arduino Module (Leonardo) littleBits:avr:w6_arduino           

% ./arduino-cli board listall
Board Name                              FQBN                                
Arduino Nano 33 BLE                     arduino:mbed_nano:nano33ble         
Arduino Nano RP2040 Connect             arduino:mbed_nano:nanorp2040connect 
Arduino Primo                           arduino:nrf52:primo                 
Arduino Primo Core                      arduino:nrf52:primo_core            
littleBits w6 Arduino Module (Leonardo) littleBits:avr:w6_arduino           

% ./arduino-cli board listall
Board Name                              FQBN                                
Arduino Nano 33 BLE                     arduino:mbed_nano:nano33ble         
Arduino Nano RP2040 Connect             arduino:mbed_nano:nanorp2040connect 
Arduino Primo                           arduino:nrf52:primo                 
Arduino Primo Core                      arduino:nrf52:primo_core            
littleBits w6 Arduino Module (Leonardo) littleBits:avr:w6_arduino           

% ./arduino-cli board listall
Board Name                              FQBN                                
Arduino Nano 33 BLE                     arduino:mbed_nano:nano33ble         
Arduino Nano RP2040 Connect             arduino:mbed_nano:nanorp2040connect 
Arduino Primo                           arduino:nrf52:primo                 
Arduino Primo Core                      arduino:nrf52:primo_core            
littleBits w6 Arduino Module (Leonardo) littleBits:avr:w6_arduino           

% ./arduino-cli board listall
Board Name                              FQBN                                
Arduino Nano 33 BLE                     arduino:mbed_nano:nano33ble         
Arduino Nano RP2040 Connect             arduino:mbed_nano:nanorp2040connect 
Arduino Primo                           arduino:nrf52:primo                 
Arduino Primo Core                      arduino:nrf52:primo_core            
littleBits w6 Arduino Module (Leonardo) littleBits:avr:w6_arduino           

Run the same command with the --format json flag at least twice (or multiple times), and you most likely get a different output than the previous one:

% ./arduino-cli board listall --format json
{
  "boards": [
    {
      "name": "Arduino Primo",
      "fqbn": "arduino:nrf52:primo",
      "platform": {
        "id": "arduino:nrf52",
        "installed": "1.0.2",
        "latest": "1.0.2",
        "name": "Arduino nRF52 Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Primo Core",
      "fqbn": "arduino:nrf52:primo_core",
      "platform": {
        "id": "arduino:nrf52",
        "installed": "1.0.2",
        "latest": "1.0.2",
        "name": "Arduino nRF52 Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Nano RP2040 Connect",
      "fqbn": "arduino:mbed_nano:nanorp2040connect",
      "platform": {
        "id": "arduino:mbed_nano",
        "installed": "3.2.0",
        "latest": "3.3.0",
        "name": "Arduino Mbed OS Nano Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Nano 33 BLE",
      "fqbn": "arduino:mbed_nano:nano33ble",
      "platform": {
        "id": "arduino:mbed_nano",
        "installed": "3.2.0",
        "latest": "3.3.0",
        "name": "Arduino Mbed OS Nano Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "littleBits w6 Arduino Module (Leonardo)",
      "fqbn": "littleBits:avr:w6_arduino",
      "platform": {
        "id": "littleBits:avr",
        "installed": "1.0.0",
        "latest": "1.0.0",
        "name": "littleBits Arduino AVR Modules",
        "maintainer": "littleBits Electronics",
        "website": "http://www.littlebits.cc/bits/w6-arduino",
        "email": "[email protected]"
      }
    }
  ]
}
% ./arduino-cli board listall --format json
{
  "boards": [
    {
      "name": "Arduino Nano RP2040 Connect",
      "fqbn": "arduino:mbed_nano:nanorp2040connect",
      "platform": {
        "id": "arduino:mbed_nano",
        "installed": "3.2.0",
        "latest": "3.3.0",
        "name": "Arduino Mbed OS Nano Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Nano 33 BLE",
      "fqbn": "arduino:mbed_nano:nano33ble",
      "platform": {
        "id": "arduino:mbed_nano",
        "installed": "3.2.0",
        "latest": "3.3.0",
        "name": "Arduino Mbed OS Nano Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Primo",
      "fqbn": "arduino:nrf52:primo",
      "platform": {
        "id": "arduino:nrf52",
        "installed": "1.0.2",
        "latest": "1.0.2",
        "name": "Arduino nRF52 Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "Arduino Primo Core",
      "fqbn": "arduino:nrf52:primo_core",
      "platform": {
        "id": "arduino:nrf52",
        "installed": "1.0.2",
        "latest": "1.0.2",
        "name": "Arduino nRF52 Boards",
        "maintainer": "Arduino",
        "website": "http://www.arduino.cc/",
        "email": "[email protected]"
      }
    },
    {
      "name": "littleBits w6 Arduino Module (Leonardo)",
      "fqbn": "littleBits:avr:w6_arduino",
      "platform": {
        "id": "littleBits:avr",
        "installed": "1.0.0",
        "latest": "1.0.0",
        "name": "littleBits Arduino AVR Modules",
        "maintainer": "littleBits Electronics",
        "website": "http://www.littlebits.cc/bits/w6-arduino",
        "email": "[email protected]"
      }
    }
  ]
}
% 

Arduino CLI version

c8ff042

Operating system

macOS

Operating system version

12.5.1

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

Assignees

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