Skip to content

Add schema-based rules for package data of package index #194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading