-
Notifications
You must be signed in to change notification settings - Fork 1
/
list.go
99 lines (93 loc) · 3.43 KB
/
list.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package lint
import (
"slices"
"github.com/spf13/afero"
)
func GetRules(fs afero.Fs) ([]Rule, error) {
rules := []Rule{
&SimpleRule{
Identifier: "task-name-valid",
Validator: CallFuncForEveryAsset(EnsureTaskNameIsValidForASingleAsset),
AssetValidator: EnsureTaskNameIsValidForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "task-name-unique",
Validator: EnsureTaskNameIsUnique,
AssetValidator: EnsureTaskNameIsUniqueForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "dependency-exists",
Validator: CallFuncForEveryAsset(EnsureDependencyExistsForASingleAsset),
AssetValidator: EnsureDependencyExistsForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "valid-executable-file",
Validator: CallFuncForEveryAsset(EnsureExecutableFileIsValidForASingleAsset(fs)),
AssetValidator: EnsureExecutableFileIsValidForASingleAsset(fs),
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "valid-pipeline-schedule",
Validator: EnsurePipelineScheduleIsValidCron,
ApplicableLevels: []Level{LevelPipeline},
},
&SimpleRule{
Identifier: "valid-pipeline-name",
Validator: EnsurePipelineNameIsValid,
ApplicableLevels: []Level{LevelPipeline},
},
&SimpleRule{
Identifier: "valid-task-type",
Validator: CallFuncForEveryAsset(EnsureTypeIsCorrectForASingleAsset),
AssetValidator: EnsureTypeIsCorrectForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "acyclic-pipeline",
Validator: EnsurePipelineHasNoCycles,
ApplicableLevels: []Level{LevelPipeline},
},
&SimpleRule{
Identifier: "valid-slack-notification",
Validator: EnsureSlackFieldInPipelineIsValid,
ApplicableLevels: []Level{LevelPipeline},
},
&SimpleRule{
Identifier: "materialization-config",
Validator: CallFuncForEveryAsset(EnsureMaterializationValuesAreValidForSingleAsset),
AssetValidator: EnsureMaterializationValuesAreValidForSingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "valid-snowflake-query-sensor",
Validator: CallFuncForEveryAsset(EnsureSnowflakeSensorHasQueryParameterForASingleAsset),
AssetValidator: EnsureSnowflakeSensorHasQueryParameterForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "valid-bigquery-table-sensor",
Validator: CallFuncForEveryAsset(EnsureBigQueryTableSensorHasTableParameterForASingleAsset),
AssetValidator: EnsureBigQueryTableSensorHasTableParameterForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
&SimpleRule{
Identifier: "valid-ingestr",
Validator: CallFuncForEveryAsset(EnsureIngestrAssetIsValidForASingleAsset),
AssetValidator: EnsureIngestrAssetIsValidForASingleAsset,
ApplicableLevels: []Level{LevelPipeline, LevelAsset},
},
}
return rules, nil
}
func FilterRulesByLevel(rules []Rule, level Level) []Rule {
filtered := make([]Rule, 0, len(rules))
for _, rule := range rules {
if slices.Contains(rule.GetApplicableLevels(), level) {
filtered = append(filtered, rule)
}
}
return filtered
}