Skip to content

Commit 8277f9e

Browse files
authored
Merge pull request #204 from per1234/discoverydependencies-schema-rules
Add schema-based rules for discovery dependencies data of package index
2 parents 9c0f8c6 + 1ee41db commit 8277f9e

File tree

19 files changed

+1145
-18
lines changed

19 files changed

+1145
-18
lines changed

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

+86
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,9 @@
451451
},
452452
"toolsDependencies": {
453453
"$ref": "#/definitions/propertiesObjects/toolsDependencies/permissive/object"
454+
},
455+
"discoveryDependencies": {
456+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/permissive/object"
454457
}
455458
},
456459
"additionalProperties": false
@@ -503,6 +506,9 @@
503506
},
504507
"toolsDependencies": {
505508
"$ref": "#/definitions/propertiesObjects/toolsDependencies/specification/object"
509+
},
510+
"discoveryDependencies": {
511+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/specification/object"
506512
}
507513
},
508514
"additionalProperties": false
@@ -555,6 +561,9 @@
555561
},
556562
"toolsDependencies": {
557563
"$ref": "#/definitions/propertiesObjects/toolsDependencies/strict/object"
564+
},
565+
"discoveryDependencies": {
566+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/strict/object"
558567
}
559568
},
560569
"additionalProperties": false
@@ -997,6 +1006,83 @@
9971006
}
9981007
}
9991008
},
1009+
"discoveryDependencies": {
1010+
"base": {
1011+
"object": {
1012+
"type": "array",
1013+
"items": {
1014+
"type": "object",
1015+
"required": ["packager", "name"]
1016+
}
1017+
}
1018+
},
1019+
"permissive": {
1020+
"object": {
1021+
"allOf": [
1022+
{
1023+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/base/object"
1024+
},
1025+
{
1026+
"items": {
1027+
"properties": {
1028+
"packager": {
1029+
"$ref": "#/definitions/propertiesObjects/packager/permissive/object"
1030+
},
1031+
"name": {
1032+
"$ref": "#/definitions/propertiesObjects/toolName/permissive/object"
1033+
}
1034+
},
1035+
"additionalProperties": false
1036+
}
1037+
}
1038+
]
1039+
}
1040+
},
1041+
"specification": {
1042+
"object": {
1043+
"allOf": [
1044+
{
1045+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/base/object"
1046+
},
1047+
{
1048+
"items": {
1049+
"properties": {
1050+
"packager": {
1051+
"$ref": "#/definitions/propertiesObjects/packager/specification/object"
1052+
},
1053+
"name": {
1054+
"$ref": "#/definitions/propertiesObjects/toolName/specification/object"
1055+
}
1056+
},
1057+
"additionalProperties": false
1058+
}
1059+
}
1060+
]
1061+
}
1062+
},
1063+
"strict": {
1064+
"object": {
1065+
"allOf": [
1066+
{
1067+
"$ref": "#/definitions/propertiesObjects/discoveryDependencies/base/object"
1068+
},
1069+
{
1070+
"items": {
1071+
"properties": {
1072+
"packager": {
1073+
"$ref": "#/definitions/propertiesObjects/packager/strict/object"
1074+
},
1075+
"name": {
1076+
"$ref": "#/definitions/propertiesObjects/toolName/strict/object"
1077+
}
1078+
},
1079+
"additionalProperties": false
1080+
}
1081+
}
1082+
]
1083+
}
1084+
}
1085+
},
10001086
"packager": {
10011087
"base": {
10021088
"object": {

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

+34
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ var validIndexRaw = []byte(`
6464
"name": "avr-gcc",
6565
"version": "7.3.0-atmel3.6.1-arduino7"
6666
}
67+
],
68+
"discoveryDependencies": [
69+
{
70+
"packager": "arduino",
71+
"name": "ble-discovery"
72+
}
6773
]
6874
}
6975
],
@@ -137,6 +143,14 @@ func TestMinLength(t *testing.T) {
137143
{"/packages/0/platforms/0/toolsDependencies/0/name", 1, compliancelevel.Specification},
138144
{"/packages/0/platforms/0/toolsDependencies/0/name", 1, compliancelevel.Strict},
139145

146+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", 1, compliancelevel.Permissive},
147+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", 1, compliancelevel.Specification},
148+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", 1, compliancelevel.Strict},
149+
150+
{"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Permissive},
151+
{"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Specification},
152+
{"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Strict},
153+
140154
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Permissive},
141155
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Specification},
142156
{"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Strict},
@@ -276,6 +290,18 @@ func TestRequired(t *testing.T) {
276290
{"/packages/0/platforms/0/toolsDependencies/0/version", compliancelevel.Specification, assert.True},
277291
{"/packages/0/platforms/0/toolsDependencies/0/version", compliancelevel.Strict, assert.True},
278292

293+
{"/packages/0/platforms/0/discoveryDependencies", compliancelevel.Permissive, assert.False},
294+
{"/packages/0/platforms/0/discoveryDependencies", compliancelevel.Specification, assert.False},
295+
{"/packages/0/platforms/0/discoveryDependencies", compliancelevel.Strict, assert.False},
296+
297+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", compliancelevel.Permissive, assert.True},
298+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", compliancelevel.Specification, assert.True},
299+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", compliancelevel.Strict, assert.True},
300+
301+
{"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Permissive, assert.True},
302+
{"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Specification, assert.True},
303+
{"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Strict, assert.True},
304+
279305
{"/packages/0/tools/0/name", compliancelevel.Permissive, assert.True},
280306
{"/packages/0/tools/0/name", compliancelevel.Specification, assert.True},
281307
{"/packages/0/tools/0/name", compliancelevel.Strict, assert.True},
@@ -551,6 +577,10 @@ func TestType(t *testing.T) {
551577
{"/packages/0/platforms/0/boards/0/name", 42, assert.True},
552578
{"/packages/0/platforms/0/toolsDependencies", 42, assert.True},
553579
{"/packages/0/platforms/0/toolsDependencies/0/packager", 42, assert.True},
580+
{"/packages/0/platforms/0/toolsDependencies/0/version", 42, assert.True},
581+
{"/packages/0/platforms/0/discoveryDependencies", 42, assert.True},
582+
{"/packages/0/platforms/0/discoveryDependencies/0/packager", 42, assert.True},
583+
{"/packages/0/platforms/0/discoveryDependencies/0/name", 42, assert.True},
554584
{"/packages/0/tools", 42, assert.True},
555585
{"/packages/0/tools/0/name", 42, assert.True},
556586
{"/packages/0/tools/0/version", 42, assert.True},
@@ -678,6 +708,10 @@ func TestAdditionalProperties(t *testing.T) {
678708
{"/packages/0/platforms/0/toolsDependencies/0", compliancelevel.Specification, assert.True},
679709
{"/packages/0/platforms/0/toolsDependencies/0", compliancelevel.Strict, assert.True},
680710

711+
{"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Permissive, assert.True},
712+
{"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Specification, assert.True},
713+
{"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Strict, assert.True},
714+
681715
{"/packages/0/tools/0", compliancelevel.Permissive, assert.True},
682716
{"/packages/0/tools/0", compliancelevel.Specification, assert.True},
683717
{"/packages/0/tools/0", compliancelevel.Strict, assert.True},

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

+12
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func InitializeForPackageIndex() {
4444
packageIndexPlatforms = nil
4545
packageIndexBoards = nil
4646
packageIndexToolsDependencies = nil
47+
packageIndexDiscoveryDependencies = nil
4748
packageIndexTools = nil
4849
packageIndexSystems = nil
4950
packageIndexSchemaValidationResult = nil
@@ -62,6 +63,10 @@ func InitializeForPackageIndex() {
6263
packageIndexToolsDependencies = append(packageIndexToolsDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "toolsDependencies", platformData.ID, " - {{index . 0}}:{{index . 1}}@{{index . 2}}", []string{"packager", "name", "version"})...)
6364
}
6465

66+
for _, platformData := range PackageIndexPlatforms() {
67+
packageIndexDiscoveryDependencies = append(packageIndexDiscoveryDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "discoveryDependencies", platformData.ID, " - {{index . 0}}:{{index . 1}}", []string{"packager", "name"})...)
68+
}
69+
6570
for _, packageData := range PackageIndexPackages() {
6671
packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID, ":{{index . 0}}@{{index . 1}}", []string{"name", "version"})...)
6772
}
@@ -123,6 +128,13 @@ func PackageIndexToolsDependencies() []PackageIndexData {
123128
return packageIndexToolsDependencies
124129
}
125130

131+
var packageIndexDiscoveryDependencies []PackageIndexData
132+
133+
// PackageIndexDiscoveryDependencies returns the slice of pluggable discovery tool dependency data for the package index.
134+
func PackageIndexDiscoveryDependencies() []PackageIndexData {
135+
return packageIndexDiscoveryDependencies
136+
}
137+
126138
var packageIndexTools []PackageIndexData
127139

128140
// PackageIndexTools returns the slice of tool data for the package index.

0 commit comments

Comments
 (0)