diff --git a/etc/schemas/arduino-package-index-definitions-schema.json b/etc/schemas/arduino-package-index-definitions-schema.json index cd618b45..d5205a61 100644 --- a/etc/schemas/arduino-package-index-definitions-schema.json +++ b/etc/schemas/arduino-package-index-definitions-schema.json @@ -455,6 +455,9 @@ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/permissive/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/permissive/object" } }, "additionalProperties": false @@ -510,6 +513,9 @@ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/specification/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/specification/object" } }, "additionalProperties": false @@ -565,6 +571,9 @@ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/strict/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/strict/object" } }, "additionalProperties": false @@ -1084,6 +1093,83 @@ } } }, + "monitorDependencies": { + "base": { + "object": { + "type": "array", + "items": { + "type": "object", + "required": ["packager", "name"] + } + } + }, + "permissive": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/permissive/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/permissive/object" + } + }, + "additionalProperties": false + } + } + ] + } + }, + "specification": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/specification/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/specification/object" + } + }, + "additionalProperties": false + } + } + ] + } + }, + "strict": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/strict/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/strict/object" + } + }, + "additionalProperties": false + } + } + ] + } + } + }, "packager": { "base": { "object": { diff --git a/internal/project/packageindex/packageindexschemas_test.go b/internal/project/packageindex/packageindexschemas_test.go index 44422da8..c069e287 100644 --- a/internal/project/packageindex/packageindexschemas_test.go +++ b/internal/project/packageindex/packageindexschemas_test.go @@ -71,6 +71,12 @@ var validIndexRaw = []byte(` "packager": "arduino", "name": "ble-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + } ] } ], @@ -152,6 +158,14 @@ func TestMinLength(t *testing.T) { {"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Specification}, {"/packages/0/platforms/0/discoveryDependencies/0/name", 1, compliancelevel.Strict}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Permissive}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Specification}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", 1, compliancelevel.Strict}, + + {"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Permissive}, + {"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Specification}, + {"/packages/0/platforms/0/monitorDependencies/0/name", 1, compliancelevel.Strict}, + {"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Permissive}, {"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Specification}, {"/packages/0/tools/0/systems/0/archiveFileName", 1, compliancelevel.Strict}, @@ -303,6 +317,18 @@ func TestRequired(t *testing.T) { {"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Specification, assert.True}, {"/packages/0/platforms/0/discoveryDependencies/0/name", compliancelevel.Strict, assert.True}, + {"/packages/0/platforms/0/monitorDependencies", compliancelevel.Permissive, assert.False}, + {"/packages/0/platforms/0/monitorDependencies", compliancelevel.Specification, assert.False}, + {"/packages/0/platforms/0/monitorDependencies", compliancelevel.Strict, assert.False}, + + {"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Permissive, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Specification, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", compliancelevel.Strict, assert.True}, + + {"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Permissive, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Specification, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/name", compliancelevel.Strict, assert.True}, + {"/packages/0/tools/0/name", compliancelevel.Permissive, assert.True}, {"/packages/0/tools/0/name", compliancelevel.Specification, assert.True}, {"/packages/0/tools/0/name", compliancelevel.Strict, assert.True}, @@ -586,6 +612,9 @@ func TestType(t *testing.T) { {"/packages/0/platforms/0/discoveryDependencies", 42, assert.True}, {"/packages/0/platforms/0/discoveryDependencies/0/packager", 42, assert.True}, {"/packages/0/platforms/0/discoveryDependencies/0/name", 42, assert.True}, + {"/packages/0/platforms/0/monitorDependencies", 42, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/packager", 42, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0/name", 42, assert.True}, {"/packages/0/tools", 42, assert.True}, {"/packages/0/tools/0/name", 42, assert.True}, {"/packages/0/tools/0/version", 42, assert.True}, @@ -717,6 +746,10 @@ func TestAdditionalProperties(t *testing.T) { {"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Specification, assert.True}, {"/packages/0/platforms/0/discoveryDependencies/0", compliancelevel.Strict, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Permissive, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Specification, assert.True}, + {"/packages/0/platforms/0/monitorDependencies/0", compliancelevel.Strict, assert.True}, + {"/packages/0/tools/0", compliancelevel.Permissive, assert.True}, {"/packages/0/tools/0", compliancelevel.Specification, assert.True}, {"/packages/0/tools/0", compliancelevel.Strict, assert.True}, diff --git a/internal/project/projectdata/packageindex.go b/internal/project/projectdata/packageindex.go index 9a77ba28..c9d514f8 100644 --- a/internal/project/projectdata/packageindex.go +++ b/internal/project/projectdata/packageindex.go @@ -46,6 +46,7 @@ func InitializeForPackageIndex() { packageIndexBoards = nil packageIndexToolsDependencies = nil packageIndexDiscoveryDependencies = nil + packageIndexMonitorDependencies = nil packageIndexTools = nil packageIndexSystems = nil packageIndexSchemaValidationResult = nil @@ -54,22 +55,14 @@ func InitializeForPackageIndex() { for _, packageData := range PackageIndexPackages() { packageIndexPlatforms = append(packageIndexPlatforms, getPackageIndexData(packageData.Object, packageData.JSONPointer, "platforms", packageData.ID, ":{{index . 0}}@{{index . 1}}", []string{"architecture", "version"})...) + packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID, ":{{index . 0}}@{{index . 1}}", []string{"name", "version"})...) } for _, platformData := range PackageIndexPlatforms() { packageIndexBoards = append(packageIndexBoards, getPackageIndexData(platformData.Object, platformData.JSONPointer, "boards", platformData.ID, " >> {{index . 0}}", []string{"name"})...) - } - - for _, platformData := range PackageIndexPlatforms() { packageIndexToolsDependencies = append(packageIndexToolsDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "toolsDependencies", platformData.ID, " >> {{index . 0}}:{{index . 1}}@{{index . 2}}", []string{"packager", "name", "version"})...) - } - - for _, platformData := range PackageIndexPlatforms() { packageIndexDiscoveryDependencies = append(packageIndexDiscoveryDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "discoveryDependencies", platformData.ID, " >> {{index . 0}}:{{index . 1}}", []string{"packager", "name"})...) - } - - for _, packageData := range PackageIndexPackages() { - packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID, ":{{index . 0}}@{{index . 1}}", []string{"name", "version"})...) + packageIndexMonitorDependencies = append(packageIndexMonitorDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "monitorDependencies", platformData.ID, " >> {{index . 0}}:{{index . 1}}", []string{"packager", "name"})...) } for _, toolData := range PackageIndexTools() { @@ -136,6 +129,13 @@ func PackageIndexDiscoveryDependencies() []PackageIndexData { return packageIndexDiscoveryDependencies } +var packageIndexMonitorDependencies []PackageIndexData + +// PackageIndexMonitorDependencies returns the slice of pluggable monitor tool dependency data for the package index. +func PackageIndexMonitorDependencies() []PackageIndexData { + return packageIndexMonitorDependencies +} + var packageIndexTools []PackageIndexData // PackageIndexTools returns the slice of tool data for the package index. diff --git a/internal/project/projectdata/packageindex_test.go b/internal/project/projectdata/packageindex_test.go index e7f9424e..cb037f88 100644 --- a/internal/project/projectdata/packageindex_test.go +++ b/internal/project/projectdata/packageindex_test.go @@ -52,6 +52,8 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexToolsDependenciesDataAssertion []PackageIndexData packageIndexDiscoveryDependenciesAssertion assert.ValueAssertionFunc packageIndexDiscoveryDependenciesDataAssertion []PackageIndexData + packageIndexMonitorDependenciesAssertion assert.ValueAssertionFunc + packageIndexMonitorDependenciesDataAssertion []PackageIndexData packageIndexToolsAssertion assert.ValueAssertionFunc packageIndexToolsDataAssertion []PackageIndexData packageIndexSystemsAssertion assert.ValueAssertionFunc @@ -187,6 +189,29 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/1/discoveryDependencies/0", }, }, + packageIndexMonitorDependenciesAssertion: assert.NotNil, + packageIndexMonitorDependenciesDataAssertion: []PackageIndexData{ + { + ID: "foopackager1:avr@1.0.1 >> arduino:network-monitor", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/0", + }, + { + ID: "foopackager1:avr@1.0.1 >> barpackager:coop-monitor", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/1", + }, + { + ID: "foopackager2:samd@2.0.0 >> arduino:network-monitor", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/0", + }, + { + ID: "foopackager2:samd@2.0.0 >> bazpackager:flag-monitor", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/1", + }, + { + ID: "foopackager2:mbed@1.1.1 >> quxpackager:shoe-monitor", + JSONPointer: "/packages/1/platforms/1/monitorDependencies/0", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -400,6 +425,53 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/2/discoveryDependencies/2", }, }, + packageIndexMonitorDependenciesAssertion: assert.NotNil, + packageIndexMonitorDependenciesDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/monitorDependencies/0", + JSONPointer: "/packages/0/platforms/0/monitorDependencies/0", + }, + { + ID: "/packages/0/platforms/0/monitorDependencies/1", + JSONPointer: "/packages/0/platforms/0/monitorDependencies/1", + }, + { + ID: "/packages/0/platforms/1/monitorDependencies/0", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/0", + }, + { + ID: "/packages/0/platforms/1/monitorDependencies/1", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/0/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/0/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/1/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/1/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/1/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/1/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/2/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/2/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/1", + }, + { + ID: "foopackager2:megaavr@1.0.0 >> quxpackager:shoe-monitor", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/2", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -621,6 +693,53 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/2/discoveryDependencies/2", }, }, + packageIndexMonitorDependenciesAssertion: assert.NotNil, + packageIndexMonitorDependenciesDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/monitorDependencies/0", + JSONPointer: "/packages/0/platforms/0/monitorDependencies/0", + }, + { + ID: "/packages/0/platforms/0/monitorDependencies/1", + JSONPointer: "/packages/0/platforms/0/monitorDependencies/1", + }, + { + ID: "/packages/0/platforms/1/monitorDependencies/0", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/0", + }, + { + ID: "/packages/0/platforms/1/monitorDependencies/1", + JSONPointer: "/packages/0/platforms/1/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/0/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/0/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/0/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/1/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/1/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/1/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/1/monitorDependencies/1", + }, + { + ID: "/packages/1/platforms/2/monitorDependencies/0", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/0", + }, + { + ID: "/packages/1/platforms/2/monitorDependencies/1", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/1", + }, + { + ID: "foopackager2:megaavr@1.0.0 >> quxpackager:shoe-monitor", + JSONPointer: "/packages/1/platforms/2/monitorDependencies/2", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -672,6 +791,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexBoardsAssertion: assert.Nil, packageIndexToolsDependenciesAssertion: assert.Nil, packageIndexDiscoveryDependenciesAssertion: assert.Nil, + packageIndexMonitorDependenciesAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -687,6 +807,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexBoardsAssertion: assert.Nil, packageIndexToolsDependenciesAssertion: assert.Nil, packageIndexDiscoveryDependenciesAssertion: assert.Nil, + packageIndexMonitorDependenciesAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -748,6 +869,14 @@ func TestInitializeForPackageIndex(t *testing.T) { } } + testTable.packageIndexMonitorDependenciesAssertion(t, PackageIndexMonitorDependencies(), testTable.testName) + if PackageIndexMonitorDependencies() != nil { + for index, packageIndexMonitorDependency := range PackageIndexMonitorDependencies() { + assert.Equal(t, testTable.packageIndexMonitorDependenciesDataAssertion[index].ID, packageIndexMonitorDependency.ID, testTable.testName) + assert.Equal(t, testTable.packageIndexMonitorDependenciesDataAssertion[index].JSONPointer, packageIndexMonitorDependency.JSONPointer, testTable.testName) + } + } + testTable.packageIndexToolsAssertion(t, PackageIndexTools(), testTable.testName) if PackageIndexTools() != nil { for index, packageIndexTool := range PackageIndexTools() { diff --git a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json index 076738e3..01280d55 100644 --- a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json @@ -43,6 +43,16 @@ "packager": "barpackager", "name": "carrier-pigeon-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "barpackager", + "name": "coop-monitor" + } ] }, { @@ -79,6 +89,16 @@ "packager": "barpackager", "name": "carrier-pigeon-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "barpackager", + "name": "coop-monitor" + } ] } ], @@ -127,6 +147,16 @@ "packager": "bazpackager", "name": "signal-flag-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "bazpackager", + "name": "flag-monitor" + } ] }, { @@ -163,6 +193,16 @@ "packager": "bazpackager", "name": "signal-flag-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "bazpackager", + "name": "flag-monitor" + } ] }, { @@ -211,6 +251,18 @@ "packager": "quxpackager", "name": "sneakernet-discovery" } + ], + "monitorDependencies": [ + { + "name": "network-monitor" + }, + { + "packager": "bazpackager" + }, + { + "packager": "quxpackager", + "name": "shoe-monitor" + } ] } ], diff --git a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json index ea1b5622..a4b9acf4 100644 --- a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json @@ -42,6 +42,16 @@ "packager": "barpackager", "name": "carrier-pigeon-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "barpackager", + "name": "coop-monitor" + } ] }, { @@ -78,6 +88,16 @@ "packager": "barpackager", "name": "carrier-pigeon-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "barpackager", + "name": "coop-monitor" + } ] } ], @@ -125,6 +145,16 @@ "packager": "bazpackager", "name": "signal-flag-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "bazpackager", + "name": "flag-monitor" + } ] }, { @@ -160,6 +190,16 @@ "packager": "bazpackager", "name": "signal-flag-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "bazpackager", + "name": "flag-monitor" + } ] }, { @@ -205,6 +245,18 @@ "packager": "quxpackager", "name": "sneakernet-discovery" } + ], + "monitorDependencies": [ + { + "name": "network-monitor" + }, + { + "packager": "bazpackager" + }, + { + "packager": "quxpackager", + "name": "shoe-monitor" + } ] } ], diff --git a/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json index 67181764..49e667f3 100644 --- a/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json @@ -69,6 +69,16 @@ "packager": "barpackager", "name": "carrier-pigeon-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "barpackager", + "name": "coop-monitor" + } ] } ], @@ -117,6 +127,16 @@ "packager": "bazpackager", "name": "signal-flag-discovery" } + ], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "network-monitor" + }, + { + "packager": "bazpackager", + "name": "flag-monitor" + } ] }, { @@ -149,6 +169,12 @@ "packager": "quxpackager", "name": "sneakernet-discovery" } + ], + "monitorDependencies": [ + { + "packager": "quxpackager", + "name": "shoe-monitor" + } ] } ], diff --git a/internal/rule/ruleconfiguration/ruleconfiguration.go b/internal/rule/ruleconfiguration/ruleconfiguration.go index 5c861f77..e162284e 100644 --- a/internal/rule/ruleconfiguration/ruleconfiguration.go +++ b/internal/rule/ruleconfiguration/ruleconfiguration.go @@ -4700,6 +4700,142 @@ var configurations = []Type{ ErrorModes: []rulemode.Type{rulemode.Default}, RuleFunction: rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesNameLTMinLength, }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL067", + Brief: "incorrect packages[*].platforms[*].monitorDependencies type", + Description: "The package index has a platform with a `monitorDependencies` property of incorrect type.", + MessageTemplate: "packages[*].platforms[*].monitorDependencies property has incorrect type in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesIncorrectType, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL068", + Brief: "unrecognized properties in packages[*].platforms[*].monitorDependencies[*]", + Description: "A `monitorDependencies` object for one of the package index's platforms contains unknown data properties.", + MessageTemplate: "Unknown properties under packages[*].platforms[*].monitorDependencies[*] found in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL069", + Brief: "packages[*].platforms[*].monitorDependencies[*].packager missing", + Description: "A `monitorDependencies` object for one of the package index's platforms is missing a `packager` property.", + MessageTemplate: "Missing packages[*].platforms[*].monitorDependencies[*].packager property in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL070", + Brief: "incorrect packages[*].platforms[*].monitorDependencies[*].packager type", + Description: "A `monitorDependencies` object for one of the package index's platforms has a `packager` property of incorrect type.", + MessageTemplate: "packages[*].platforms[*].monitorDependencies[*].packager property has incorrect type in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL071", + Brief: "packages[*].platforms[*].monitorDependencies[*].packager < min length", + Description: "A `monitorDependencies` object for one of the package index's platforms has a `packager` property shorter than the minimum length.", + MessageTemplate: "packages[*].platforms[*].monitorDependencies[*].packager value less than the minimum length in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL072", + Brief: "packages[*].platforms[*].monitorDependencies[*].name missing", + Description: "A `monitorDependencies` object for one of the package index's platforms is missing a `name` property.", + MessageTemplate: "Missing packages[*].platforms[*].monitorDependencies[*].name property in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameMissing, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL073", + Brief: "incorrect packages[*].platforms[*].monitorDependencies[*].name type", + Description: "A `monitorDependencies` object for one of the package index's platforms has a `name` property of incorrect type.", + MessageTemplate: "packages[*].platforms[*].monitorDependencies[*].name property has incorrect type in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType, + }, + { + ProjectType: projecttype.PackageIndex, + SuperprojectType: projecttype.All, + Category: "data", + Subcategory: "platform", + ID: "IL074", + Brief: "packages[*].platforms[*].monitorDependencies[*].name < min length", + Description: "A `monitorDependencies` object for one of the package index's platforms has a `name` property shorter than the minimum length.", + MessageTemplate: "packages[*].platforms[*].monitorDependencies[*].name value less than the minimum length in platform(s):\n{{.}}", + Reference: "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength, + }, { ProjectType: projecttype.PackageIndex, SuperprojectType: projecttype.All, diff --git a/internal/rule/rulefunction/packageindex.go b/internal/rule/rulefunction/packageindex.go index f3f24c5b..601e6019 100644 --- a/internal/rule/rulefunction/packageindex.go +++ b/internal/rule/rulefunction/packageindex.go @@ -1936,6 +1936,166 @@ func PackageIndexPackagesPlatformsDiscoveryDependenciesNameLTMinLength() (result return ruleresult.Pass, "" } +// PackageIndexPackagesPlatformsMonitorDependenciesIncorrectType checks for incorrect type of the packages[].platforms[].monitorDependencies property. +func PackageIndexPackagesPlatformsMonitorDependenciesIncorrectType() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, platformData := range projectdata.PackageIndexPlatforms() { + if schema.PropertyTypeMismatch(platformData.JSONPointer+"/monitorDependencies", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, platformData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties checks for additional properties in packages[].platforms[].monitorDependencies[]. +func PackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.ProhibitedAdditionalProperties(dependencyData.JSONPointer, projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing checks for missing packages[].platforms[].monitorDependencies[].packager property. +func PackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.RequiredPropertyMissing(dependencyData.JSONPointer+"/packager", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType checks for incorrect type of the packages[].platforms[].monitorDependencies[].packager property. +func PackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.PropertyTypeMismatch(dependencyData.JSONPointer+"/packager", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength checks for packages[].platforms[].monitorDependencies[].packager property less than the minimum length. +func PackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.PropertyLessThanMinLength(dependencyData.JSONPointer+"/packager", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesNameMissing checks for missing packages[].platforms[].monitorDependencies[].name property. +func PackageIndexPackagesPlatformsMonitorDependenciesNameMissing() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.RequiredPropertyMissing(dependencyData.JSONPointer+"/name", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType checks for incorrect type of the packages[].platforms[].monitorDependencies[].name property. +func PackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.PropertyTypeMismatch(dependencyData.JSONPointer+"/name", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + +// PackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength checks for packages[].platforms[].monitorDependencies[].name property less than the minimum length. +func PackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength() (result ruleresult.Type, output string) { + if projectdata.PackageIndexLoadError() != nil { + return ruleresult.NotRun, "Error loading package index" + } + + nonCompliantIDs := []string{} + for _, dependencyData := range projectdata.PackageIndexMonitorDependencies() { + if schema.PropertyLessThanMinLength(dependencyData.JSONPointer+"/name", projectdata.PackageIndexSchemaValidationResult()[compliancelevel.Specification]) { + nonCompliantIDs = append(nonCompliantIDs, dependencyData.ID) + } + } + + if len(nonCompliantIDs) > 0 { + return ruleresult.Fail, brokenOutputList(nonCompliantIDs) + } + + return ruleresult.Pass, "" +} + // PackageIndexPackagesToolsMissing checks for missing packages[].tools property. func PackageIndexPackagesToolsMissing() (result ruleresult.Type, output string) { if projectdata.PackageIndexLoadError() != nil { diff --git a/internal/rule/rulefunction/packageindex_test.go b/internal/rule/rulefunction/packageindex_test.go index f396516a..4cd1c7ea 100644 --- a/internal/rule/rulefunction/packageindex_test.go +++ b/internal/rule/rulefunction/packageindex_test.go @@ -1013,6 +1013,86 @@ func TestPackageIndexPackagesPlatformsDiscoveryDependenciesNameLTMinLength(t *te checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsDiscoveryDependenciesNameLTMinLength, testTables, t) } +func TestPackageIndexPackagesPlatformsMonitorDependenciesIncorrectType(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"Incorrect packages[].platforms[].monitorDependencies type", "packages-platforms-monitordependencies-incorrect-type", ruleresult.Fail, "^" + brokenOutputListIndent + "foopackager:avr@1\\.0\\.0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesIncorrectType, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"Additional packages[].platforms[].monitorDependencies[] properties", "packages-platforms-monitordependencies-additional-properties", ruleresult.Fail, "^" + brokenOutputListIndent + "foopackager:avr@1\\.0\\.0 >> arduino:network-monitor$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"packages[].platforms[].monitorDependencies[].packager missing", "packages-platforms-monitordependencies-packager-missing", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"Incorrect packages[].platforms[].monitorDependencies[].packager type", "packages-platforms-monitordependencies-packager-incorrect-type", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"packages[].platforms[].monitorDependencies[].packager < min length", "packages-platforms-monitordependencies-packager-length-lt", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesNameMissing(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"packages[].platforms[].monitorDependencies[].name missing", "packages-platforms-monitordependencies-name-missing", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesNameMissing, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"Incorrect packages[].platforms[].monitorDependencies[].name type", "packages-platforms-monitordependencies-name-incorrect-type", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType, testTables, t) +} + +func TestPackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength(t *testing.T) { + testTables := []packageIndexRuleFunctionTestTable{ + {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, + {"packages[].platforms[].monitorDependencies[].name < min length", "packages-platforms-monitordependencies-name-length-lt", ruleresult.Fail, "^" + brokenOutputListIndent + "/packages/0/platforms/0/monitorDependencies/0$"}, + {"Valid", "valid-package-index", ruleresult.Pass, ""}, + } + + checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength, testTables, t) +} + func TestPackageIndexPackagesToolsMissing(t *testing.T) { testTables := []packageIndexRuleFunctionTestTable{ {"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""}, diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-additional-properties/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-additional-properties/package_foo_index.json new file mode 100644 index 00000000..81bc5671 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-additional-properties/package_foo_index.json @@ -0,0 +1,38 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "foo": "bar", + "packager": "arduino", + "name": "network-monitor" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-incorrect-type/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-incorrect-type/package_foo_index.json new file mode 100644 index 00000000..03867989 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-incorrect-type/package_foo_index.json @@ -0,0 +1,32 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": 42 + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-incorrect-type/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-incorrect-type/package_foo_index.json new file mode 100644 index 00000000..85ddd387 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-incorrect-type/package_foo_index.json @@ -0,0 +1,37 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "packager": "arduino", + "name": 42 + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-length-lt/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-length-lt/package_foo_index.json new file mode 100644 index 00000000..8b4403cd --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-length-lt/package_foo_index.json @@ -0,0 +1,37 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "packager": "arduino", + "name": "" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-missing/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-missing/package_foo_index.json new file mode 100644 index 00000000..ec72e5e7 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-name-missing/package_foo_index.json @@ -0,0 +1,36 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "packager": "arduino" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-incorrect-type/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-incorrect-type/package_foo_index.json new file mode 100644 index 00000000..398da7d3 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-incorrect-type/package_foo_index.json @@ -0,0 +1,37 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "packager": 42, + "name": "network-monitor" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-length-lt/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-length-lt/package_foo_index.json new file mode 100644 index 00000000..c7a71f05 --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-length-lt/package_foo_index.json @@ -0,0 +1,37 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "packager": "", + "name": "network-monitor" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-missing/package_foo_index.json b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-missing/package_foo_index.json new file mode 100644 index 00000000..20197e7f --- /dev/null +++ b/internal/rule/rulefunction/testdata/packageindexes/packages-platforms-monitordependencies-packager-missing/package_foo_index.json @@ -0,0 +1,36 @@ +{ + "packages": [ + { + "name": "foopackager", + "maintainer": "Jane Developer", + "websiteURL": "http://example.com", + "email": "jane@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "My Board", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "http://example.com", + "archiveFileName": "myboard-1.0.0.zip", + "checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8", + "size": "15005", + "boards": [], + "toolsDependencies": [], + "monitorDependencies": [ + { + "name": "network-monitor" + } + ] + } + ], + "tools": [] + } + ] +} diff --git a/internal/rule/schema/schemadata/bindata.go b/internal/rule/schema/schemadata/bindata.go index 9172a85f..2307c8d9 100644 --- a/internal/rule/schema/schemadata/bindata.go +++ b/internal/rule/schema/schemadata/bindata.go @@ -2987,6 +2987,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/permissive/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/permissive/object" } }, "additionalProperties": false @@ -3042,6 +3045,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/specification/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/specification/object" } }, "additionalProperties": false @@ -3097,6 +3103,9 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{ }, "discoveryDependencies": { "$ref": "#/definitions/propertiesObjects/discoveryDependencies/strict/object" + }, + "monitorDependencies": { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/strict/object" } }, "additionalProperties": false @@ -3616,6 +3625,83 @@ var _arduinoPackageIndexDefinitionsSchemaJson = []byte(`{ } } }, + "monitorDependencies": { + "base": { + "object": { + "type": "array", + "items": { + "type": "object", + "required": ["packager", "name"] + } + } + }, + "permissive": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/permissive/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/permissive/object" + } + }, + "additionalProperties": false + } + } + ] + } + }, + "specification": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/specification/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/specification/object" + } + }, + "additionalProperties": false + } + } + ] + } + }, + "strict": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/propertiesObjects/monitorDependencies/base/object" + }, + { + "items": { + "properties": { + "packager": { + "$ref": "#/definitions/propertiesObjects/packager/strict/object" + }, + "name": { + "$ref": "#/definitions/propertiesObjects/toolName/strict/object" + } + }, + "additionalProperties": false + } + } + ] + } + } + }, "packager": { "base": { "object": { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy