diff --git a/README.md b/README.md index 0216ae9..bd89f86 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,9 @@ lint: pipeline: deprecatedFeature: enabled: true + allowCELScript: false + allowDraft: false + allowStateFlow: false insecureAuthorization: enabled: false stepLength: @@ -76,11 +79,11 @@ lint: enabled: true queryBeforeMutation: enabled: true - legacyScript: - enabled: true tailordb: deprecatedFeature: enabled: true + allowDraft: false + allowCELHooks: false legacyPermission: enabled: true stateflow: @@ -91,24 +94,32 @@ lint: ### Lint Rules #### Pipeline Rules -- **deprecatedFeature** - Check for deprecated features in pipelines +- **deprecatedFeature** - Identify deprecated features including legacy script/validation patterns and recommend modern alternatives + - `enabled` (default: true) - Enable/disable deprecated feature detection + - `allowCELScript` (default: false) - Allow CEL script usage in pipelines + - `allowDraft` (default: false) - Allow draft resources in pipeline configurations + - `allowStateFlow` (default: false) - Allow StateFlow resources in pipeline configurations + - Detects legacy script patterns (`pre_validation`, `pre_script`, `post_script`, `post_validation`) and recommends modern hook alternatives (`pre_hook`, `post_hook`) + - Enabled by default to promote migration away from deprecated features - **insecureAuthorization** - Detect insecure authorization patterns - **stepLength** - Ensure pipeline steps don't exceed maximum length - **multipleMutations** - Identify multiple mutations in a single operation - **queryBeforeMutation** - Check for queries before mutations -- **legacyScript** - Identify legacy script/validation patterns and recommend modern hook alternatives - - Detects `pre_validation` and recommends `pre_hook` - - Detects `pre_script` and recommends `pre_hook` - - Detects `post_script` and recommends `post_hook` - - Detects `post_validation` and recommends `post_hook` - - Enabled by default to promote migration to modern hook patterns #### TailorDB Rules -- **deprecatedFeature** - Check for deprecated TailorDB features +- **deprecatedFeature** - Identify deprecated TailorDB features and promote modern alternatives + - `enabled` (default: true) - Enable/disable deprecated feature detection + - `allowDraft` (default: false) - Allow draft resources in TailorDB configurations + - `allowCELHooks` (default: false) - Allow CEL hook usage in TailorDB configurations + - Detects deprecated patterns and recommends modern TailorDB alternatives + - Enabled by default to promote migration away from deprecated features - **legacyPermission** - Identify legacy permission patterns -#### Stateflow Rules -- **deprecatedFeature** - Check for deprecated Stateflow features +#### StateFlow Rules +- **deprecatedFeature** - Identify deprecated StateFlow features and promote modern alternatives + - `enabled` (default: true) - Enable/disable deprecated feature detection + - Detects deprecated StateFlow patterns and recommends modern alternatives + - Enabled by default to promote migration away from deprecated features ## Command Reference diff --git a/config/config.go b/config/config.go index 9e2a542..b2487cd 100644 --- a/config/config.go +++ b/config/config.go @@ -25,13 +25,13 @@ type Pipeline struct { StepLength StepLength `yaml:"stepLength,omitempty,omitzero"` MultipleMutations MultipleMutations `yaml:"multipleMutations,omitempty,omitzero"` QueryBeforeMutation QueryBeforeMutation `yaml:"queryBeforeMutation,omitempty,omitzero"` - LegacyScript LegacyScript `yaml:"legacyScript,omitempty,omitzero"` } type PipelineDeprecatedFeature struct { Enabled bool `default:"true" yaml:"enabled,omitempty"` AllowDraft bool `default:"false" yaml:"allowDraft,omitempty"` AllowStateFlow bool `default:"false" yaml:"allowStateFlow,omitempty"` + AllowCELScript bool `default:"false" yaml:"allowCELScript,omitempty"` } type InsecureAuthorization struct { @@ -51,10 +51,6 @@ type QueryBeforeMutation struct { Enabled bool `default:"true" yaml:"enabled,omitempty"` } -type LegacyScript struct { - Enabled bool `default:"true" yaml:"enabled,omitempty"` -} - type TailorDB struct { DeprecatedFeature TailorDBDeprecatedFeature `yaml:"deprecatedFeature,omitempty,omitzero"` LegacyPermission LegacyPermission `yaml:"legacyPermission,omitempty,omitzero"` diff --git a/tailor/helper_test.go b/tailor/helper_test.go index e5cc1ce..942e82a 100644 --- a/tailor/helper_test.go +++ b/tailor/helper_test.go @@ -36,9 +36,7 @@ func createTestConfig(t *testing.T) *config.Config { Enabled: true, AllowStateFlow: false, AllowDraft: false, - }, - LegacyScript: config.LegacyScript{ - Enabled: true, + AllowCELScript: false, }, MultipleMutations: config.MultipleMutations{ Enabled: true, diff --git a/tailor/lint.go b/tailor/lint.go index c7ef8af..1b10b6e 100644 --- a/tailor/lint.go +++ b/tailor/lint.go @@ -142,33 +142,33 @@ func (c *Client) Lint(resources *Resources) ([]*LintWarn, error) { } } } - if c.cfg.Lint.Pipeline.LegacyScript.Enabled { + if c.cfg.Lint.Pipeline.DeprecatedFeature.Enabled && !c.cfg.Lint.Pipeline.DeprecatedFeature.AllowCELScript { if s.PreValidation != "" { warns = append(warns, &LintWarn{ Type: LintTargetTypePipeline, Name: fmt.Sprintf("%s/%s step %s", p.NamespaceName, r.Name, s.Name), - Message: "`pre_validation` is not recommended. Use `pre_hook` instead.", + Message: "`pre_validation` is deprecated. Use `pre_hook` instead.", }) } if s.PreScript != "" { warns = append(warns, &LintWarn{ Type: LintTargetTypePipeline, Name: fmt.Sprintf("%s/%s step %s", p.NamespaceName, r.Name, s.Name), - Message: "`pre_script` is not recommended. Use `pre_hook` instead.", + Message: "`pre_script` is deprecated. Use `pre_hook` instead.", }) } if s.PostScript != "" { warns = append(warns, &LintWarn{ Type: LintTargetTypePipeline, Name: fmt.Sprintf("%s/%s step %s", p.NamespaceName, r.Name, s.Name), - Message: "`post_script` is not recommended. Use `post_hook` instead.", + Message: "`post_script` is deprecated. Use `post_hook` instead.", }) } if s.PostValidation != "" { warns = append(warns, &LintWarn{ Type: LintTargetTypePipeline, Name: fmt.Sprintf("%s/%s step %s", p.NamespaceName, r.Name, s.Name), - Message: "`post_validation` is not recommended. Use `post_hook` instead.", + Message: "`post_validation` is deprecated. Use `post_hook` instead.", }) } } diff --git a/tailor/lint_test.go b/tailor/lint_test.go index e8c7586..2062b92 100644 --- a/tailor/lint_test.go +++ b/tailor/lint_test.go @@ -284,7 +284,8 @@ func TestClient_Lint_Pipeline(t *testing.T) { { name: "legacy script warnings", configMod: func(c *config.Config) { - c.Lint.Pipeline.LegacyScript.Enabled = true + c.Lint.Pipeline.DeprecatedFeature.Enabled = true + c.Lint.Pipeline.DeprecatedFeature.AllowCELScript = false }, resources: &Resources{ Pipelines: []*Pipeline{ @@ -308,10 +309,10 @@ func TestClient_Lint_Pipeline(t *testing.T) { }, }, expectedMsgs: []string{ - "`pre_validation` is not recommended. Use `pre_hook` instead.", - "`pre_script` is not recommended. Use `pre_hook` instead.", - "`post_script` is not recommended. Use `post_hook` instead.", - "`post_validation` is not recommended. Use `post_hook` instead.", + "`pre_validation` is deprecated. Use `pre_hook` instead.", + "`pre_script` is deprecated. Use `pre_hook` instead.", + "`post_script` is deprecated. Use `post_hook` instead.", + "`post_validation` is deprecated. Use `post_hook` instead.", }, }, {