You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add support for embedding custom Rego rules (library and CLI) (#355)
* Add support for embedding custom Rego rules in Poutine library
This enhancement allows library consumers (like pkg-supply and spicy-poutine) to embed their own custom Rego rules directly into their binaries alongside Poutine's built-in rules, creating fully self-contained deployments without filesystem dependencies.
Changes:
- Add NewOpaWithEmbeddedRules() constructor that accepts embed.FS containing custom rules
- Add AddEmbeddedRules() method for adding rules to existing Opa instances
- Modify Compile() to load custom embedded rules alongside built-in rules
- Custom rules respect skip and allowed filters like filesystem-based rules
- Fully backward compatible with existing NewOpa() usage
Usage example:
//go:embed rules/*.rego
var CustomRules embed.FS
opa, err := poutineOpa.NewOpaWithEmbeddedRules(ctx, config, CustomRules, "rules")
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Fix wrapcheck lint issues in custom embedded rules loading
Wrap errors from embed.FS.ReadFile() and fs.WalkDir() with context
to satisfy wrapcheck linter for new code.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Add CLI support for custom embedded rules and remove AddEmbeddedRules
- Remove AddEmbeddedRules() method (no clear use case)
- Add CustomEmbeddedRules and CustomEmbeddedRulesRoot exported variables to cmd package
- Update newOpa() and newOpaWithConfig() to use NewOpaWithEmbeddedRules when set
- CLI extensions can now set poutineCmd.CustomEmbeddedRules before Execute()
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Remove customRoot parameter - always use "." as root
The customRoot parameter was unnecessary implementation detail.
Custom embedded rules are now always loaded from "." root.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Simplify custom embedded rules prefix to "custom/"
Remove unnecessary index from prefix - just use "custom/" like
"poutine/opa/" for built-in and "include/" for filesystem rules.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
---------
Co-authored-by: Claude <[email protected]>
0 commit comments