Skip to content

Commit 4fcbd06

Browse files
committed
Add pluggable monitor support to package index schema
Support for a new optional `packages[*].platforms[*].monitorDependencies` field in the Arduino package index format has been added to Arduino CLI. Since the package index JSON schema does not allow additional properties in `packages[*].platforms[*]`, package indexes using this new property would previously fail validation against the schema.
1 parent cf9c369 commit 4fcbd06

File tree

3 files changed

+205
-0
lines changed

3 files changed

+205
-0
lines changed

Diff for: etc/schemas/arduino-package-index-definitions-schema.json

+86
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,9 @@
455455
},
456456
"discoveryDependencies": {
457457
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/permissive/object"
458+
},
459+
"monitorDependencies": {
460+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/permissive/object"
458461
}
459462
},
460463
"additionalProperties": false
@@ -510,6 +513,9 @@
510513
},
511514
"discoveryDependencies": {
512515
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/specification/object"
516+
},
517+
"monitorDependencies": {
518+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/specification/object"
513519
}
514520
},
515521
"additionalProperties": false
@@ -565,6 +571,9 @@
565571
},
566572
"discoveryDependencies": {
567573
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/strict/object"
574+
},
575+
"monitorDependencies": {
576+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/strict/object"
568577
}
569578
},
570579
"additionalProperties": false
@@ -1084,6 +1093,83 @@
10841093
}
10851094
}
10861095
},
1096+
"monitorDependencies": {
1097+
"base": {
1098+
"object": {
1099+
"type": "array",
1100+
"items": {
1101+
"type": "object",
1102+
"required": ["packager", "name"]
1103+
}
1104+
}
1105+
},
1106+
"permissive": {
1107+
"object": {
1108+
"allOf": [
1109+
{
1110+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
1111+
},
1112+
{
1113+
"items": {
1114+
"properties": {
1115+
"packager": {
1116+
"$ref": "#/definitions/propertiesObjects/packager/permissive/object"
1117+
},
1118+
"name": {
1119+
"$ref": "#/definitions/propertiesObjects/toolName/permissive/object"
1120+
}
1121+
},
1122+
"additionalProperties": false
1123+
}
1124+
}
1125+
]
1126+
}
1127+
},
1128+
"specification": {
1129+
"object": {
1130+
"allOf": [
1131+
{
1132+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
1133+
},
1134+
{
1135+
"items": {
1136+
"properties": {
1137+
"packager": {
1138+
"$ref": "#/definitions/propertiesObjects/packager/specification/object"
1139+
},
1140+
"name": {
1141+
"$ref": "#/definitions/propertiesObjects/toolName/specification/object"
1142+
}
1143+
},
1144+
"additionalProperties": false
1145+
}
1146+
}
1147+
]
1148+
}
1149+
},
1150+
"strict": {
1151+
"object": {
1152+
"allOf": [
1153+
{
1154+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
1155+
},
1156+
{
1157+
"items": {
1158+
"properties": {
1159+
"packager": {
1160+
"$ref": "#/definitions/propertiesObjects/packager/strict/object"
1161+
},
1162+
"name": {
1163+
"$ref": "#/definitions/propertiesObjects/toolName/strict/object"
1164+
}
1165+
},
1166+
"additionalProperties": false
1167+
}
1168+
}
1169+
]
1170+
}
1171+
}
1172+
},
10871173
"packager": {
10881174
"base": {
10891175
"object": {

Diff for: internal/project/packageindex/packageindexschemas_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ var validIndexRaw = []byte(`
7171
"packager": "arduino",
7272
"name": "ble-discovery"
7373
}
74+
],
75+
"monitorDependencies": [
76+
{
77+
"packager": "arduino",
78+
"name": "network-monitor"
79+
}
7480
]
7581
}
7682
],
@@ -152,6 +158,14 @@ func TestMinLength(t *testing.T) {
152158
{"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Specification},
153159
{"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Strict},
154160

161+
{"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Permissive},
162+
{"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Specification},
163+
{"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Strict},
164+
165+
{"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Permissive},
166+
{"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Specification},
167+
{"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Strict},
168+
155169
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Permissive},
156170
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Specification},
157171
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Strict},
@@ -303,6 +317,18 @@ func TestRequired(t *testing.T) {
303317
{"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Specification, assert.True},
304318
{"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Strict, assert.True},
305319

320+
{"/packages/0/platforms/0/monitorDependencies", compliancelevel.Permissive, assert.False},
321+
{"/packages/0/platforms/0/monitorDependencies", compliancelevel.Specification, assert.False},
322+
{"/packages/0/platforms/0/monitorDependencies", compliancelevel.Strict, assert.False},
323+
324+
{"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Permissive, assert.True},
325+
{"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Specification, assert.True},
326+
{"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Strict, assert.True},
327+
328+
{"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Permissive, assert.True},
329+
{"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Specification, assert.True},
330+
{"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Strict, assert.True},
331+
306332
{"/packages/0/tools/0/name", compliancelevel.Permissive, assert.True},
307333
{"/packages/0/tools/0/name", compliancelevel.Specification, assert.True},
308334
{"/packages/0/tools/0/name", compliancelevel.Strict, assert.True},
@@ -586,6 +612,9 @@ func TestType(t *testing.T) {
586612
{"/packages/0/platforms/0/discoveryDependencies", 42, assert.True},
587613
{"/packages/0/platforms/0/discoveryDependencies/0/packager", 42, assert.True},
588614
{"/packages/0/platforms/0/discoveryDependencies/0/name", 42, assert.True},
615+
{"/packages/0/platforms/0/monitorDependencies", 42, assert.True},
616+
{"/packages/0/platforms/0/monitorDependencies/0/packager", 42, assert.True},
617+
{"/packages/0/platforms/0/monitorDependencies/0/name", 42, assert.True},
589618
{"/packages/0/tools", 42, assert.True},
590619
{"/packages/0/tools/0/name", 42, assert.True},
591620
{"/packages/0/tools/0/version", 42, assert.True},
@@ -717,6 +746,10 @@ func TestAdditionalProperties(t *testing.T) {
717746
{"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Specification, assert.True},
718747
{"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Strict, assert.True},
719748

749+
{"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Permissive, assert.True},
750+
{"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Specification, assert.True},
751+
{"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Strict, assert.True},
752+
720753
{"/packages/0/tools/0", compliancelevel.Permissive, assert.True},
721754
{"/packages/0/tools/0", compliancelevel.Specification, assert.True},
722755
{"/packages/0/tools/0", compliancelevel.Strict, assert.True},

Diff for: internal/rule/schema/schemadata/bindata.go

+86
Original file line numberDiff line numberDiff line change
@@ -2987,6 +2987,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
29872987
},
29882988
"discoveryDependencies": {
29892989
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/permissive/object"
2990+
},
2991+
"monitorDependencies": {
2992+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/permissive/object"
29902993
}
29912994
},
29922995
"additionalProperties": false
@@ -3042,6 +3045,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
30423045
},
30433046
"discoveryDependencies": {
30443047
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/specification/object"
3048+
},
3049+
"monitorDependencies": {
3050+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/specification/object"
30453051
}
30463052
},
30473053
"additionalProperties": false
@@ -3097,6 +3103,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
30973103
},
30983104
"discoveryDependencies": {
30993105
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/strict/object"
3106+
},
3107+
"monitorDependencies": {
3108+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/strict/object"
31003109
}
31013110
},
31023111
"additionalProperties": false
@@ -3616,6 +3625,83 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
36163625
}
36173626
}
36183627
},
3628+
"monitorDependencies": {
3629+
"base": {
3630+
"object": {
3631+
"type": "array",
3632+
"items": {
3633+
"type": "object",
3634+
"required": ["packager", "name"]
3635+
}
3636+
}
3637+
},
3638+
"permissive": {
3639+
"object": {
3640+
"allOf": [
3641+
{
3642+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
3643+
},
3644+
{
3645+
"items": {
3646+
"properties": {
3647+
"packager": {
3648+
"$ref": "#/definitions/propertiesObjects/packager/permissive/object"
3649+
},
3650+
"name": {
3651+
"$ref": "#/definitions/propertiesObjects/toolName/permissive/object"
3652+
}
3653+
},
3654+
"additionalProperties": false
3655+
}
3656+
}
3657+
]
3658+
}
3659+
},
3660+
"specification": {
3661+
"object": {
3662+
"allOf": [
3663+
{
3664+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
3665+
},
3666+
{
3667+
"items": {
3668+
"properties": {
3669+
"packager": {
3670+
"$ref": "#/definitions/propertiesObjects/packager/specification/object"
3671+
},
3672+
"name": {
3673+
"$ref": "#/definitions/propertiesObjects/toolName/specification/object"
3674+
}
3675+
},
3676+
"additionalProperties": false
3677+
}
3678+
}
3679+
]
3680+
}
3681+
},
3682+
"strict": {
3683+
"object": {
3684+
"allOf": [
3685+
{
3686+
"$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object"
3687+
},
3688+
{
3689+
"items": {
3690+
"properties": {
3691+
"packager": {
3692+
"$ref": "#/definitions/propertiesObjects/packager/strict/object"
3693+
},
3694+
"name": {
3695+
"$ref": "#/definitions/propertiesObjects/toolName/strict/object"
3696+
}
3697+
},
3698+
"additionalProperties": false
3699+
}
3700+
}
3701+
]
3702+
}
3703+
}
3704+
},
36193705
"packager": {
36203706
"base": {
36213707
"object": {

0 commit comments

Comments
 (0)