Skip to content
Draft
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
21 changes: 19 additions & 2 deletions pkg/analysis/analysis.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package analysis

import (
"fmt"
"sync"

"github.com/grafana/plugin-validator/pkg/logme"
)
Expand All @@ -20,8 +21,22 @@ type Pass struct {
AnalyzerName string
RootDir string
CheckParams CheckParams
ResultOf map[*Analyzer]interface{}
Report func(string, Diagnostic)
// ResultOf is a map[*Analyzer]any that holds the results of all analyzers and is safe for concurrent use.
// The convenience method GetResult can be used to retrieve typed results, or the map can be accessed directly.
ResultOf sync.Map
Report func(string, Diagnostic)
}

func GetResult[T any](pass *Pass, key *Analyzer) (T, bool) {
anyV, ok := pass.ResultOf.Load(key)
if anyV == nil {
// Special case for nil result.
// Return the zero value of T, otherwise the type assertion below will panic
// due to nil interface{} not being assignable to T.
var zero T
return zero, ok
}
return anyV.(T), ok
}

type CheckParams struct {
Expand All @@ -39,6 +54,8 @@ type CheckParams struct {
ArchiveCalculatedMD5 string
// ArchiveCalculatedSHA1 contains the sha1 checksum calculated from the archive
ArchiveCalculatedSHA1 string

Parallel bool
}

func (p *Pass) ReportResult(analysisName string, rule *Rule, message string, detail string) {
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/archivename/archivename.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}

archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/backendbinary/backendbinary.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/backenddebug/backenddebug.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/binarypermissions/binarypermissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/brokenlinks/brokenlinks.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ type contextURL struct {
}

func run(pass *analysis.Pass) (interface{}, error) {
metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}

readmeResult, ok := pass.ResultOf[readme.Analyzer].([]byte)
readmeResult, ok := analysis.GetResult[[]byte](pass, readme.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/changelog/changelog.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
ctx, canc := context.WithTimeout(context.Background(), time.Minute*1)
defer canc()

rawMetadataMaps, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
rawMetadataMaps, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/coderules/coderules.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (any, error) {
sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok {
// no source code for the validator
return nil, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/discoverability/discoverability.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
6 changes: 3 additions & 3 deletions pkg/analysis/passes/gomanifest/gomanifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}
Expand All @@ -57,11 +57,11 @@ func run(pass *analysis.Pass) (interface{}, error) {
return nil, nil
}

archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, errors.New("archive dir not found")
}
sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok {
// no source code found so we can't check the manifest
return nil, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/gosec/gosec.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {
// only run if sourcecode.Analyzer succeeded
sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/includesnested/includesnested.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/jargon/jargon.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
"nodejs",
}

readmeContent, ok := pass.ResultOf[readme.Analyzer].([]byte)
readmeContent, ok := analysis.GetResult[[]byte](pass, readme.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/jssourcemap/jssourcemap.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {

sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok || sourceCodeDir == "" {
return nil, nil
}

archiveFilesPath, ok := pass.ResultOf[archive.Analyzer].(string)
archiveFilesPath, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok || archiveFilesPath == "" {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/legacybuilder/legacybuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {

publishedStatus, ok := pass.ResultOf[published.Analyzer].(*published.PluginStatus)
publishedStatus, ok := analysis.GetResult[*published.PluginStatus](pass, published.Analyzer)

// we don't fail published plugins for using toolkit (yet)
if ok && publishedStatus.Status != "unknown" {
legacyBuilder.Severity = analysis.Warning
}

parsedJsonContent, ok := pass.ResultOf[packagejson.Analyzer].(packagejson.PackageJson)
parsedJsonContent, ok := analysis.GetResult[*packagejson.PackageJson](pass, packagejson.Analyzer)

if !ok {
return nil, nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/legacyplatform/legacyplatform.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func fetchDetectors() ([]detector, error) {

func run(pass *analysis.Pass) (interface{}, error) {

status, ok := pass.ResultOf[published.Analyzer].(*published.PluginStatus)
status, ok := analysis.GetResult[*published.PluginStatus](pass, published.Analyzer)

if !ok {
return nil, nil
Expand All @@ -122,7 +122,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
legacyPlatform.Severity = analysis.Warning
}

moduleJsMap, ok := pass.ResultOf[modulejs.Analyzer].(map[string][]byte)
moduleJsMap, ok := analysis.GetResult[map[string][]byte](pass, modulejs.Analyzer)
if !ok || len(moduleJsMap) == 0 {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/license/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ var validLicensesRegex = []*regexp.Regexp{
const minRequiredConfidenceLevel float32 = 0.9

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/llmreview/llmreview.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func run(pass *analysis.Pass) (any, error) {

var err error
// only run if sourcecode.Analyzer succeeded
sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/logos/logos.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/manifest/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}

publishStatus, ok := pass.ResultOf[published.Analyzer].(*published.PluginStatus)
publishStatus, ok := analysis.GetResult[*published.PluginStatus](pass, published.Analyzer)
isPublished := false
if ok && publishStatus.Status != "unknown" {
isPublished = true
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)

if !ok {
return nil, nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/metadatapaths/metadatapaths.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ type CheckPath struct {
func checkMetadataPaths(pass *analysis.Pass) (interface{}, error) {
var paths []CheckPath

archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}

metadatamap, ok := pass.ResultOf[nestedmetadata.Analyzer].(nestedmetadata.Metadatamap)
metadatamap, ok := analysis.GetResult[nestedmetadata.Metadatamap](pass, nestedmetadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/metadatavalid/metadatavalid.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
schema, ok := pass.ResultOf[metadataschema.Analyzer].([]byte)
schema, ok := analysis.GetResult[[]byte](pass, metadataschema.Analyzer)
if !ok {
return nil, nil
}
Expand All @@ -55,7 +55,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
return nil, err
}

archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/modulejs/modulejs.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (any, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok || archiveDir == "" {
// this should never happen
return nil, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/nestedmetadata/nestedmetadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ var MainPluginJson = "plugin.json"
type Metadatamap map[string]metadata.Metadata

func run(pass *analysis.Pass) (interface{}, error) {
archiveDir, ok := pass.ResultOf[archive.Analyzer].(string)
archiveDir, ok := analysis.GetResult[string](pass, archive.Analyzer)

if !ok {
return nil, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis/passes/org/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var Analyzer = &analysis.Analyzer{
}

func run(pass *analysis.Pass) (interface{}, error) {
metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/osvscanner/osvscanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,11 @@ func run(pass *analysis.Pass) (interface{}, error) {
return nil, nil
}

archiveFilesPath, ok := pass.ResultOf[archive.Analyzer].(string)
archiveFilesPath, ok := analysis.GetResult[string](pass, archive.Analyzer)
if !ok || archiveFilesPath == "" {
return nil, nil
}
sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)
if !ok || sourceCodeDir == "" {
return nil, nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/analysis/passes/packagejson/packagejson.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ var Analyzer = &analysis.Analyzer{

func run(pass *analysis.Pass) (interface{}, error) {

sourceCodeDir, ok := pass.ResultOf[sourcecode.Analyzer].(string)
sourceCodeDir, ok := analysis.GetResult[string](pass, sourcecode.Analyzer)

// we don't fail published plugins for using toolkit (yet)
if !ok || sourceCodeDir == "" {
return nil, nil
}

metadataBody, ok := pass.ResultOf[metadata.Analyzer].([]byte)
metadataBody, ok := analysis.GetResult[[]byte](pass, metadata.Analyzer)
if !ok {
return nil, nil
}
Expand Down
Loading
Loading