diff --git a/cmd/analyzer/main.go b/cmd/analyzer/main.go index 37fc2dff..d83dad12 100644 --- a/cmd/analyzer/main.go +++ b/cmd/analyzer/main.go @@ -261,10 +261,12 @@ func validateFlags() error { return fmt.Errorf("unable to find provider settings file") } - for _, f := range rulesFile { - _, err = os.Stat(f) - if err != nil { - return fmt.Errorf("unable to find rule path or file") + if getOpenAPISpec == "" { + for _, f := range rulesFile { + _, err = os.Stat(f) + if err != nil { + return fmt.Errorf("unable to find rule path or file") + } } } m := provider.AnalysisMode(strings.ToLower(analysisMode)) @@ -307,52 +309,52 @@ func createOpenAPISchema(providers map[string]provider.InternalProviderClient, l } } - // AndOrRefRuleRef = append(AndOrRefRuleRef, openapi3.SchemaOrRef{ - // SchemaReference: &openapi3.SchemaReference{ - // Ref: "#/components/schemas/and", - // }, - // }) - // AndOrRefRuleRef = append(AndOrRefRuleRef, openapi3.SchemaOrRef{ - // SchemaReference: &openapi3.SchemaReference{ - // Ref: "#/components/schemas/or", - // }, - // }) - // spec.MapOfSchemaOrRefValues["and"] = openapi3.SchemaOrRef{ - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeObject, - // Properties: map[string]openapi3.SchemaOrRef{ - // "and": { - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeArray, - // Items: &openapi3.SchemaOrRef{ - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeObject, - // OneOf: AndOrRefRuleRef, - // }, - // }, - // }, - // }, - // }, - // }, - // } - // spec.MapOfSchemaOrRefValues["or"] = openapi3.SchemaOrRef{ - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeObject, - // Properties: map[string]openapi3.SchemaOrRef{ - // "or": { - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeArray, - // Items: &openapi3.SchemaOrRef{ - // Schema: &openapi3.Schema{ - // Type: &provider.SchemaTypeObject, - // OneOf: AndOrRefRuleRef, - // }, - // }, - // }, - // }, - // }, - // }, - // } + AndOrRefRuleRef = append(AndOrRefRuleRef, openapi3.SchemaOrRef{ + SchemaReference: &openapi3.SchemaReference{ + Ref: "#/components/schemas/and", + }, + }) + AndOrRefRuleRef = append(AndOrRefRuleRef, openapi3.SchemaOrRef{ + SchemaReference: &openapi3.SchemaReference{ + Ref: "#/components/schemas/or", + }, + }) + spec.MapOfSchemaOrRefValues["and"] = openapi3.SchemaOrRef{ + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeObject, + Properties: map[string]openapi3.SchemaOrRef{ + "and": { + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeArray, + Items: &openapi3.SchemaOrRef{ + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeObject, + OneOf: AndOrRefRuleRef, + }, + }, + }, + }, + }, + }, + } + spec.MapOfSchemaOrRefValues["or"] = openapi3.SchemaOrRef{ + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeObject, + Properties: map[string]openapi3.SchemaOrRef{ + "or": { + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeArray, + Items: &openapi3.SchemaOrRef{ + Schema: &openapi3.Schema{ + Type: &provider.SchemaTypeObject, + OneOf: AndOrRefRuleRef, + }, + }, + }, + }, + }, + }, + } spec.MapOfSchemaOrRefValues["rule"].Schema.Properties["when"] = openapi3.SchemaOrRef{ Schema: &openapi3.Schema{ diff --git a/external-providers/generic-external-provider/go.mod b/external-providers/generic-external-provider/go.mod index 9f1e2468..5a7626c3 100644 --- a/external-providers/generic-external-provider/go.mod +++ b/external-providers/generic-external-provider/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/bombsimon/logrusr/v3 v3.1.0 - github.com/getkin/kin-openapi v0.118.0 + github.com/swaggest/openapi-go v0.2.45 github.com/go-logr/logr v1.2.4 github.com/konveyor/analyzer-lsp v0.3.0-beta.2 github.com/sirupsen/logrus v1.9.3 @@ -39,5 +39,3 @@ require ( google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -// replace github.com/konveyor/analyzer-lsp => ../../ diff --git a/external-providers/yq-external-provider/go.mod b/external-providers/yq-external-provider/go.mod index ef1d9967..0e03547a 100644 --- a/external-providers/yq-external-provider/go.mod +++ b/external-providers/yq-external-provider/go.mod @@ -4,8 +4,8 @@ go 1.19 require ( github.com/bombsimon/logrusr/v3 v3.1.0 - github.com/getkin/kin-openapi v0.118.0 github.com/go-logr/logr v1.2.4 + github.com/swaggest/openapi-go v0.2.45 github.com/konveyor/analyzer-lsp v0.3.0-alpha.3.0.20230915135621-94f04595688b github.com/sirupsen/logrus v1.9.3 go.lsp.dev/uri v0.3.0 diff --git a/external-providers/yq-external-provider/pkg/yq_provider/provider.go b/external-providers/yq-external-provider/pkg/yq_provider/provider.go index 311265cf..e73d14c2 100644 --- a/external-providers/yq-external-provider/pkg/yq_provider/provider.go +++ b/external-providers/yq-external-provider/pkg/yq_provider/provider.go @@ -6,15 +6,17 @@ import ( "os" "os/exec" - "github.com/getkin/kin-openapi/openapi3" "github.com/go-logr/logr" "github.com/konveyor/analyzer-lsp/provider" + "github.com/swaggest/openapi-go/openapi3" ) // TODO(shawn-hurley): Pipe the logger through // Determine how and where external providers will add the logs to make the logs viewable in a single location. type yqProvider struct { ctx context.Context + + log logr.Logger } var _ provider.BaseClient = &yqProvider{} @@ -24,12 +26,14 @@ func NewYqProvider() *yqProvider { } func (p *yqProvider) Capabilities() []provider.Capability { - return []provider.Capability{ - { - Name: "k8sResourceMatched", - TemplateContext: openapi3.SchemaRef{}, - }, + caps := []provider.Capability{} + r := openapi3.NewReflector() + k8sResourceMatched, err := provider.ToProviderCap(r, p.log, k8sResourceCondition{}, "k8sResourceMatched") + if err != nil { + fmt.Printf("not working") } + caps = append(caps, k8sResourceMatched) + return caps } type yqCondition struct { diff --git a/provider/internal/builtin/provider.go b/provider/internal/builtin/provider.go index 5a7c8015..dbfc6bf4 100644 --- a/provider/internal/builtin/provider.go +++ b/provider/internal/builtin/provider.go @@ -30,7 +30,7 @@ type builtinCondition struct { type fileContentCondition struct { FilePattern string `yaml:"filePattern" json:"filePattern,omitempty"` - Pattern string `yaml:"pattern json:"pattern"` + Pattern string `yaml:"pattern" json:"pattern"` } type fileCondition struct { diff --git a/provider/internal/java/dependency.go b/provider/internal/java/dependency.go index b264f2df..86026db6 100644 --- a/provider/internal/java/dependency.go +++ b/provider/internal/java/dependency.go @@ -134,9 +134,7 @@ func (p *javaServiceClient) GetDependenciesFallback(ctx context.Context, locatio p.log.V(10).Info("Analyzing POM", "POM", fmt.Sprintf("%s:%s:%s", pomCoordinate(pom.GroupID), pomCoordinate(pom.ArtifactID), pomCoordinate(pom.Version)), "error", err) - if err != nil { - return nil, err - } + // If the pom object is empty then parse failed silently. if reflect.DeepEqual(*pom, gopom.Project{}) { return nil, nil @@ -464,13 +462,13 @@ func addDepLabels(depToLabels map[string]*depLabelItem, depName string) []string m := map[string]interface{}{} for _, d := range depToLabels { if d.r.Match([]byte(depName)) { - for label, _ := range d.labels { + for label := range d.labels { m[label] = nil } } } s := []string{} - for k, _ := range m { + for k := range m { s = append(s, k) } // if open source label is not found, qualify the dep as being internal by default