mirror of
https://github.com/safedep/vet.git
synced 2025-12-10 13:43:01 -06:00
* feat: Add support for filter v2 * Add filter v2 support * Add test for filter v2 evaluator * fix: CEL v2 query engine * chore: Add sample policy-v2 * chore: Remove deprecated API use * fix: Remove deprecated API * fix: Misc linter fixes * fix: Linter fixes * fix: Policy v2 sample * refactor: Extract filter match rendering into common concern * test: Update test case * fix: JSON round trip problem by using PB messages for filter eval * Improve DX by declaring enum constants in CEL env * fix: Code generator for enum type names * docs: Add policy dev enumgen docs * chore: Add example policy * test: Add test for CEL filter suite v2 analyser * Code review fixes * fix: Code review comments * chore: Add CI check to ensure generated code is updated * fix: Add nil guards during init
1.5 KiB
1.5 KiB
Policy Engine Development
The policy engine is implemented using Common Expressions Languages. This development document is ONLY for Policy v2, internally represented as Filter V2 for naming consistency.
Enum Constants
Protobuf enums are exposed as integer values in CEL. To improve policy readability, we generate enum constant maps that allow using symbolic names instead of integers.
Example usage in policies:
// Instead of: p.project.type == 1
p.project.type == ProjectSourceType.GITHUB
// Instead of: pkg.ecosystem == 2
pkg.ecosystem == Ecosystem.NPM
How it works:
pkg/analyzer/filterv2/enums.goregisters enums viaRegisteredEnumsby referencing protobuf-generatedType_valuemapspkg/analyzer/filterv2/enumgen/generatesenums_generated.gowith constant maps- Run
go generate ./pkg/analyzer/filterv2/to regenerate after adding new enums
Adding new enums:
-
Add entry to
RegisteredEnumsinpkg/analyzer/filterv2/enums.go:{ Name: "SeverityRisk", Prefix: "RISK_", ValueMap: vulnerabilityv1.Severity_Risk_value, } -
Declare the enum variable in
pkg/analyzer/filterv2/eval.goNewEvaluator():cel.Variable("SeverityRisk", cel.MapType(cel.StringType, cel.IntType)) -
Run
go generate ./pkg/analyzer/filterv2/
The generator automatically strips prefixes (e.g., RISK_CRITICAL → CRITICAL) and keeps enums synchronized with protobuf definitions.