Skip to content

Commit a60ecef

Browse files
committed
Add schema-based rules for package data of package index
These are the JSON schema-based rules to check the root and package level data of package indexes.
1 parent ad3f06b commit a60ecef

File tree

26 files changed

+1497
-2
lines changed

26 files changed

+1497
-2
lines changed

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

+354-2
Original file line numberDiff line numberDiff line change
@@ -2925,8 +2925,248 @@ var configurations = []Type{
29252925
ProjectType: projecttype.PackageIndex,
29262926
SuperprojectType: projecttype.All,
29272927
Category: "data",
2928-
Subcategory: "package",
2928+
Subcategory: "root",
29292929
ID: "ID003",
2930+
Brief: "Additional properties in root",
2931+
Description: "",
2932+
MessageTemplate: "Unknown properties found in package index root.",
2933+
DisableModes: nil,
2934+
EnableModes: []rulemode.Type{rulemode.Default},
2935+
InfoModes: nil,
2936+
WarningModes: nil,
2937+
ErrorModes: []rulemode.Type{rulemode.Default},
2938+
RuleFunction: rulefunction.PackageIndexAdditionalProperties,
2939+
},
2940+
{
2941+
ProjectType: projecttype.PackageIndex,
2942+
SuperprojectType: projecttype.All,
2943+
Category: "data",
2944+
Subcategory: "package",
2945+
ID: "IA001",
2946+
Brief: "packages[] missing",
2947+
Description: "",
2948+
MessageTemplate: "Missing packages property.",
2949+
DisableModes: nil,
2950+
EnableModes: []rulemode.Type{rulemode.Default},
2951+
InfoModes: nil,
2952+
WarningModes: nil,
2953+
ErrorModes: []rulemode.Type{rulemode.Default},
2954+
RuleFunction: rulefunction.PackageIndexPackagesMissing,
2955+
},
2956+
{
2957+
ProjectType: projecttype.PackageIndex,
2958+
SuperprojectType: projecttype.All,
2959+
Category: "data",
2960+
Subcategory: "package",
2961+
ID: "IA002",
2962+
Brief: "Incorrect packages type",
2963+
Description: "",
2964+
MessageTemplate: "packages property has incorrect type.",
2965+
DisableModes: nil,
2966+
EnableModes: []rulemode.Type{rulemode.Default},
2967+
InfoModes: nil,
2968+
WarningModes: nil,
2969+
ErrorModes: []rulemode.Type{rulemode.Default},
2970+
RuleFunction: rulefunction.PackageIndexPackagesIncorrectType,
2971+
},
2972+
{
2973+
ProjectType: projecttype.PackageIndex,
2974+
SuperprojectType: projecttype.All,
2975+
Category: "data",
2976+
Subcategory: "root",
2977+
ID: "IA003",
2978+
Brief: "Additional properties in packages",
2979+
Description: "",
2980+
MessageTemplate: "Unknown properties found in package(s): {{.}}",
2981+
DisableModes: nil,
2982+
EnableModes: []rulemode.Type{rulemode.Default},
2983+
InfoModes: nil,
2984+
WarningModes: nil,
2985+
ErrorModes: []rulemode.Type{rulemode.Default},
2986+
RuleFunction: rulefunction.PackageIndexPackagesAdditionalProperties,
2987+
},
2988+
{
2989+
ProjectType: projecttype.PackageIndex,
2990+
SuperprojectType: projecttype.All,
2991+
Category: "data",
2992+
Subcategory: "package",
2993+
ID: "IA004",
2994+
Brief: "packages[].name missing",
2995+
Description: "",
2996+
MessageTemplate: "Missing packages[].name property in package(s): {{.}}",
2997+
DisableModes: nil,
2998+
EnableModes: []rulemode.Type{rulemode.Default},
2999+
InfoModes: nil,
3000+
WarningModes: nil,
3001+
ErrorModes: []rulemode.Type{rulemode.Default},
3002+
RuleFunction: rulefunction.PackageIndexPackagesNameMissing,
3003+
},
3004+
{
3005+
ProjectType: projecttype.PackageIndex,
3006+
SuperprojectType: projecttype.All,
3007+
Category: "data",
3008+
Subcategory: "package",
3009+
ID: "IA005",
3010+
Brief: "Incorrect packages[].name type",
3011+
Description: "The name value must be a string.",
3012+
MessageTemplate: "packages[].name property has incorrect type in package(s): {{.}}",
3013+
DisableModes: nil,
3014+
EnableModes: []rulemode.Type{rulemode.Default},
3015+
InfoModes: nil,
3016+
WarningModes: nil,
3017+
ErrorModes: []rulemode.Type{rulemode.Default},
3018+
RuleFunction: rulefunction.PackageIndexPackagesNameIncorrectType,
3019+
},
3020+
{
3021+
ProjectType: projecttype.PackageIndex,
3022+
SuperprojectType: projecttype.All,
3023+
Category: "data",
3024+
Subcategory: "package",
3025+
ID: "IA006",
3026+
Brief: "packages[].name < min length",
3027+
Description: "",
3028+
MessageTemplate: "packages[].name value less than the minimum length in package(s): {{.}}",
3029+
DisableModes: nil,
3030+
EnableModes: []rulemode.Type{rulemode.Default},
3031+
InfoModes: nil,
3032+
WarningModes: nil,
3033+
ErrorModes: []rulemode.Type{rulemode.Default},
3034+
RuleFunction: rulefunction.PackageIndexPackagesNameLTMinLength,
3035+
},
3036+
{
3037+
ProjectType: projecttype.PackageIndex,
3038+
SuperprojectType: projecttype.All,
3039+
Category: "data",
3040+
Subcategory: "package",
3041+
ID: "IA007",
3042+
Brief: "packages[].name is arduino",
3043+
Description: "Case insensitive.",
3044+
MessageTemplate: "packages[].name value is \"arduino\" in package {{.}}. This name is reserved for official packages.",
3045+
DisableModes: []rulemode.Type{rulemode.Official},
3046+
EnableModes: []rulemode.Type{rulemode.Default},
3047+
InfoModes: nil,
3048+
WarningModes: []rulemode.Type{rulemode.Permissive},
3049+
ErrorModes: []rulemode.Type{rulemode.Default},
3050+
RuleFunction: rulefunction.PackageIndexPackagesNameIsArduino,
3051+
},
3052+
{
3053+
ProjectType: projecttype.PackageIndex,
3054+
SuperprojectType: projecttype.All,
3055+
Category: "data",
3056+
Subcategory: "package",
3057+
ID: "IA008",
3058+
Brief: "packages[].maintainer missing",
3059+
Description: "",
3060+
MessageTemplate: "Missing packages[].maintainer property in package(s): {{.}}",
3061+
DisableModes: nil,
3062+
EnableModes: []rulemode.Type{rulemode.Default},
3063+
InfoModes: nil,
3064+
WarningModes: nil,
3065+
ErrorModes: []rulemode.Type{rulemode.Default},
3066+
RuleFunction: rulefunction.PackageIndexPackagesMaintainerMissing,
3067+
},
3068+
{
3069+
ProjectType: projecttype.PackageIndex,
3070+
SuperprojectType: projecttype.All,
3071+
Category: "data",
3072+
Subcategory: "package",
3073+
ID: "IA009",
3074+
Brief: "Incorrect packages[].maintainer type",
3075+
Description: "The maintainer value must be a string.",
3076+
MessageTemplate: "packages[].maintainer property has incorrect type in package(s): {{.}}",
3077+
DisableModes: nil,
3078+
EnableModes: []rulemode.Type{rulemode.Default},
3079+
InfoModes: nil,
3080+
WarningModes: nil,
3081+
ErrorModes: []rulemode.Type{rulemode.Default},
3082+
RuleFunction: rulefunction.PackageIndexPackagesMaintainerIncorrectType,
3083+
},
3084+
{
3085+
ProjectType: projecttype.PackageIndex,
3086+
SuperprojectType: projecttype.All,
3087+
Category: "data",
3088+
Subcategory: "package",
3089+
ID: "IA010",
3090+
Brief: "packages[].maintainer < min length",
3091+
Description: "",
3092+
MessageTemplate: "packages[].maintainer value less than the minimum length in package(s): {{.}}",
3093+
DisableModes: nil,
3094+
EnableModes: []rulemode.Type{rulemode.Default},
3095+
InfoModes: nil,
3096+
WarningModes: nil,
3097+
ErrorModes: []rulemode.Type{rulemode.Default},
3098+
RuleFunction: rulefunction.PackageIndexPackagesMaintainerLTMinLength,
3099+
},
3100+
{
3101+
ProjectType: projecttype.PackageIndex,
3102+
SuperprojectType: projecttype.All,
3103+
Category: "data",
3104+
Subcategory: "package",
3105+
ID: "IA011",
3106+
Brief: "packages[].maintainer starts with \"arduino\"",
3107+
Description: "Case insensitive.",
3108+
MessageTemplate: "packages[].maintainer value starts with \"arduino\" in package(s): {{.}}. 3rd party packages are not maintained by Arduino.",
3109+
DisableModes: []rulemode.Type{rulemode.Official},
3110+
EnableModes: []rulemode.Type{rulemode.Default},
3111+
InfoModes: nil,
3112+
WarningModes: []rulemode.Type{rulemode.Default},
3113+
ErrorModes: []rulemode.Type{rulemode.Strict},
3114+
RuleFunction: rulefunction.PackageIndexPackagesMaintainerStartsWithArduino,
3115+
},
3116+
{
3117+
ProjectType: projecttype.PackageIndex,
3118+
SuperprojectType: projecttype.All,
3119+
Category: "data",
3120+
Subcategory: "package",
3121+
ID: "IA012",
3122+
Brief: "packages[].websiteURL missing",
3123+
Description: "",
3124+
MessageTemplate: "Missing packages[].websiteURL property in package(s): {{.}}",
3125+
DisableModes: nil,
3126+
EnableModes: []rulemode.Type{rulemode.Default},
3127+
InfoModes: nil,
3128+
WarningModes: nil,
3129+
ErrorModes: []rulemode.Type{rulemode.Default},
3130+
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLMissing,
3131+
},
3132+
{
3133+
ProjectType: projecttype.PackageIndex,
3134+
SuperprojectType: projecttype.All,
3135+
Category: "data",
3136+
Subcategory: "package",
3137+
ID: "IA013",
3138+
Brief: "Incorrect packages[].websiteURL type",
3139+
Description: "Must be a string.",
3140+
MessageTemplate: "packages[].websiteURL property has incorrect type in package(s): {{.}}",
3141+
DisableModes: nil,
3142+
EnableModes: []rulemode.Type{rulemode.Default},
3143+
InfoModes: nil,
3144+
WarningModes: nil,
3145+
ErrorModes: []rulemode.Type{rulemode.Default},
3146+
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLIncorrectType,
3147+
},
3148+
{
3149+
ProjectType: projecttype.PackageIndex,
3150+
SuperprojectType: projecttype.All,
3151+
Category: "data",
3152+
Subcategory: "package",
3153+
ID: "IA014",
3154+
Brief: "Invalid packages[].websiteURL format",
3155+
Description: "",
3156+
MessageTemplate: "packages[].websiteURL property does not have a valid URL format in package(s): {{.}}",
3157+
DisableModes: nil,
3158+
EnableModes: []rulemode.Type{rulemode.Default},
3159+
InfoModes: nil,
3160+
WarningModes: nil,
3161+
ErrorModes: []rulemode.Type{rulemode.Default},
3162+
RuleFunction: rulefunction.PackageIndexPackagesWebsiteURLInvalidFormat,
3163+
},
3164+
{
3165+
ProjectType: projecttype.PackageIndex,
3166+
SuperprojectType: projecttype.All,
3167+
Category: "data",
3168+
Subcategory: "package",
3169+
ID: "IA015",
29303170
Brief: "dead packages[].websiteURL",
29313171
Description: "",
29323172
MessageTemplate: "Unable to load the packages[].websiteURL URL for package(s): {{.}}",
@@ -2942,7 +3182,119 @@ var configurations = []Type{
29423182
SuperprojectType: projecttype.All,
29433183
Category: "data",
29443184
Subcategory: "package",
2945-
ID: "ID004",
3185+
ID: "IA016",
3186+
Brief: "packages[].email missing",
3187+
Description: "",
3188+
MessageTemplate: "Missing packages[].email property in package(s): {{.}}",
3189+
DisableModes: nil,
3190+
EnableModes: []rulemode.Type{rulemode.Default},
3191+
InfoModes: nil,
3192+
WarningModes: nil,
3193+
ErrorModes: []rulemode.Type{rulemode.Default},
3194+
RuleFunction: rulefunction.PackageIndexPackagesEmailMissing,
3195+
},
3196+
{
3197+
ProjectType: projecttype.PackageIndex,
3198+
SuperprojectType: projecttype.All,
3199+
Category: "data",
3200+
Subcategory: "package",
3201+
ID: "IA017",
3202+
Brief: "Incorrect packages[].email type",
3203+
Description: "Must be a string.",
3204+
MessageTemplate: "packages[].email property has incorrect type in package(s): {{.}}",
3205+
DisableModes: nil,
3206+
EnableModes: []rulemode.Type{rulemode.Default},
3207+
InfoModes: nil,
3208+
WarningModes: nil,
3209+
ErrorModes: []rulemode.Type{rulemode.Default},
3210+
RuleFunction: rulefunction.PackageIndexPackagesEmailIncorrectType,
3211+
},
3212+
{
3213+
ProjectType: projecttype.PackageIndex,
3214+
SuperprojectType: projecttype.All,
3215+
Category: "data",
3216+
Subcategory: "package",
3217+
ID: "IA018",
3218+
Brief: "Incorrect packages[].help type",
3219+
Description: "Must be a string.",
3220+
MessageTemplate: "packages[].help property has incorrect type in package(s): {{.}}",
3221+
DisableModes: nil,
3222+
EnableModes: []rulemode.Type{rulemode.Default},
3223+
InfoModes: nil,
3224+
WarningModes: nil,
3225+
ErrorModes: []rulemode.Type{rulemode.Default},
3226+
RuleFunction: rulefunction.PackageIndexPackagesHelpIncorrectType,
3227+
},
3228+
{
3229+
ProjectType: projecttype.PackageIndex,
3230+
SuperprojectType: projecttype.All,
3231+
Category: "data",
3232+
Subcategory: "root",
3233+
ID: "IA019",
3234+
Brief: "Additional properties in packages[].help",
3235+
Description: "",
3236+
MessageTemplate: "Unknown properties under packages[].help found in package(s): {{.}}",
3237+
DisableModes: nil,
3238+
EnableModes: []rulemode.Type{rulemode.Default},
3239+
InfoModes: nil,
3240+
WarningModes: nil,
3241+
ErrorModes: []rulemode.Type{rulemode.Default},
3242+
RuleFunction: rulefunction.PackageIndexPackagesHelpAdditionalProperties,
3243+
},
3244+
{
3245+
ProjectType: projecttype.PackageIndex,
3246+
SuperprojectType: projecttype.All,
3247+
Category: "data",
3248+
Subcategory: "package",
3249+
ID: "IA020",
3250+
Brief: "packages[].help.online missing",
3251+
Description: "",
3252+
MessageTemplate: "Missing packages[].help.online property in package(s): {{.}}",
3253+
DisableModes: nil,
3254+
EnableModes: []rulemode.Type{rulemode.Default},
3255+
InfoModes: nil,
3256+
WarningModes: nil,
3257+
ErrorModes: []rulemode.Type{rulemode.Default},
3258+
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineMissing,
3259+
},
3260+
{
3261+
ProjectType: projecttype.PackageIndex,
3262+
SuperprojectType: projecttype.All,
3263+
Category: "data",
3264+
Subcategory: "package",
3265+
ID: "IA021",
3266+
Brief: "Incorrect packages[].help.online type",
3267+
Description: "Must be a string.",
3268+
MessageTemplate: "packages[].help.online property has incorrect type in package(s): {{.}}",
3269+
DisableModes: nil,
3270+
EnableModes: []rulemode.Type{rulemode.Default},
3271+
InfoModes: nil,
3272+
WarningModes: nil,
3273+
ErrorModes: []rulemode.Type{rulemode.Default},
3274+
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineIncorrectType,
3275+
},
3276+
{
3277+
ProjectType: projecttype.PackageIndex,
3278+
SuperprojectType: projecttype.All,
3279+
Category: "data",
3280+
Subcategory: "package",
3281+
ID: "IA022",
3282+
Brief: "Invalid packages[].help.online format",
3283+
Description: "",
3284+
MessageTemplate: "packages[].help.online property does not have a valid URL format in package(s): {{.}}",
3285+
DisableModes: nil,
3286+
EnableModes: []rulemode.Type{rulemode.Default},
3287+
InfoModes: nil,
3288+
WarningModes: nil,
3289+
ErrorModes: []rulemode.Type{rulemode.Default},
3290+
RuleFunction: rulefunction.PackageIndexPackagesHelpOnlineInvalidFormat,
3291+
},
3292+
{
3293+
ProjectType: projecttype.PackageIndex,
3294+
SuperprojectType: projecttype.All,
3295+
Category: "data",
3296+
Subcategory: "package",
3297+
ID: "IA023",
29463298
Brief: "dead packages[].help.online",
29473299
Description: "",
29483300
MessageTemplate: "Unable to load the packages[].help.online URL for package(s): {{.}}",

0 commit comments

Comments
 (0)