Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
common --enable_bzlmod
# Use built-in protoc
common --incompatible_enable_proto_toolchain_resolution --@com_google_protobuf//bazel/toolchains:prefer_prebuilt_protoc

build --java_runtime_version=remotejdk_11
build --java_language_version=11


# Hide Java 8 deprecation warnings.
common --javacopt=-Xlint:-options

# Remove flag once https://github.com/google/cel-spec/issues/508 and rules_jvm_external is fixed.
common --incompatible_autoload_externally=proto_library,cc_proto_library,java_proto_library,java_test

8 changes: 7 additions & 1 deletion .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ jobs:
disk-cache: ${{ github.workflow }}
# Share repository cache between workflows.
repository-cache: true
# Never write to the cache, strictly read-only
cache-save: false
- name: Unwanted Dependencies
run: .github/workflows/unwanted_deps.sh
- name: Cross-artifact Duplicate Classes Check
Expand All @@ -56,6 +58,8 @@ jobs:
disk-cache: ${{ github.workflow }}
# Share repository cache between workflows.
repository-cache: true
# Prevent PRs from polluting cache
cache-save: ${{ github.event_name != 'pull_request' }}
- name: Bazel Output Version
run: bazelisk --version
- name: Java 8 Build
Expand Down Expand Up @@ -91,12 +95,14 @@ jobs:
disk-cache: ${{ github.workflow }}
# Share repository cache between workflows.
repository-cache: true
# Never write to the cache, strictly read-only
cache-save: false
- name: Verify Version Consistency
if: steps.changed_file.outputs.any_changed == 'true'
run: |
CEL_VERSION=$(grep 'CEL_VERSION =' publish/cel_version.bzl | cut -d '"' -f 2)

MODULE_VERSION=$(grep 'dev.cel:cel' MODULE.bazel | cut -d '"' -f 2 | cut -d ':' -f 3)
MODULE_VERSION=$(grep 'CEL_VERSION =' MODULE.bazel | cut -d '"' -f 2)

if [ -z "$CEL_VERSION" ] || [ -z "$MODULE_VERSION" ]; then
echo "❌ Error: Could not extract one or both version strings."
Expand Down
18 changes: 12 additions & 6 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@ module(
name = "cel_java",
)

bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "bazel_skylib", version = "1.8.2")
bazel_dep(name = "rules_jvm_external", version = "6.9")
bazel_dep(name = "protobuf", version = "29.3", repo_name = "com_google_protobuf") # see https://github.com/bazelbuild/rules_android/issues/373
bazel_dep(name = "protobuf", version = "33.4", repo_name = "com_google_protobuf") # see https://github.com/bazelbuild/rules_android/issues/373
bazel_dep(name = "googleapis", version = "0.0.0-20241220-5e258e33.bcr.1", repo_name = "com_google_googleapis")
bazel_dep(name = "rules_pkg", version = "1.0.1")
bazel_dep(name = "rules_license", version = "1.0.0")
bazel_dep(name = "rules_proto", version = "7.1.0")
bazel_dep(name = "rules_java", version = "8.12.0")
bazel_dep(name = "rules_java", version = "9.3.0")
bazel_dep(name = "rules_android", version = "0.7.1")
bazel_dep(name = "rules_shell", version = "0.5.1")
bazel_dep(name = "rules_shell", version = "0.6.1")
bazel_dep(name = "googleapis-java", version = "1.0.0")
bazel_dep(name = "cel-spec", version = "0.24.0", repo_name = "cel_spec")

Expand All @@ -39,7 +39,9 @@ GUAVA_VERSION = "33.5.0"

TRUTH_VERSION = "1.4.4"

PROTOBUF_JAVA_VERSION = "4.33.4"
PROTOBUF_JAVA_VERSION = "4.33.5"

CEL_VERSION = "0.12.0-SNAPSHOT"

