Skip to content
Merged
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
35 changes: 23 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ lint:
pipeline:
deprecatedFeature:
enabled: true
allowCELScript: false
allowDraft: false
allowStateFlow: false
insecureAuthorization:
enabled: false
stepLength:
Expand All @@ -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:
Expand All @@ -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

Expand Down
6 changes: 1 addition & 5 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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"`
Expand Down
4 changes: 1 addition & 3 deletions tailor/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
10 changes: 5 additions & 5 deletions tailor/lint.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
})
}
}
Expand Down
11 changes: 6 additions & 5 deletions tailor/lint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand All @@ -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.",
},
},
{
Expand Down