Skip to content

Commit 16cf13d

Browse files
committed
Verifier REPL
1 parent 310d96f commit 16cf13d

11 files changed

Lines changed: 1361 additions & 0 deletions

File tree

MODULE.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ maven.install(
9595
"info.picocli:picocli:4.7.7",
9696
"org.antlr:antlr4-runtime:4.13.2",
9797
"org.freemarker:freemarker:2.3.34",
98+
# CLI tool only dependencies (must never be referenced in core CEL-Java libraries)
99+
"org.jline:jline-reader:3.26.1",
100+
"org.jline:jline-terminal:3.26.1",
98101
"org.jspecify:jspecify:1.0.0",
99102
"org.threeten:threeten-extra:1.8.0",
100103
"org.yaml:snakeyaml:2.5",

verifier/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,9 @@ java_library(
5454
visibility = [":verifier_internal"],
5555
exports = ["//verifier/src/main/java/dev/cel/verifier:z3_impl"],
5656
)
57+
58+
java_library(
59+
name = "tools",
60+
exports = ["//verifier/src/main/java/dev/cel/verifier/tools:cel_verifier_tool"],
61+
)
62+

verifier/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,33 @@ The following features are planned for future releases:
7777

7878
---
7979

80+
## CLI & Interactive REPL Tool
81+
82+
The CEL Java Verifier comes with a command-line tool (`cel-verifier`) and an interactive REPL shell for testing satisfiability, validity, equivalence, and policy invariants without writing Java code.
83+
84+
### Running via Bazel
85+
86+
```bash
87+
# Run CLI verification commands
88+
bazel run //verifier/src/main/java/dev/cel/verifier/tools:cel_verifier_tool -- check-sat --expr "role == 'editor' && port > 1024" --var "role:string" --var "port:int"
89+
90+
# Run with JSON output format for CI/CD integrations
91+
bazel run //verifier/src/main/java/dev/cel/verifier/tools:cel_verifier_tool -- check-sat --expr "role == 'editor'" --var "role:string" --output_format=json
92+
93+
# Launch interactive REPL shell
94+
bazel run //verifier/src/main/java/dev/cel/verifier/tools:cel_verifier_tool -- repl
95+
```
96+
97+
### CLI Commands
98+
99+
* `check-sat --expr "..." --var "name:type"`: Verifies satisfiability of an expression and prints witness inputs.
100+
* `check-valid --expr "..." --var "name:type"`: Proves validity (`isAlwaysTrue`) and prints counterexample if invalid.
101+
* `verify-equiv --expr1 "..." --expr2 "..." --var "name:type"`: Proves logical equivalence between two CEL expressions.
102+
* `verify-policy --file policy.yaml`: Verifies custom policy invariants defined in a policy YAML file.
103+
* `repl`: Enters interactive verification shell. In the REPL, use `equiv <expr1> <=> <expr2>` to test expression equivalence.
104+
105+
---
106+
80107
## Usage
81108

82109
### 1. AST Equivalence Verification
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
load("@rules_java//java:defs.bzl", "java_binary", "java_library")
2+
3+
package(
4+
default_applicable_licenses = [
5+
"//:license",
6+
],
7+
default_visibility = [
8+
"//verifier:__subpackages__",
9+
],
10+
)
11+
12+
java_library(
13+
name = "tools_lib",
14+
srcs = [
15+
"CelVerifierRepl.java",
16+
"CelVerifierTool.java",
17+
"CelVerifierToolCore.java",
18+
"FormatUtils.java",
19+
"VerificationOptions.java",
20+
],
21+
deps = [
22+
"//bundle:cel",
23+
"//common:cel_ast",
24+
"//common:compiler_common",
25+
"//common/types",
26+
"//common/types:cel_types",
27+
"//common/types:type_providers",
28+
"//compiler",
29+
"//compiler:compiler_builder",
30+
"//extensions",
31+
"//parser:macro",
32+
"//policy",
33+
"//policy:compiler",
34+
"//policy:compiler_factory",
35+
"//policy:parser",
36+
"//policy:parser_factory",
37+
"//policy:validation_exception",
38+
"//verifier",
39+
"//verifier:policy_verifier",
40+
"//verifier:policy_verifier_factory",
41+
"//verifier:verifier_factory",
42+
"@maven//:com_google_guava_guava",
43+
"@maven//:info_picocli_picocli",
44+
"@maven//:org_jline_jline_reader",
45+
"@maven//:org_jline_jline_terminal",
46+
],
47+
)
48+
49+
java_binary(
50+
name = "cel_verifier_tool",
51+
main_class = "dev.cel.verifier.tools.CelVerifierTool",
52+
runtime_deps = [
53+
":tools_lib",
54+
],
55+
)

0 commit comments

Comments
 (0)