Skip to content

Commit 014bb0a

Browse files
committed
Check custom board options for required properties
boards.txt properties may be defined either directly under the board ID, or in the custom board options. So the schema and rule functions must be made to check both places. Unfortunately, JSON schema doesn't have the capability to define required properties that can be defined at either path, so those rules are now handled in pure Go code.
1 parent e794fff commit 014bb0a

File tree

27 files changed

+911
-139
lines changed

27 files changed

+911
-139
lines changed

Diff for: etc/schemas/arduino-boards-txt-definitions-schema.json

+261-17
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@
137137
"hide": {
138138
"$ref": "#/definitions/propertiesObjects/boardIDHide/permissive/object"
139139
},
140+
"menu": {
141+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/permissive/object"
142+
},
140143
"serial.disableDTR": {
141144
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/permissive/object"
142145
},
@@ -165,9 +168,6 @@
165168
},
166169
{
167170
"patternProperties": {
168-
"^menu\\.[^.]+\\.[^.]+$": {
169-
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/permissive/object"
170-
},
171171
"^[vp]id\\.[0-9]+$": {
172172
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
173173
}
@@ -202,6 +202,9 @@
202202
"hide": {
203203
"$ref": "#/definitions/propertiesObjects/boardIDHide/specification/object"
204204
},
205+
"menu": {
206+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/specification/object"
207+
},
205208
"serial.disableDTR": {
206209
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/specification/object"
207210
},
@@ -230,9 +233,6 @@
230233
},
231234
{
232235
"patternProperties": {
233-
"^menu\\.[^.]+\\.[^.]+$": {
234-
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/specification/object"
235-
},
236236
"^[vp]id\\.[0-9]+$": {
237237
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
238238
}
@@ -267,6 +267,9 @@
267267
"hide": {
268268
"$ref": "#/definitions/propertiesObjects/boardIDHide/strict/object"
269269
},
270+
"menu": {
271+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/strict/object"
272+
},
270273
"serial.disableDTR": {
271274
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/strict/object"
272275
},
@@ -295,9 +298,6 @@
295298
},
296299
{
297300
"patternProperties": {
298-
"^menu\\.[^.]+\\.[^.]+$": {
299-
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/strict/object"
300-
},
301301
"^[vp]id\\.[0-9]+$": {
302302
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
303303
}
@@ -477,15 +477,130 @@
477477
}
478478
}
479479
},
480-
"boardIDMenuMenuIDOptionID": {
480+
"boardIDMenu": {
481481
"base": {
482482
"object": {
483483
"allOf": [
484484
{
485-
"type": "string"
485+
"type": "object"
486+
}
487+
]
488+
}
489+
},
490+
"permissive": {
491+
"object": {
492+
"allOf": [
493+
{
494+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/base/object"
486495
},
487496
{
488-
"minLength": 1
497+
"patternProperties": {
498+
"^.+$": {
499+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/permissive/object"
500+
}
501+
}
502+
}
503+
]
504+
}
505+
},
506+
"specification": {
507+
"object": {
508+
"allOf": [
509+
{
510+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/base/object"
511+
},
512+
{
513+
"patternProperties": {
514+
"^.+$": {
515+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/specification/object"
516+
}
517+
}
518+
}
519+
]
520+
}
521+
},
522+
"strict": {
523+
"object": {
524+
"allOf": [
525+
{
526+
"$ref": "#/definitions/propertiesObjects/boardIDMenu/base/object"
527+
},
528+
{
529+
"patternProperties": {
530+
".+": {
531+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/strict/object"
532+
}
533+
}
534+
}
535+
]
536+
}
537+
}
538+
},
539+
"boardIDMenuMenuID": {
540+
"base": {
541+
"object": {
542+
"allOf": [
543+
{
544+
"type": "object"
545+
}
546+
]
547+
}
548+
},
549+
"permissive": {
550+
"object": {
551+
"allOf": [
552+
{
553+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/base/object"
554+
},
555+
{
556+
"patternProperties": {
557+
"^.+$": {
558+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/permissive/object"
559+
}
560+
}
561+
}
562+
]
563+
}
564+
},
565+
"specification": {
566+
"object": {
567+
"allOf": [
568+
{
569+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/base/object"
570+
},
571+
{
572+
"patternProperties": {
573+
"^.+$": {
574+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/specification/object"
575+
}
576+
}
577+
}
578+
]
579+
}
580+
},
581+
"strict": {
582+
"object": {
583+
"allOf": [
584+
{
585+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuID/base/object"
586+
},
587+
{
588+
"patternProperties": {
589+
".+": {
590+
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/strict/object"
591+
}
592+
}
593+
}
594+
]
595+
}
596+
}
597+
},
598+
"boardIDMenuMenuIDOptionID": {
599+
"base": {
600+
"object": {
601+
"allOf": [
602+
{
603+
"type": "object"
489604
}
490605
]
491606
}
@@ -495,6 +610,50 @@
495610
"allOf": [
496611
{
497612
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/base/object"
613+
},
614+
{
615+
"properties": {
616+
"build.board": {
617+
"$ref": "#/definitions/propertiesObjects/boardIDBuildBoard/permissive/object"
618+
},
619+
"build.core": {
620+
"$ref": "#/definitions/propertiesObjects/boardIDBuildCore/permissive/object"
621+
},
622+
"serial.disableDTR": {
623+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/permissive/object"
624+
},
625+
"serial.disableRTS": {
626+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/permissive/object"
627+
},
628+
"upload.maximum_size": {
629+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/permissive/object"
630+
},
631+
"upload.maximum_data_size": {
632+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/permissive/object"
633+
},
634+
"upload.protocol": {
635+
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
636+
},
637+
"upload.tool": {
638+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
639+
},
640+
"upload.use_1200bps_touch": {
641+
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
642+
},
643+
"upload.wait_for_upload_port": {
644+
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/permissive/object"
645+
}
646+
}
647+
},
648+
{
649+
"patternProperties": {
650+
"^[vp]id\\.[0-9]+$": {
651+
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
652+
}
653+
}
654+
},
655+
{
656+
"$ref": "#/definitions/propertyNamesObjects/permissive/object"
498657
}
499658
]
500659
}
@@ -504,6 +663,50 @@
504663
"allOf": [
505664
{
506665
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/base/object"
666+
},
667+
{
668+
"properties": {
669+
"build.board": {
670+
"$ref": "#/definitions/propertiesObjects/boardIDBuildBoard/specification/object"
671+
},
672+
"build.core": {
673+
"$ref": "#/definitions/propertiesObjects/boardIDBuildCore/specification/object"
674+
},
675+
"serial.disableDTR": {
676+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/specification/object"
677+
},
678+
"serial.disableRTS": {
679+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/specification/object"
680+
},
681+
"upload.maximum_size": {
682+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/specification/object"
683+
},
684+
"upload.maximum_data_size": {
685+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/specification/object"
686+
},
687+
"upload.protocol": {
688+
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
689+
},
690+
"upload.tool": {
691+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
692+
},
693+
"upload.use_1200bps_touch": {
694+
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
695+
},
696+
"upload.wait_for_upload_port": {
697+
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/specification/object"
698+
}
699+
}
700+
},
701+
{
702+
"patternProperties": {
703+
"^[vp]id\\.[0-9]+$": {
704+
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
705+
}
706+
}
707+
},
708+
{
709+
"$ref": "#/definitions/propertyNamesObjects/specification/object"
507710
}
508711
]
509712
}
@@ -513,6 +716,50 @@
513716
"allOf": [
514717
{
515718
"$ref": "#/definitions/propertiesObjects/boardIDMenuMenuIDOptionID/base/object"
719+
},
720+
{
721+
"properties": {
722+
"build.board": {
723+
"$ref": "#/definitions/propertiesObjects/boardIDBuildBoard/strict/object"
724+
},
725+
"build.core": {
726+
"$ref": "#/definitions/propertiesObjects/boardIDBuildCore/strict/object"
727+
},
728+
"serial.disableDTR": {
729+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableDTR/strict/object"
730+
},
731+
"serial.disableRTS": {
732+
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/strict/object"
733+
},
734+
"upload.maximum_size": {
735+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/strict/object"
736+
},
737+
"upload.maximum_data_size": {
738+
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/strict/object"
739+
},
740+
"upload.protocol": {
741+
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
742+
},
743+
"upload.tool": {
744+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
745+
},
746+
"upload.use_1200bps_touch": {
747+
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
748+
},
749+
"upload.wait_for_upload_port": {
750+
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/strict/object"
751+
}
752+
}
753+
},
754+
{
755+
"patternProperties": {
756+
"^[vp]id\\.[0-9]+$": {
757+
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
758+
}
759+
}
760+
},
761+
{
762+
"$ref": "#/definitions/propertyNamesObjects/strict/object"
516763
}
517764
]
518765
}
@@ -912,7 +1159,7 @@
9121159
"userExtraFlagsProperties": {
9131160
"propertyNames": {
9141161
"not": {
915-
"pattern": "^compiler\\.((c)|(c\\.elf)|(S)|(cpp)|(ar)|(objcopy.eep)|(elf2hex))\\.extra_flags$"
1162+
"pattern": "^compiler\\.((c)|(c\\.elf)|(S)|(cpp)|(ar)|(objcopy\\.eep)|(elf2hex))\\.extra_flags$"
9161163
}
9171164
}
9181165
}
@@ -935,7 +1182,7 @@
9351182
"object": {
9361183
"allOf": [
9371184
{
938-
"required": ["name", "build.core", "upload.tool"]
1185+
"required": ["name"]
9391186
}
9401187
]
9411188
}
@@ -963,9 +1210,6 @@
9631210
"allOf": [
9641211
{
9651212
"$ref": "#/definitions/requiredObjects/boardID/base/object"
966-
},
967-
{
968-
"required": ["build.board", "upload.maximum_size", "upload.maximum_data_size"]
9691213
}
9701214
]
9711215
}

0 commit comments

Comments
 (0)