@@ -4,6 +4,166 @@ Here you can find a list of migration guides to handle breaking changes between
4
4
5
5
## 0.35.0
6
6
7
+ ### CLI ` core list ` and ` core search ` changed JSON output.
8
+
9
+ Below is an example of the response containing an object with all possible keys set.
10
+
11
+ ``` json
12
+ [
13
+ {
14
+ "id" : " arduino:avr" ,
15
+ "maintainer" : " Arduino" ,
16
+ "website" : " http://www.arduino.cc/" ,
17
+
18
+ "indexed" : true ,
19
+ "manually_installed" : true ,
20
+ "deprecated" : true ,
21
+ "releases" : {
22
+ "1.6.2" : {
23
+ "name" : " Arduino AVR Boards" ,
24
+ "version" : " 1.6.2" ,
25
+ "type" : [
26
+ " Arduino"
27
+ ],
28
+ "installed" : true ,
29
+ "boards" : [
30
+ {
31
+ "name" : " Arduino Robot Motor"
32
+ }
33
+ ],
34
+ "help" : {
35
+ "online" : " http://www.arduino.cc/en/Reference/HomePage"
36
+ },
37
+ "missing_metadata" : true ,
38
+ "deprecated" : true
39
+ },
40
+ "1.8.3" : { ... }
41
+ },
42
+ "installed_version" : " 1.6.2" ,
43
+ "latest_version" : " 1.8.3"
44
+ }
45
+ ]
46
+ ```
47
+
48
+ ### gRPC ` cc.arduino.cli.commands.v1.PlatformSearchResponse ` message has been changed.
49
+
50
+ The old behavior was a bit misleading to the client because, to list all the available versions for each platform, we
51
+ used to use the ` latest ` as it was describing the current platform version. We introduced a new message:
52
+ ` PlatformSummary ` , with the intent to make the response more straightforward and less error-prone.
53
+
54
+ ``` protobuf
55
+ message PlatformSearchResponse {
56
+ // Results of the search.
57
+ repeated PlatformSummary search_output = 1;
58
+ }
59
+
60
+ // PlatformSummary is a structure containing all the information about
61
+ // a platform and all its available releases.
62
+ message PlatformSummary {
63
+ // Generic information about a platform
64
+ PlatformMetadata metadata = 1;
65
+ // Maps version to the corresponding PlatformRelease
66
+ map<string, PlatformRelease> releases = 2;
67
+ // The installed version of the platform, or empty string if none installed
68
+ string installed_version = 3;
69
+ // The latest available version of the platform, or empty if none available
70
+ string latest_version = 4;
71
+ }
72
+ ```
73
+
74
+ The new response contains an array of ` PlatformSummary ` . ` PlatformSummary ` contains all the information about a platform
75
+ and all its available releases. Releases contain all the PlatformReleases of a specific platform, and the key is the
76
+ semver string of a specific version. We've added the ` installed_version ` and ` latest_version ` to make more convenient
77
+ the access of such values in the map. A few notes about the behavior of the ` releases ` map:
78
+
79
+ - It can be empty if no releases are found
80
+ - It can contain a single-release
81
+ - It can contain multiple releases
82
+ - If in the request we provide the ` manually_installed=true ` , the key of such release is an empty string.
83
+
84
+ ### Removed gRPC API: ` cc.arduino.cli.commands.v1.PlatformList ` , ` PlatformListRequest ` , and ` PlatformListResponse ` .
85
+
86
+ The following gRPC API have been removed:
87
+
88
+ - ` cc.arduino.cli.commands.v1.PlatformList ` : you can use the already available gRPC method ` PlatformSearch ` to perform
89
+ the same task. Setting the ` all_versions=true ` and ` manually_installed=true ` in the ` PlatformSearchRequest ` returns
90
+ all the data needed to produce the same result of the old api.
91
+ - ` cc.arduino.cli.commands.v1.PlatformListRequest ` .
92
+ - ` cc.arduino.cli.commands.v1.PlatformListResponse ` .
93
+
94
+ ### gRPC ` cc.arduino.cli.commands.v1.Platform ` message has been changed.
95
+
96
+ The old ` Platform ` and other information such as name, website, and email... contained details about the currently
97
+ installed version and the latest available. We noticed an ambiguous use of the ` latest ` field, especially when such a
98
+ message came in the ` PlatformSearchResponse ` response. In that use case, the latest field contained the specific version
99
+ of a particular platform: this is a hack because the value doesn't always reflect the meaning of that property. Another
100
+ inconsistent case occurs when a platform maintainer changes the name of a particular release. We always pick the value
101
+ from the latest release, but this might not be what we want to do all the time. We concluded that the design of that
102
+ message isn't something to be considered future-proof proof, so we decided to modify it as follows:
103
+
104
+ ``` protobuf
105
+ // Platform is a structure containing all the information about a single
106
+ // platform release.
107
+ message Platform {
108
+ // Generic information about a platform
109
+ PlatformMetadata metadata = 1;
110
+ // Information about a specific release of a platform
111
+ PlatformRelease release = 2;
112
+ }
113
+
114
+ // PlatformMetadata contains generic information about a platform (not
115
+ // correlated to a specific release).
116
+ message PlatformMetadata {
117
+ // Platform ID (e.g., `arduino:avr`).
118
+ string id = 1;
119
+ // Maintainer of the platform's package.
120
+ string maintainer = 2;
121
+ // A URL provided by the author of the platform's package, intended to point
122
+ // to their website.
123
+ string website = 3;
124
+ // Email of the maintainer of the platform's package.
125
+ string email = 4;
126
+ // If true this Platform has been installed manually in the user' sketchbook
127
+ // hardware folder
128
+ bool manually_installed = 5;
129
+ // True if the latest release of this Platform has been deprecated
130
+ bool deprecated = 6;
131
+ // If true the platform is indexed
132
+ bool indexed = 7;
133
+ }
134
+
135
+ // PlatformRelease contains information about a specific release of a platform.
136
+ message PlatformRelease {
137
+ // Name used to identify the platform to humans (e.g., "Arduino AVR Boards").
138
+ string name = 1;
139
+ // Version of the platform release
140
+ string version = 5;
141
+ // Type of the platform.
142
+ repeated string type = 6;
143
+ // True if the platform is installed
144
+ bool installed = 7;
145
+ // List of boards provided by the platform. If the platform is installed,
146
+ // this is the boards listed in the platform's boards.txt. If the platform is
147
+ // not installed, this is an arbitrary list of board names provided by the
148
+ // platform author for display and may not match boards.txt.
149
+ repeated Board boards = 8;
150
+ // A URL provided by the author of the platform's package, intended to point
151
+ // to their online help service.
152
+ HelpResources help = 9;
153
+ // This field is true when the platform is installed with the Arduino IDE 1.8.
154
+ // If the platform is also not indexed it may fail to work correctly in some
155
+ // circumstances, and it may need to be re-installed.
156
+ bool missing_metadata = 10;
157
+ // True this release is deprecated
158
+ bool deprecated = 11;
159
+ }
160
+ ```
161
+
162
+ To address all the inconsistencies/inaccuracies we introduced two messages:
163
+
164
+ - ` PlatformMetadata ` contains generic information about a platform (not correlated to a specific release).
165
+ - ` PlatformRelease ` contains information about a specific release of a platform.
166
+
7
167
### CLI ` debug --info ` changed JSON output.
8
168
9
169
The string field ` server_configuration.script ` is now an array and has been renamed ` scripts ` , here an example:
0 commit comments