Skip to content

Commit f5274ec

Browse files
committed
Add support for upload.tool.<protocol_name>
This boards.txt property is the replacement for `upload.tool`. `upload.tool` will still be supported, and there are no additional requirements on the new property style. So it is only necessary to make the schema and rules apply to either.
1 parent d274953 commit f5274ec

File tree

7 files changed

+55
-47
lines changed

7 files changed

+55
-47
lines changed

etc/schemas/arduino-boards-txt-definitions-schema.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,6 @@
155155
"upload.protocol": {
156156
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
157157
},
158-
"upload.tool": {
159-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
160-
},
161158
"upload.use_1200bps_touch": {
162159
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
163160
},
@@ -168,6 +165,9 @@
168165
},
169166
{
170167
"patternProperties": {
168+
"^upload.tool(\\..+)?$": {
169+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
170+
},
171171
"^[vp]id\\.[0-9]+$": {
172172
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
173173
}
@@ -220,9 +220,6 @@
220220
"upload.protocol": {
221221
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
222222
},
223-
"upload.tool": {
224-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
225-
},
226223
"upload.use_1200bps_touch": {
227224
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
228225
},
@@ -233,6 +230,9 @@
233230
},
234231
{
235232
"patternProperties": {
233+
"^upload.tool(\\..+)?$": {
234+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
235+
},
236236
"^[vp]id\\.[0-9]+$": {
237237
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
238238
}
@@ -285,9 +285,6 @@
285285
"upload.protocol": {
286286
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
287287
},
288-
"upload.tool": {
289-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
290-
},
291288
"upload.use_1200bps_touch": {
292289
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
293290
},
@@ -298,6 +295,9 @@
298295
},
299296
{
300297
"patternProperties": {
298+
"^upload.tool(\\..+)?$": {
299+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
300+
},
301301
"^[vp]id\\.[0-9]+$": {
302302
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
303303
}
@@ -634,9 +634,6 @@
634634
"upload.protocol": {
635635
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
636636
},
637-
"upload.tool": {
638-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
639-
},
640637
"upload.use_1200bps_touch": {
641638
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
642639
},
@@ -647,6 +644,9 @@
647644
},
648645
{
649646
"patternProperties": {
647+
"^upload.tool(\\..+)?$": {
648+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
649+
},
650650
"^[vp]id\\.[0-9]+$": {
651651
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
652652
}
@@ -687,9 +687,6 @@
687687
"upload.protocol": {
688688
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
689689
},
690-
"upload.tool": {
691-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
692-
},
693690
"upload.use_1200bps_touch": {
694691
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
695692
},
@@ -700,6 +697,9 @@
700697
},
701698
{
702699
"patternProperties": {
700+
"^upload.tool(\\..+)?$": {
701+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
702+
},
703703
"^[vp]id\\.[0-9]+$": {
704704
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
705705
}
@@ -740,9 +740,6 @@
740740
"upload.protocol": {
741741
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
742742
},
743-
"upload.tool": {
744-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
745-
},
746743
"upload.use_1200bps_touch": {
747744
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
748745
},
@@ -753,6 +750,9 @@
753750
},
754751
{
755752
"patternProperties": {
753+
"^upload.tool(\\..+)?$": {
754+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
755+
},
756756
"^[vp]id\\.[0-9]+$": {
757757
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
758758
}

internal/project/platform/boardstxt/boardstxtschema_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,17 @@ func TestMinLength(t *testing.T) {
8888
{"foo.upload.tool", "foo/upload\\.tool", 1, compliancelevel.Specification},
8989
{"foo.upload.tool", "foo/upload\\.tool", 1, compliancelevel.Strict},
9090

91+
{"foo.upload.tool.serial", "foo/upload\\.tool.serial", 1, compliancelevel.Permissive},
92+
{"foo.upload.tool.serial", "foo/upload\\.tool.serial", 1, compliancelevel.Specification},
93+
{"foo.upload.tool.serial", "foo/upload\\.tool.serial", 1, compliancelevel.Strict},
94+
9195
{"foo.menu.bar.baz.upload.tool", "foo/menu/bar/baz/upload\\.tool", 1, compliancelevel.Permissive},
9296
{"foo.menu.bar.baz.upload.tool", "foo/menu/bar/baz/upload\\.tool", 1, compliancelevel.Specification},
9397
{"foo.menu.bar.baz.upload.tool", "foo/menu/bar/baz/upload\\.tool", 1, compliancelevel.Strict},
98+
99+
{"foo.menu.bar.baz.upload.tool.serial", "foo/menu/bar/baz/upload\\.tool.serial", 1, compliancelevel.Permissive},
100+
{"foo.menu.bar.baz.upload.tool.serial", "foo/menu/bar/baz/upload\\.tool.serial", 1, compliancelevel.Specification},
101+
{"foo.menu.bar.baz.upload.tool.serial", "foo/menu/bar/baz/upload\\.tool.serial", 1, compliancelevel.Strict},
94102
}
95103

96104
// Test schema validation results with value length < minimum.

internal/rule/ruleconfiguration/ruleconfiguration.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,9 +1781,9 @@ var configurations = []Type{
17811781
Category: "configuration files",
17821782
Subcategory: "boards.txt",
17831783
ID: "PF016",
1784-
Brief: "missing upload.tool",
1785-
Description: "A board definition in the platform's `boards.txt` configuration file is missing the `upload.tool` property.",
1786-
MessageTemplate: "Missing upload.tool property for board ID(s) {{.}}",
1784+
Brief: "missing upload.tool.<protocol_name>",
1785+
Description: "A board definition in the platform's `boards.txt` configuration file is missing the `upload.tool.<protocol_name>` property.",
1786+
MessageTemplate: "Missing upload.tool.<protocol_name> property for board ID(s) {{.}}",
17871787
Reference: "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-upload-configuration",
17881788
DisableModes: nil,
17891789
EnableModes: []rulemode.Type{rulemode.Default},
@@ -1798,9 +1798,9 @@ var configurations = []Type{
17981798
Category: "configuration files",
17991799
Subcategory: "boards.txt",
18001800
ID: "PF017",
1801-
Brief: "upload.tool < min length",
1802-
Description: "The `upload.tool` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
1803-
MessageTemplate: "upload.tool value for board ID(s) {{.}} is less than the minimum length.",
1801+
Brief: "upload.tool.<protocol_name> < min length",
1802+
Description: "The `upload.tool.<protocol_name>` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
1803+
MessageTemplate: "upload.tool.<protocol_name> value for board ID(s) {{.}} is less than the minimum length.",
18041804
Reference: "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-upload-configuration",
18051805
DisableModes: nil,
18061806
EnableModes: []rulemode.Type{rulemode.Default},

internal/rule/rulefunction/platform.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ func BoardsTxtBoardIDUploadToolMissing() (result ruleresult.Type, output string)
286286
return ruleresult.Skip, "boards.txt has no visible boards"
287287
}
288288

289-
nonCompliantBoardIDs := boardIDMissingRequiredProperty(projectdata.BoardsTxtVisibleBoardIds(), "upload.tool", false)
289+
nonCompliantBoardIDs := boardIDMissingRequiredProperty(projectdata.BoardsTxtVisibleBoardIds(), "upload.tool", true)
290290

291291
if len(nonCompliantBoardIDs) > 0 {
292292
return ruleresult.Fail, strings.Join(nonCompliantBoardIDs, ", ")
@@ -305,7 +305,7 @@ func BoardsTxtBoardIDUploadToolLTMinLength() (result ruleresult.Type, output str
305305
return ruleresult.Skip, "boards.txt has no boards"
306306
}
307307

308-
nonCompliantBoardIDs := boardIDValueLTMinLength(projectdata.BoardsTxtBoardIds(), "upload\\.tool", compliancelevel.Specification)
308+
nonCompliantBoardIDs := boardIDValueLTMinLength(projectdata.BoardsTxtBoardIds(), "upload\\.tool(\\..+)?", compliancelevel.Specification)
309309

310310
if len(nonCompliantBoardIDs) > 0 {
311311
return ruleresult.Fail, strings.Join(nonCompliantBoardIDs, ", ")

internal/rule/rulefunction/testdata/platforms/boardID-upload-tool-LT-boards.txt/boards.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ buno.name=Buno
22
buno.build.board=BUNO
33
buno.build.core=arduino
44
buno.build.variant=standard
5-
buno.upload.tool=
5+
buno.upload.tool.serial=
66
buno.upload.maximum_size=32256
77
buno.upload.maximum_data_size=2048
88

@@ -18,7 +18,7 @@ funo.name=Funo
1818
funo.build.board=FUNO
1919
funo.build.core=arduino
2020
funo.build.variant=standard
21-
funo.upload.tool=
21+
funo.menu.foo.bar.upload.tool.serial=
2222
funo.upload.maximum_size=32256
2323
funo.upload.maximum_data_size=2048
2424

internal/rule/rulefunction/testdata/platforms/valid-boards.txt/boards.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ buno.name=Buno
22
buno.build.board=BUNO
33
buno.build.core=arduino
44
buno.build.variant=standard
5-
buno.upload.tool=avrdude
65
buno.upload.maximum_size=32256
76
buno.upload.maximum_data_size=2048
7+
buno.upload.tool.serial=avrdude
88

99
uno.name=Arduino Uno
1010
uno.build.board=UNO

internal/rule/schema/schemadata/bindata.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
230230
"upload.protocol": {
231231
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
232232
},
233-
"upload.tool": {
234-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
235-
},
236233
"upload.use_1200bps_touch": {
237234
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
238235
},
@@ -243,6 +240,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
243240
},
244241
{
245242
"patternProperties": {
243+
"^upload.tool(\\..+)?$": {
244+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
245+
},
246246
"^[vp]id\\.[0-9]+$": {
247247
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
248248
}
@@ -295,9 +295,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
295295
"upload.protocol": {
296296
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
297297
},
298-
"upload.tool": {
299-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
300-
},
301298
"upload.use_1200bps_touch": {
302299
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
303300
},
@@ -308,6 +305,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
308305
},
309306
{
310307
"patternProperties": {
308+
"^upload.tool(\\..+)?$": {
309+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
310+
},
311311
"^[vp]id\\.[0-9]+$": {
312312
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
313313
}
@@ -360,9 +360,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
360360
"upload.protocol": {
361361
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
362362
},
363-
"upload.tool": {
364-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
365-
},
366363
"upload.use_1200bps_touch": {
367364
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
368365
},
@@ -373,6 +370,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
373370
},
374371
{
375372
"patternProperties": {
373+
"^upload.tool(\\..+)?$": {
374+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
375+
},
376376
"^[vp]id\\.[0-9]+$": {
377377
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
378378
}
@@ -709,9 +709,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
709709
"upload.protocol": {
710710
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
711711
},
712-
"upload.tool": {
713-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
714-
},
715712
"upload.use_1200bps_touch": {
716713
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
717714
},
@@ -722,6 +719,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
722719
},
723720
{
724721
"patternProperties": {
722+
"^upload.tool(\\..+)?$": {
723+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
724+
},
725725
"^[vp]id\\.[0-9]+$": {
726726
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
727727
}
@@ -762,9 +762,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
762762
"upload.protocol": {
763763
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
764764
},
765-
"upload.tool": {
766-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
767-
},
768765
"upload.use_1200bps_touch": {
769766
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
770767
},
@@ -775,6 +772,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
775772
},
776773
{
777774
"patternProperties": {
775+
"^upload.tool(\\..+)?$": {
776+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
777+
},
778778
"^[vp]id\\.[0-9]+$": {
779779
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
780780
}
@@ -815,9 +815,6 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
815815
"upload.protocol": {
816816
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
817817
},
818-
"upload.tool": {
819-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
820-
},
821818
"upload.use_1200bps_touch": {
822819
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
823820
},
@@ -828,6 +825,9 @@ var _arduinoBoardsTxtDefinitionsSchemaJson = []byte(`{
828825
},
829826
{
830827
"patternProperties": {
828+
"^upload.tool(\\..+)?$": {
829+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
830+
},
831831
"^[vp]id\\.[0-9]+$": {
832832
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
833833
}

0 commit comments

Comments
 (0)