Skip to content

Commit 9c0f8c6

Browse files
authored
Merge pull request #203 from per1234/package-index-deprecated-property
Add support for packages[].platforms[].deprecated property of package index
2 parents bb9e831 + d642a94 commit 9c0f8c6

File tree

7 files changed

+146
-0
lines changed

7 files changed

+146
-0
lines changed

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

+31
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,9 @@
425425
"version": {
426426
"$ref": "#/definitions/propertiesObjects/platformVersion/permissive/object"
427427
},
428+
"deprecated": {
429+
"$ref": "#/definitions/propertiesObjects/deprecated/permissive/object"
430+
},
428431
"category": {
429432
"$ref": "#/definitions/propertiesObjects/category/permissive/object"
430433
},
@@ -474,6 +477,9 @@
474477
"version": {
475478
"$ref": "#/definitions/propertiesObjects/platformVersion/specification/object"
476479
},
480+
"deprecated": {
481+
"$ref": "#/definitions/propertiesObjects/deprecated/specification/object"
482+
},
477483
"category": {
478484
"$ref": "#/definitions/propertiesObjects/category/specification/object"
479485
},
@@ -523,6 +529,9 @@
523529
"version": {
524530
"$ref": "#/definitions/propertiesObjects/platformVersion/strict/object"
525531
},
532+
"deprecated": {
533+
"$ref": "#/definitions/propertiesObjects/deprecated/strict/object"
534+
},
526535
"category": {
527536
"$ref": "#/definitions/propertiesObjects/category/strict/object"
528537
},
@@ -644,6 +653,28 @@
644653
}
645654
}
646655
},
656+
"deprecated": {
657+
"base": {
658+
"object": {
659+
"type": "boolean"
660+
}
661+
},
662+
"permissive": {
663+
"object": {
664+
"$ref": "#/definitions/propertiesObjects/deprecated/base/object"
665+
}
666+
},
667+
"specification": {
668+
"object": {
669+
"$ref": "#/definitions/propertiesObjects/deprecated/base/object"
670+
}
671+
},
672+
"strict": {
673+
"object": {
674+
"$ref": "#/definitions/propertiesObjects/deprecated/specification/object"
675+
}
676+
}
677+
},
647678
"category": {
648679
"base": {
649680
"object": {

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

+6
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ var validIndexRaw = []byte(`
4646
"name": "Arduino AVR Boards",
4747
"architecture": "avr",
4848
"version": "1.8.3",
49+
"deprecated": false,
4950
"category": "Contributed",
5051
"help": {
5152
"online": "http://www.arduino.cc/en/Reference/HomePage"
@@ -227,6 +228,10 @@ func TestRequired(t *testing.T) {
227228
{"/packages/0/platforms/0/category", compliancelevel.Specification, assert.True},
228229
{"/packages/0/platforms/0/category", compliancelevel.Strict, assert.True},
229230

231+
{"/packages/0/platforms/0/deprecated", compliancelevel.Permissive, assert.False},
232+
{"/packages/0/platforms/0/deprecated", compliancelevel.Specification, assert.False},
233+
{"/packages/0/platforms/0/deprecated", compliancelevel.Strict, assert.False},
234+
230235
{"/packages/0/platforms/0/help", compliancelevel.Permissive, assert.True},
231236
{"/packages/0/platforms/0/help", compliancelevel.Specification, assert.True},
232237
{"/packages/0/platforms/0/help", compliancelevel.Strict, assert.True},
@@ -534,6 +539,7 @@ func TestType(t *testing.T) {
534539
{"/packages/0/platforms/0/name", 42, assert.True},
535540
{"/packages/0/platforms/0/architecture", 42, assert.True},
536541
{"/packages/0/platforms/0/version", 42, assert.True},
542+
{"/packages/0/platforms/0/deprecated", 42, assert.True},
537543
{"/packages/0/platforms/0/help", 42, assert.True},
538544
{"/packages/0/platforms/0/help/online", 42, assert.True},
539545
{"/packages/0/platforms/0/category", 42, assert.True},

Diff for: internal/rule/ruleconfiguration/ruleconfiguration.go

+16
Original file line numberDiff line numberDiff line change
@@ -3513,6 +3513,22 @@ var configurations = []Type{
35133513
ErrorModes: []rulemode.Type{rulemode.Strict},
35143514
RuleFunction: rulefunction.PackageIndexPackagesPlatformsVersionNonSemver,
35153515
},
3516+
{
3517+
ProjectType: projecttype.PackageIndex,
3518+
SuperprojectType: projecttype.All,
3519+
Category: "data",
3520+
Subcategory: "platform",
3521+
ID: "IL058",
3522+
Brief: "incorrect packages[].platforms[].deprecated type",
3523+
Description: "Must be a boolean.",
3524+
MessageTemplate: "packages[].platforms[].deprecated property has incorrect type in platform(s): {{.}}",
3525+
DisableModes: nil,
3526+
EnableModes: []rulemode.Type{rulemode.Default},
3527+
InfoModes: nil,
3528+
WarningModes: nil,
3529+
ErrorModes: []rulemode.Type{rulemode.Default},
3530+
RuleFunction: rulefunction.PackageIndexPackagesPlatformsDeprecatedIncorrectType,
3531+
},
35163532
{
35173533
ProjectType: projecttype.PackageIndex,
35183534
SuperprojectType: projecttype.All,

Diff for: internal/rule/rulefunction/packageindex.go

+20
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,26 @@ func PackageIndexPackagesPlatformsVersionNonSemver() (result ruleresult.Type, ou
848848
return ruleresult.Pass, ""
849849
}
850850

851+
// PackageIndexPackagesPlatformsDeprecatedIncorrectType checks for incorrect type of the packages[].platforms[].deprecated property.
852+
func PackageIndexPackagesPlatformsDeprecatedIncorrectType() (result ruleresult.Type, output string) {
853+
if projectdata.PackageIndexLoadError() != nil {
854+
return ruleresult.NotRun, "Error loading package index"
855+
}
856+
857+
nonCompliantIDs := []string{}
858+
for _, platformData := range projectdata.PackageIndexPlatforms() {
859+
if schema.PropertyTypeMismatch(platformData.JSONPointer+"/deprecated", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) {
860+
nonCompliantIDs = append(nonCompliantIDs, platformData.ID)
861+
}
862+
}
863+
864+
if len(nonCompliantIDs) > 0 {
865+
return ruleresult.Fail, strings.Join(nonCompliantIDs, ", ")
866+
}
867+
868+
return ruleresult.Pass, ""
869+
}
870+
851871
// PackageIndexPackagesPlatformsCategoryMissing checks for missing packages[].platforms[].category property.
852872
func PackageIndexPackagesPlatformsCategoryMissing() (result ruleresult.Type, output string) {
853873
if projectdata.PackageIndexLoadError() != nil {

Diff for: internal/rule/rulefunction/packageindex_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,16 @@ func TestPackageIndexPackagesPlatformsVersionNonSemver(t *testing.T) {
482482
checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsVersionNonSemver, testTables, t)
483483
}
484484

485+
func TestPackageIndexPackagesPlatformsDeprecatedIncorrectType(t *testing.T) {
486+
testTables := []packageIndexRuleFunctionTestTable{
487+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
488+
{"Incorrect packages[].platforms[].deprecated type", "packages-platforms-deprecated-incorrect-type", ruleresult.Fail, "^foopackager:avr@1\\.0\\.0$"},
489+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
490+
}
491+
492+
checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsDeprecatedIncorrectType, testTables, t)
493+
}
494+
485495
func TestPackageIndexPackagesPlatformsCategoryMissing(t *testing.T) {
486496
testTables := []packageIndexRuleFunctionTestTable{
487497
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"packages": [
3+
{
4+
"name": "foopackager",
5+
"maintainer": "Jane Developer",
6+
"websiteURL": "http://example.com",
7+
"email": "[email protected]",
8+
"help": {
9+
"online": "http://example.com"
10+
},
11+
"platforms": [
12+
{
13+
"name": "My Board",
14+
"architecture": "avr",
15+
"version": "1.0.0",
16+
"deprecated": 42,
17+
"category": "Contributed",
18+
"help": {
19+
"online": "http://example.com"
20+
},
21+
"url": "http://example.com",
22+
"archiveFileName": "myboard-1.0.0.zip",
23+
"checksum": "SHA-256:ec3ff8a1dc96d3ba6f432b9b837a35fd4174a34b3d2927de1d51010e8b94f9f1",
24+
"size": "15005",
25+
"boards": [],
26+
"toolsDependencies": []
27+
}
28+
],
29+
"tools": []
30+
}
31+
]
32+
}

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

+31
Original file line numberDiff line numberDiff line change
@@ -2961,6 +2961,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
29612961
"version": {
29622962
"$ref": "#/definitions/propertiesObjects/platformVersion/permissive/object"
29632963
},
2964+
"deprecated": {
2965+
"$ref": "#/definitions/propertiesObjects/deprecated/permissive/object"
2966+
},
29642967
"category": {
29652968
"$ref": "#/definitions/propertiesObjects/category/permissive/object"
29662969
},
@@ -3010,6 +3013,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
30103013
"version": {
30113014
"$ref": "#/definitions/propertiesObjects/platformVersion/specification/object"
30123015
},
3016+
"deprecated": {
3017+
"$ref": "#/definitions/propertiesObjects/deprecated/specification/object"
3018+
},
30133019
"category": {
30143020
"$ref": "#/definitions/propertiesObjects/category/specification/object"
30153021
},
@@ -3059,6 +3065,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
30593065
"version": {
30603066
"$ref": "#/definitions/propertiesObjects/platformVersion/strict/object"
30613067
},
3068+
"deprecated": {
3069+
"$ref": "#/definitions/propertiesObjects/deprecated/strict/object"
3070+
},
30623071
"category": {
30633072
"$ref": "#/definitions/propertiesObjects/category/strict/object"
30643073
},
@@ -3180,6 +3189,28 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{
31803189
}
31813190
}
31823191
},
3192+
"deprecated": {
3193+
"base": {
3194+
"object": {
3195+
"type": "boolean"
3196+
}
3197+
},
3198+
"permissive": {
3199+
"object": {
3200+
"$ref": "#/definitions/propertiesObjects/deprecated/base/object"
3201+
}
3202+
},
3203+
"specification": {
3204+
"object": {
3205+
"$ref": "#/definitions/propertiesObjects/deprecated/base/object"
3206+
}
3207+
},
3208+
"strict": {
3209+
"object": {
3210+
"$ref": "#/definitions/propertiesObjects/deprecated/specification/object"
3211+
}
3212+
}
3213+
},
31833214
"category": {
31843215
"base": {
31853216
"object": {

0 commit comments

Comments
 (0)