# Compile only artifacts
[
Expand Down Expand Up @@ -114,7 +116,11 @@ maven.install(

maven.install(
name = "maven_conformance",
artifacts = ["dev.cel:cel:0.11.1"],
artifacts = [
"dev.cel:cel:" + CEL_VERSION,
"dev.cel:compiler:" + CEL_VERSION,
"dev.cel:runtime:" + CEL_VERSION,
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
Expand Down
8 changes: 7 additions & 1 deletion conformance/src/test/java/dev/cel/conformance/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,13 @@ java_library(
],
)

MAVEN_JAR_DEPS = ["@maven_conformance//:dev_cel_cel"]
MAVEN_JAR_DEPS = [
"@maven_conformance//:dev_cel_compiler",
"@maven_conformance//:dev_cel_common",
"@maven_conformance//:dev_cel_runtime",
"@maven_conformance//:dev_cel_protobuf",
"@maven_conformance//:dev_cel_cel",
]

java_library(
name = "run_maven_jar",
Expand Down
44 changes: 44 additions & 0 deletions conformance/src/test/java/dev/cel/maven/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
load("@rules_java//java:defs.bzl", "java_library", "java_test")

package(default_applicable_licenses = [
"//:license",
])

MAVEN_COMPILER_JAR_DEPS = [
"@maven_conformance//:dev_cel_common",
"@maven_conformance//:dev_cel_compiler",
]

MAVEN_RUNTIME_JAR_DEPS = [
"@maven_conformance//:dev_cel_common",
"@maven_conformance//:dev_cel_protobuf",
"@maven_conformance//:dev_cel_runtime",
]

java_test(
name = "compiler_artifact_test",
srcs = ["CompilerArtifactTest.java"],
test_class = "dev.cel.maven.CompilerArtifactTest",
deps =
MAVEN_COMPILER_JAR_DEPS + [
"//:java_truth",
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
"@maven//:com_google_testparameterinjector_test_parameter_injector",
"@maven//:junit_junit",
],
)

java_test(
name = "runtime_artifact_test",
srcs = ["RuntimeArtifactTest.java"],
test_class = "dev.cel.maven.RuntimeArtifactTest",
deps =
MAVEN_RUNTIME_JAR_DEPS + [
"//:java_truth",
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:com_google_testparameterinjector_test_parameter_injector",
"@maven//:junit_junit",
],
)
85 changes: 85 additions & 0 deletions conformance/src/test/java/dev/cel/maven/CompilerArtifactTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package dev.cel.maven;

import static com.google.common.truth.Truth.assertThat;
import static dev.cel.common.CelFunctionDecl.newFunctionDeclaration;
import static dev.cel.common.CelOverloadDecl.newGlobalOverload;
import static org.junit.Assert.assertThrows;

import com.google.testing.junit.testparameterinjector.TestParameterInjector;
import dev.cel.checker.CelChecker;
import dev.cel.common.CelAbstractSyntaxTree;
import dev.cel.common.CelContainer;
import dev.cel.common.CelOptions;
import dev.cel.common.CelValidationException;
import dev.cel.common.CelValidationResult;
import dev.cel.common.ast.CelConstant;
import dev.cel.common.ast.CelExpr;
import dev.cel.common.types.ProtoMessageTypeProvider;
import dev.cel.common.types.SimpleType;
import dev.cel.common.types.StructTypeReference;
import dev.cel.compiler.CelCompiler;
import dev.cel.compiler.CelCompilerFactory;
import dev.cel.expr.conformance.proto3.TestAllTypes;
import dev.cel.parser.CelParser;
import dev.cel.parser.CelParserFactory;
import dev.cel.parser.CelStandardMacro;
import dev.cel.parser.CelUnparser;
import dev.cel.parser.CelUnparserFactory;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(TestParameterInjector.class)
public class CompilerArtifactTest {

@Test
public void parse() throws Exception {
CelParser parser = CelParserFactory.standardCelParserBuilder().build();
CelUnparser unparser = CelUnparserFactory.newUnparser();

CelAbstractSyntaxTree ast = parser.parse("'Hello World'").getAst();

assertThat(ast.getExpr()).isEqualTo(CelExpr.ofConstant(1L, CelConstant.ofValue("Hello World")));
assertThat(unparser.unparse(ast)).isEqualTo("\"Hello World\"");
}

@Test
public void typeCheck() throws Exception {
CelParser parser = CelParserFactory.standardCelParserBuilder().build();
CelChecker checker = CelCompilerFactory.standardCelCheckerBuilder().build();

CelAbstractSyntaxTree ast = checker.check(parser.parse("'Hello World'").getAst()).getAst();

assertThat(ast.getResultType()).isEqualTo(SimpleType.STRING);
}

@Test
public void compile() throws Exception {
CelCompiler compiler = CelCompilerFactory
.standardCelCompilerBuilder()
.addFunctionDeclarations(
newFunctionDeclaration("getThree", newGlobalOverload("getThree_overload", SimpleType.INT))
)
.setOptions(CelOptions.DEFAULT)
.setStandardMacros(CelStandardMacro.STANDARD_MACROS)
.setTypeProvider(ProtoMessageTypeProvider.newBuilder().addFileDescriptors(TestAllTypes.getDescriptor().getFile()).build())
.setContainer(CelContainer.ofName("cel.expr.conformance.proto3"))
.addVar("msg", StructTypeReference.create(TestAllTypes.getDescriptor().getFullName()))
.build();
CelUnparser unparser = CelUnparserFactory.newUnparser();

CelAbstractSyntaxTree ast = compiler.compile("msg == TestAllTypes{} && 3 == getThree()").getAst();

assertThat(unparser.unparse(ast)).isEqualTo("msg == cel.expr.conformance.proto3.TestAllTypes{} && 3 == getThree()");
assertThat(ast.getResultType()).isEqualTo(SimpleType.BOOL);
}

@Test
public void compile_error() {
CelCompiler compiler = CelCompilerFactory.standardCelCompilerBuilder().build();

CelValidationResult result = compiler.compile("'foo' + 1");

assertThat(result.hasError()).isTrue();
assertThat(assertThrows(CelValidationException.class, result::getAst)).hasMessageThat().contains("found no matching overload for '_+_' applied to '(string, int)'");
}
}
Loading
Loading