Skip to content

Commit

Permalink
Add schema-based rules for package data of package index
Browse files Browse the repository at this point in the history
These are the JSON schema-based rules to check the root and package level data of package indexes.
  • Loading branch information
per1234 committed Jun 15, 2021
1 parent ad3f06b commit a60ecef
Show file tree
Hide file tree
Showing 26 changed files with 1,497 additions and 2 deletions.
356 changes: 354 additions & 2 deletions internal/rule/ruleconfiguration/ruleconfiguration.go
Original file line number Diff line number Diff line change
Expand Up @@ -2925,8 +2925,248 @@ var configurations = []Type{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
Subcategory: "root",
ID: "ID003",
Brief: "Additional properties in root",
Description: "",
MessageTemplate: "Unknown properties found in package index root.",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexAdditionalProperties,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA001",
Brief: "packages[] missing",
Description: "",
MessageTemplate: "Missing packages property.",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA002",
Brief: "Incorrect packages type",
Description: "",
MessageTemplate: "packages property has incorrect type.",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "root",
ID: "IA003",
Brief: "Additional properties in packages",
Description: "",
MessageTemplate: "Unknown properties found in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesAdditionalProperties,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA004",
Brief: "packages[].name missing",
Description: "",
MessageTemplate: "Missing packages[].name property in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesNameMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA005",
Brief: "Incorrect packages[].name type",
Description: "The name value must be a string.",
MessageTemplate: "packages[].name property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesNameIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA006",
Brief: "packages[].name < min length",
Description: "",
MessageTemplate: "packages[].name value less than the minimum length in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesNameLTMinLength,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA007",
Brief: "packages[].name is arduino",
Description: "Case insensitive.",
MessageTemplate: "packages[].name value is \"arduino\" in package {{.}}. This name is reserved for official packages.",
DisableModes: []rulemode.Type{rulemode.Official},
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: []rulemode.Type{rulemode.Permissive},
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesNameIsArduino,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA008",
Brief: "packages[].maintainer missing",
Description: "",
MessageTemplate: "Missing packages[].maintainer property in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesMaintainerMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA009",
Brief: "Incorrect packages[].maintainer type",
Description: "The maintainer value must be a string.",
MessageTemplate: "packages[].maintainer property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesMaintainerIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA010",
Brief: "packages[].maintainer < min length",
Description: "",
MessageTemplate: "packages[].maintainer value less than the minimum length in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesMaintainerLTMinLength,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA011",
Brief: "packages[].maintainer starts with \"arduino\"",
Description: "Case insensitive.",
MessageTemplate: "packages[].maintainer value starts with \"arduino\" in package(s): {{.}}. 3rd party packages are not maintained by Arduino.",
DisableModes: []rulemode.Type{rulemode.Official},
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: []rulemode.Type{rulemode.Default},
ErrorModes: []rulemode.Type{rulemode.Strict},
RuleFunction: rulefunction.PackageIndexPackagesMaintainerStartsWithArduino,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA012",
Brief: "packages[].websiteURL missing",
Description: "",
MessageTemplate: "Missing packages[].websiteURL property in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA013",
Brief: "Incorrect packages[].websiteURL type",
Description: "Must be a string.",
MessageTemplate: "packages[].websiteURL property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA014",
Brief: "Invalid packages[].websiteURL format",
Description: "",
MessageTemplate: "packages[].websiteURL property does not have a valid URL format in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLInvalidFormat,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA015",
Brief: "dead packages[].websiteURL",
Description: "",
MessageTemplate: "Unable to load the packages[].websiteURL URL for package(s): {{.}}",
Expand All @@ -2942,7 +3182,119 @@ var configurations = []Type{
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "ID004",
ID: "IA016",
Brief: "packages[].email missing",
Description: "",
MessageTemplate: "Missing packages[].email property in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesEmailMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA017",
Brief: "Incorrect packages[].email type",
Description: "Must be a string.",
MessageTemplate: "packages[].email property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesEmailIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA018",
Brief: "Incorrect packages[].help type",
Description: "Must be a string.",
MessageTemplate: "packages[].help property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesHelpIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "root",
ID: "IA019",
Brief: "Additional properties in packages[].help",
Description: "",
MessageTemplate: "Unknown properties under packages[].help found in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesHelpAdditionalProperties,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA020",
Brief: "packages[].help.online missing",
Description: "",
MessageTemplate: "Missing packages[].help.online property in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineMissing,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA021",
Brief: "Incorrect packages[].help.online type",
Description: "Must be a string.",
MessageTemplate: "packages[].help.online property has incorrect type in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineIncorrectType,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA022",
Brief: "Invalid packages[].help.online format",
Description: "",
MessageTemplate: "packages[].help.online property does not have a valid URL format in package(s): {{.}}",
DisableModes: nil,
EnableModes: []rulemode.Type{rulemode.Default},
InfoModes: nil,
WarningModes: nil,
ErrorModes: []rulemode.Type{rulemode.Default},
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineInvalidFormat,
},
{
ProjectType: projecttype.PackageIndex,
SuperprojectType: projecttype.All,
Category: "data",
Subcategory: "package",
ID: "IA023",
Brief: "dead packages[].help.online",
Description: "",
MessageTemplate: "Unable to load the packages[].help.online URL for package(s): {{.}}",
Expand Down

0 comments on commit a60ecef

Please sign in to comment.