From 00ef2f7b7db6e40da7acc79ec3ba738969276aa9 Mon Sep 17 00:00:00 2001 From: per1234 <accounts@perglass.com> Date: Fri, 8 Jan 2021 03:43:19 -0800 Subject: [PATCH] Update platform.txt schema to account for the *_remote tools The upload action for tools with name suffix "_remote" is given special treatment by the build system. Because it's not possible to check for this with the regexes provided by the JSON schema validation package, it's necessary to apply those rules to all upload actions. --- ...duino-platform-txt-definitions-schema.json | 44 +++++++++++++++++-- .../platformtxt/platformtxtschema_test.go | 27 ++++++------ .../ruleconfiguration/ruleconfiguration.go | 32 -------------- internal/rule/rulefunction/platform_test.go | 24 ---------- internal/rule/schema/schemadata/bindata.go | 44 +++++++++++++++++-- 5 files changed, 95 insertions(+), 76 deletions(-) diff --git a/etc/schemas/arduino-platform-txt-definitions-schema.json b/etc/schemas/arduino-platform-txt-definitions-schema.json index c16d9eac4..177fd2f46 100644 --- a/etc/schemas/arduino-platform-txt-definitions-schema.json +++ b/etc/schemas/arduino-platform-txt-definitions-schema.json @@ -851,7 +851,7 @@ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/permissive/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/permissive/object" } ] } @@ -863,7 +863,7 @@ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/specification/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/specification/object" } ] } @@ -875,7 +875,7 @@ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/strict/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/strict/object" } ] } @@ -1168,6 +1168,44 @@ ] } } + }, + "toolsToolNameUpload": { + "base": { + "object": { + "allOf": [ + { + "required": ["pattern"] + } + ] + } + }, + "permissive": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + }, + "specification": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + }, + "strict": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + } } } } diff --git a/internal/project/platform/platformtxt/platformtxtschema_test.go b/internal/project/platform/platformtxt/platformtxtschema_test.go index dd373b786..c04ca6f13 100644 --- a/internal/project/platform/platformtxt/platformtxtschema_test.go +++ b/internal/project/platform/platformtxt/platformtxtschema_test.go @@ -58,6 +58,9 @@ var validPlatformTxtRaw = []byte(` tools.avrdude.upload.params.verbose=-v tools.avrdude.upload.params.quiet=-q -q tools.avrdude.upload.pattern=asdf + tools.avrdude.program.params.verbose=-v + tools.avrdude.program.params.quiet=-q -q + tools.avrdude.program.pattern=asdf tools.bossac.upload.params.verbose=-v tools.bossac.upload.params.quiet=-q -q tools.bossac.upload.pattern=asdf @@ -196,25 +199,21 @@ func TestRequired(t *testing.T) { {"recipe.output.tmp_file", "recipe\\.output\\.tmp_file", compliancelevel.Specification, assert.True}, {"recipe.output.tmp_file", "recipe\\.output\\.tmp_file", compliancelevel.Strict, assert.True}, - {"tools.avrdude.upload.params.verbose", "tools/avrdude/upload/params\\.verbose", compliancelevel.Permissive, assert.True}, - {"tools.avrdude.upload.params.verbose", "tools/avrdude/upload/params\\.verbose", compliancelevel.Specification, assert.True}, - {"tools.avrdude.upload.params.verbose", "tools/avrdude/upload/params\\.verbose", compliancelevel.Strict, assert.True}, - - {"tools.avrdude.upload.params.quiet", "tools/avrdude/upload/params\\.quiet", compliancelevel.Permissive, assert.True}, - {"tools.avrdude.upload.params.quiet", "tools/avrdude/upload/params\\.quiet", compliancelevel.Specification, assert.True}, - {"tools.avrdude.upload.params.quiet", "tools/avrdude/upload/params\\.quiet", compliancelevel.Strict, assert.True}, - {"tools.avrdude.upload.pattern", "tools/avrdude/upload/pattern", compliancelevel.Permissive, assert.True}, {"tools.avrdude.upload.pattern", "tools/avrdude/upload/pattern", compliancelevel.Specification, assert.True}, {"tools.avrdude.upload.pattern", "tools/avrdude/upload/pattern", compliancelevel.Strict, assert.True}, - {"tools.bossac.upload.params.verbose", "tools/bossac/upload/params\\.verbose", compliancelevel.Permissive, assert.True}, - {"tools.bossac.upload.params.verbose", "tools/bossac/upload/params\\.verbose", compliancelevel.Specification, assert.True}, - {"tools.bossac.upload.params.verbose", "tools/bossac/upload/params\\.verbose", compliancelevel.Strict, assert.True}, + {"tools.avrdude.program.params.verbose", "tools/avrdude/program/params\\.verbose", compliancelevel.Permissive, assert.True}, + {"tools.avrdude.program.params.verbose", "tools/avrdude/program/params\\.verbose", compliancelevel.Specification, assert.True}, + {"tools.avrdude.program.params.verbose", "tools/avrdude/program/params\\.verbose", compliancelevel.Strict, assert.True}, + + {"tools.avrdude.program.params.quiet", "tools/avrdude/program/params\\.quiet", compliancelevel.Permissive, assert.True}, + {"tools.avrdude.program.params.quiet", "tools/avrdude/program/params\\.quiet", compliancelevel.Specification, assert.True}, + {"tools.avrdude.program.params.quiet", "tools/avrdude/program/params\\.quiet", compliancelevel.Strict, assert.True}, - {"tools.bossac.upload.params.quiet", "tools/bossac/upload/params\\.quiet", compliancelevel.Permissive, assert.True}, - {"tools.bossac.upload.params.quiet", "tools/bossac/upload/params\\.quiet", compliancelevel.Specification, assert.True}, - {"tools.bossac.upload.params.quiet", "tools/bossac/upload/params\\.quiet", compliancelevel.Strict, assert.True}, + {"tools.avrdude.program.pattern", "tools/avrdude/program/pattern", compliancelevel.Permissive, assert.True}, + {"tools.avrdude.program.pattern", "tools/avrdude/program/pattern", compliancelevel.Specification, assert.True}, + {"tools.avrdude.program.pattern", "tools/avrdude/program/pattern", compliancelevel.Strict, assert.True}, {"tools.bossac.upload.pattern", "tools/bossac/upload/pattern", compliancelevel.Permissive, assert.True}, {"tools.bossac.upload.pattern", "tools/bossac/upload/pattern", compliancelevel.Specification, assert.True}, diff --git a/internal/rule/ruleconfiguration/ruleconfiguration.go b/internal/rule/ruleconfiguration/ruleconfiguration.go index bccea6fcb..eb8afb33a 100644 --- a/internal/rule/ruleconfiguration/ruleconfiguration.go +++ b/internal/rule/ruleconfiguration/ruleconfiguration.go @@ -2649,38 +2649,6 @@ var configurations = []Type{ ErrorModes: []rulemode.Type{rulemode.Strict}, RuleFunction: rulefunction.PlatformTxtRecipeSizeRegexDataMissing, }, - { - ProjectType: projecttype.Platform, - SuperprojectType: projecttype.All, - Category: "configuration files", - Subcategory: "platform.txt", - ID: "PF078", - Brief: "missing upload.params.verbose", - Description: "", - MessageTemplate: "Missing upload.params.verbose for {{.}} tool(s). See: https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.PlatformTxtUploadParamsVerboseMissing, - }, - { - ProjectType: projecttype.Platform, - SuperprojectType: projecttype.All, - Category: "configuration files", - Subcategory: "platform.txt", - ID: "PF079", - Brief: "missing upload.params.quiet", - Description: "", - MessageTemplate: "Missing upload.params.quiet for {{.}} tool(s). See: https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.PlatformTxtUploadParamsQuietMissing, - }, { ProjectType: projecttype.Platform, SuperprojectType: projecttype.All, diff --git a/internal/rule/rulefunction/platform_test.go b/internal/rule/rulefunction/platform_test.go index 00e62b05c..5360c4728 100644 --- a/internal/rule/rulefunction/platform_test.go +++ b/internal/rule/rulefunction/platform_test.go @@ -934,30 +934,6 @@ func TestPlatformTxtRecipeSizeRegexDataMissing(t *testing.T) { checkPlatformRuleFunction(PlatformTxtRecipeSizeRegexDataMissing, testTables, t) } -func TestPlatformTxtUploadParamsVerboseMissing(t *testing.T) { - testTables := []platformRuleFunctionTestTable{ - {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, - {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, - {"No tools", "no-tools-platform.txt", ruleresult.Skip, ""}, - {"Property missing", "upload-params-verbose-missing-platform.txt", ruleresult.Fail, "avrdude, bossac"}, - {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, - } - - checkPlatformRuleFunction(PlatformTxtUploadParamsVerboseMissing, testTables, t) -} - -func TestPlatformTxtUploadParamsQuietMissing(t *testing.T) { - testTables := []platformRuleFunctionTestTable{ - {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, - {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, - {"No tools", "no-tools-platform.txt", ruleresult.Skip, ""}, - {"Property missing", "upload-params-quiet-missing-platform.txt", ruleresult.Fail, "avrdude, bossac"}, - {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, - } - - checkPlatformRuleFunction(PlatformTxtUploadParamsQuietMissing, testTables, t) -} - func TestPlatformTxtUploadPatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, diff --git a/internal/rule/schema/schemadata/bindata.go b/internal/rule/schema/schemadata/bindata.go index 0578006c1..d72179738 100644 --- a/internal/rule/schema/schemadata/bindata.go +++ b/internal/rule/schema/schemadata/bindata.go @@ -3148,7 +3148,7 @@ var _arduinoPlatformTxtDefinitionsSchemaJson = []byte(`{ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/permissive/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/permissive/object" } ] } @@ -3160,7 +3160,7 @@ var _arduinoPlatformTxtDefinitionsSchemaJson = []byte(`{ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/specification/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/specification/object" } ] } @@ -3172,7 +3172,7 @@ var _arduinoPlatformTxtDefinitionsSchemaJson = []byte(`{ "$ref": "#/definitions/propertiesObjects/toolsToolNameUpload/base/object" }, { - "$ref": "#/definitions/requiredObjects/toolsToolNameActionName/strict/object" + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/strict/object" } ] } @@ -3465,6 +3465,44 @@ var _arduinoPlatformTxtDefinitionsSchemaJson = []byte(`{ ] } } + }, + "toolsToolNameUpload": { + "base": { + "object": { + "allOf": [ + { + "required": ["pattern"] + } + ] + } + }, + "permissive": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + }, + "specification": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + }, + "strict": { + "object": { + "allOf": [ + { + "$ref": "#/definitions/requiredObjects/toolsToolNameUpload/base/object" + } + ] + } + } } } }