Skip to content

Commit 41d237d

Browse files
committed
Allow configuration of validators in schemacheck
1 parent ec7a8f1 commit 41d237d

File tree

4 files changed

+62
-5
lines changed

4 files changed

+62
-5
lines changed

example/.codegen.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ deepcopy:
44
disabled: false
55
headerFilePath: ../hack/empty.txt
66
outputFileBaseName: zz_generated.deepcopy
7+
schemacheck:
8+
disabled: false
9+
enabledValidators: []
10+
disabledValidators: []
711
schemapatch:
812
disabled: false
913
requiredFeatureSets:

tools/codegen/cmd/schemacheck.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ package main
22

33
import (
44
"fmt"
5+
"strings"
56

67
"github.com/openshift/api/tools/codegen/pkg/generation"
78
"github.com/openshift/api/tools/codegen/pkg/schemacheck"
9+
"github.com/openshift/crd-schema-checker/pkg/cmd/options"
810
"github.com/spf13/cobra"
911
)
1012

13+
var (
14+
defaultComparisonConfig = options.NewComparatorOptions()
15+
comparisonBase = "master"
16+
)
17+
1118
// schemacheckCmd represents the schemacheck command
1219
var schemacheckCmd = &cobra.Command{
1320
Use: "schemacheck",
@@ -29,9 +36,18 @@ var schemacheckCmd = &cobra.Command{
2936

3037
func init() {
3138
rootCmd.AddCommand(schemacheckCmd)
39+
40+
knownComparators := strings.Join(defaultComparisonConfig.KnownComparators, ", ")
41+
rootCmd.PersistentFlags().StringSliceVar(&defaultComparisonConfig.DisabledComparators, "schemacheck:disabled-validators", defaultComparisonConfig.DisabledComparators, fmt.Sprintf("list of comparators that must be disabled. Available comparators: %s", knownComparators))
42+
rootCmd.PersistentFlags().StringSliceVar(&defaultComparisonConfig.EnabledComparators, "schemacheck:enabled-validators", defaultComparisonConfig.EnabledComparators, fmt.Sprintf("list of comparators that must be enabled. Available comparators: %s", knownComparators))
43+
rootCmd.PersistentFlags().StringVar(&comparisonBase, "schemacheck:comparison-base", comparisonBase, "base branch/commit to compare against")
3244
}
3345

3446
// newSchemaCheckGenerator builds a new schemacheck generator.
3547
func newSchemaCheckGenerator() generation.Generator {
36-
return schemacheck.NewGenerator(schemacheck.Options{})
48+
return schemacheck.NewGenerator(schemacheck.Options{
49+
EnabledComparators: defaultComparisonConfig.EnabledComparators,
50+
DisabledComparators: defaultComparisonConfig.DisabledComparators,
51+
ComparisonBase: comparisonBase,
52+
})
3753
}

tools/codegen/pkg/generation/types.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ type SchemaCheckConfig struct {
6767
// Disabled determines whether the schemacheck generator should be run or not.
6868
// This generator is enabled by default so this field defaults to false.
6969
Disabled bool `json:"disabled,omitempty"`
70+
71+
// EnabledValidators is a list of the validators that should be enabled.
72+
// If this is empty, the default validators are enabled.
73+
EnabledValidators []string `json:"enabledValidators,omitempty"`
74+
75+
// DisabledValidators is a list of the validators that should be disabled.
76+
// If this is empty, no default validators are disabled.
77+
DisabledValidators []string `json:"disabledValidators,omitempty"`
7078
}
7179

7280
// SchemaPatchConfig is the configuration for the schemapatch generator.

tools/codegen/pkg/schemacheck/generator.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,37 @@ type Options struct {
2323
// Disabled indicates whether the schemacheck generator is disabled or not.
2424
// This defaults to false as the schemacheck generator is enabled by default.
2525
Disabled bool
26+
27+
// EnabledComparators is a list of the comparators that should be enabled.
28+
// If this is empty, the default comparators are enabled.
29+
EnabledComparators []string
30+
31+
// DisabledComparators is a list of the comparators that should be disabled.
32+
// If this is empty, no default comparators are disabled.
33+
DisabledComparators []string
34+
35+
// ComparisonBase is the base branch/commit to compare against.
36+
// This defaults to "master".
37+
// This is not exposed via configuration as it must be set globally.
38+
ComparisonBase string
2639
}
2740

2841
// generator implements the generation.Generator interface.
2942
// It is designed to verify the CRD schema updates for a particular API group.
3043
type generator struct {
31-
disabled bool
44+
disabled bool
45+
enabledComparators []string
46+
disabledComparators []string
47+
comparisonBase string
3248
}
3349

3450
// NewGenerator builds a new schemacheck generator.
3551
func NewGenerator(opts Options) generation.Generator {
3652
return &generator{
37-
disabled: opts.Disabled,
53+
disabled: opts.Disabled,
54+
enabledComparators: opts.EnabledComparators,
55+
disabledComparators: opts.DisabledComparators,
56+
comparisonBase: opts.ComparisonBase,
3857
}
3958
}
4059

@@ -46,7 +65,10 @@ func (g *generator) ApplyConfig(config *generation.Config) generation.Generator
4665
}
4766

4867
return NewGenerator(Options{
49-
Disabled: config.SchemaCheck.Disabled,
68+
Disabled: config.SchemaCheck.Disabled,
69+
EnabledComparators: config.SchemaCheck.EnabledValidators,
70+
DisabledComparators: config.SchemaCheck.DisabledValidators,
71+
ComparisonBase: g.comparisonBase,
5072
})
5173
}
5274

@@ -65,6 +87,13 @@ func (g *generator) GenGroup(groupCtx generation.APIGroupContext) error {
6587
errs := []error{}
6688

6789
comparatorOptions := options.NewComparatorOptions()
90+
comparatorOptions.EnabledComparators = g.enabledComparators
91+
comparatorOptions.DisabledComparators = g.disabledComparators
92+
93+
if err := comparatorOptions.Validate(); err != nil {
94+
return fmt.Errorf("could not validate comparator options: %w", err)
95+
}
96+
6897
comparatorConfig, err := comparatorOptions.Complete()
6998
if err != nil {
7099
return fmt.Errorf("could not complete comparator options: %w", err)
@@ -87,7 +116,7 @@ func (g *generator) GenGroup(groupCtx generation.APIGroupContext) error {
87116

88117
// genGroupVersion runs the schemacheck generator against a particular version of the API group.
89118
func (g *generator) genGroupVersion(group string, version generation.APIVersionContext, comparatorConfig *options.ComparatorConfig) error {
90-
contexts, err := loadSchemaCheckGenerationContextsForVersion(version, "openshift/master")
119+
contexts, err := loadSchemaCheckGenerationContextsForVersion(version, g.comparisonBase)
91120
if err != nil {
92121
return fmt.Errorf("could not load schema check generation contexts for group/version %s/%s: %w", group, version.Name, err)
93122
}

0 commit comments

Comments
 (0)