mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat(azure_policy): test runner, compiler fixes, and example program (#700)
Adds the YAML test runner that exercises the companion test data PRs, plus several compiler fixes surfaced during testing: - Removed parameter register caching that produced wrong results inside short-circuiting allOf/anyOf blocks; added literal-index caching for parameter defaults to avoid repeated O(n) literal-table scans - Simplified cross-resource effect details to only emit roleDefinitionIds and type (deployment templates are not evaluated for compliance) - Replaced guid/uniqueString builtins with clear "unsupported" errors - Normalized datetime output to ISO 8601 with Z suffix - Added azure_policy parser MAX_COL constant (8192) for long template expressions, keeping the global DEFAULT_MAX_COL at 1024 - Added rvm to azure_policy feature dependencies since the compiler targets RVM bytecode Also restructures the example binary into examples/regorus/ with new azure-policy-eval and azure-policy-aliases subcommands, adds C# alias normalization tests, and documents Azure Policy support in the README. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
7f42115b63
commit
4c92fb4d92
@@ -43,6 +43,13 @@ use super::expr::ExprParser;
|
||||
|
||||
use self::core::Parser;
|
||||
|
||||
/// Column-width limit for Azure Policy definitions.
|
||||
///
|
||||
/// Azure Policy definitions are often serialized as single-line JSON with
|
||||
/// deeply nested template expressions, requiring a much higher limit than
|
||||
/// the standard Rego default (1024).
|
||||
pub const MAX_COL: u32 = Parser::MAX_COL;
|
||||
|
||||
// ============================================================================
|
||||
// Public API
|
||||
// ============================================================================
|
||||
@@ -62,12 +69,14 @@ pub fn parse_policy_rule(source: &Source) -> Result<PolicyRule, ParseError> {
|
||||
parse_policy_rule_with_max_col(source, None)
|
||||
}
|
||||
|
||||
/// Like [`parse_policy_rule`] but with an optional column-width override.
|
||||
/// Like [`parse_policy_rule`] but with an explicit column-width override.
|
||||
///
|
||||
/// When `max_col` is `None`, uses [`MAX_COL`] (the Azure Policy default).
|
||||
pub fn parse_policy_rule_with_max_col(
|
||||
source: &Source,
|
||||
max_col: Option<NonZeroU32>,
|
||||
) -> Result<PolicyRule, ParseError> {
|
||||
let mut parser = Parser::new_with_max_col(source, max_col)?;
|
||||
let mut parser = Parser::new_with_max_col(source, max_col.or(NonZeroU32::new(MAX_COL)))?;
|
||||
let rule = parser.parse_policy_rule()?;
|
||||
|
||||
if parser.tok.0 != TokenKind::Eof {
|
||||
@@ -92,12 +101,14 @@ pub fn parse_policy_definition(source: &Source) -> Result<PolicyDefinition, Pars
|
||||
parse_policy_definition_with_max_col(source, None)
|
||||
}
|
||||
|
||||
/// Like [`parse_policy_definition`] but with an optional column-width override.
|
||||
/// Like [`parse_policy_definition`] but with an explicit column-width override.
|
||||
///
|
||||
/// When `max_col` is `None`, uses [`MAX_COL`] (the Azure Policy default).
|
||||
pub fn parse_policy_definition_with_max_col(
|
||||
source: &Source,
|
||||
max_col: Option<NonZeroU32>,
|
||||
) -> Result<PolicyDefinition, ParseError> {
|
||||
let mut parser = Parser::new_with_max_col(source, max_col)?;
|
||||
let mut parser = Parser::new_with_max_col(source, max_col.or(NonZeroU32::new(MAX_COL)))?;
|
||||
let defn = parser.parse_policy_definition()?;
|
||||
|
||||
if parser.tok.0 != TokenKind::Eof {
|
||||
|
||||
Reference in New Issue
Block a user