diff --git a/README.md b/README.md index 3f96279ea..8ae2c8e3f 100644 --- a/README.md +++ b/README.md @@ -55,14 +55,14 @@ CEL-Java is available in Maven Central Repository. [Download the JARs here][8] o dev.cel cel - 0.9.0 + 0.10.0 ``` **Gradle** ```gradle -implementation 'dev.cel:cel:0.9.0' +implementation 'dev.cel:cel:0.10.0' ``` Then run this example: diff --git a/WORKSPACE b/WORKSPACE index e5105d43f..04b613205 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -206,16 +206,17 @@ register_toolchains( ### googleapis setup -# as of 12/08/2022 +# as of 06/06/2025 http_archive( name = "com_google_googleapis", - sha256 = "8503282213779a3c230251218c924f385f457a053b4f82ff95d068f71815e558", - strip_prefix = "googleapis-d73a41615b101c34c58b3534c2cc7ee1d89cccb0", + sha256 = "228c134e606a10d9103ff2b22622989bbf13cc2a54ff626ff9ef6c1c7713e3b8", + strip_prefix = "googleapis-1804a603281707a1f0e6fff27851cae115ac3c8b", urls = [ - "https://github.com/googleapis/googleapis/archive/d73a41615b101c34c58b3534c2cc7ee1d89cccb0.tar.gz", + "https://github.com/googleapis/googleapis/archive/1804a603281707a1f0e6fff27851cae115ac3c8b.tar.gz", ], ) + load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language") switched_rules_by_language( @@ -264,16 +265,6 @@ http_archive( ], ) -# required by cel_spec -http_archive( - name = "io_bazel_rules_go", - sha256 = "19ef30b21eae581177e0028f6f4b1f54c66467017be33d211ab6fc81da01ea4d", - urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.38.0/rules_go-v0.38.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.38.0/rules_go-v0.38.0.zip", - ], -) - http_jar( name = "antlr4_jar", sha256 = "eae2dfa119a64327444672aff63e9ec35a20180dc5b8090b7a6ab85125df4d76", diff --git a/common/src/main/java/dev/cel/common/BUILD.bazel b/common/src/main/java/dev/cel/common/BUILD.bazel index 4701df27f..e85c811b4 100644 --- a/common/src/main/java/dev/cel/common/BUILD.bazel +++ b/common/src/main/java/dev/cel/common/BUILD.bazel @@ -96,6 +96,7 @@ java_library( ], deps = [ "//:auto_value", + "//common/annotations", "@maven//:com_google_errorprone_error_prone_annotations", ], ) diff --git a/common/src/main/java/dev/cel/common/CelOptions.java b/common/src/main/java/dev/cel/common/CelOptions.java index 4a5beb2e9..b05b21867 100644 --- a/common/src/main/java/dev/cel/common/CelOptions.java +++ b/common/src/main/java/dev/cel/common/CelOptions.java @@ -17,6 +17,7 @@ import com.google.auto.value.AutoValue; import com.google.errorprone.annotations.CheckReturnValue; import com.google.errorprone.annotations.Immutable; +import dev.cel.common.annotations.Beta; /** * Options to configure how the CEL parser, type-checker, and evaluator behave. @@ -434,6 +435,7 @@ public abstract static class Builder { * *

Warning: This option is experimental. */ + @Beta public abstract Builder enableCelValue(boolean value); /** diff --git a/common/src/main/java/dev/cel/common/annotations/BUILD.bazel b/common/src/main/java/dev/cel/common/annotations/BUILD.bazel index 603a94c9e..6188b7e96 100644 --- a/common/src/main/java/dev/cel/common/annotations/BUILD.bazel +++ b/common/src/main/java/dev/cel/common/annotations/BUILD.bazel @@ -11,6 +11,7 @@ package( # keep sorted ANNOTATION_SOURCES = [ + "Beta.java", "Generated.java", "Internal.java", ] diff --git a/common/src/main/java/dev/cel/common/annotations/Beta.java b/common/src/main/java/dev/cel/common/annotations/Beta.java new file mode 100644 index 000000000..dc2ed809b --- /dev/null +++ b/common/src/main/java/dev/cel/common/annotations/Beta.java @@ -0,0 +1,38 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dev.cel.common.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Indicates a public API that can change at any time, and has no guarantee of API stability and + * backward-compatibility. + * + *

Note: This annotation is intended only for CEL library code. Users should not attach this + * annotation to their own code. + */ +@Retention(RetentionPolicy.CLASS) +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.FIELD, + ElementType.METHOD, + ElementType.PACKAGE, + ElementType.TYPE +}) +public @interface Beta {} diff --git a/common/src/main/java/dev/cel/common/values/BUILD.bazel b/common/src/main/java/dev/cel/common/values/BUILD.bazel index 6b6dfd873..51fa45765 100644 --- a/common/src/main/java/dev/cel/common/values/BUILD.bazel +++ b/common/src/main/java/dev/cel/common/values/BUILD.bazel @@ -308,6 +308,7 @@ java_library( ":base_proto_message_value_provider", ":cel_value", ":proto_message_lite_value", + "//common/annotations", "//common/internal:cel_lite_descriptor_pool", "//common/internal:default_lite_descriptor_pool", "//common/values:base_proto_cel_value_converter", @@ -327,6 +328,7 @@ cel_android_library( ":base_proto_message_value_provider_android", ":cel_value_android", ":proto_message_lite_value_android", + "//common/annotations", "//common/internal:cel_lite_descriptor_pool_android", "//common/internal:default_lite_descriptor_pool_android", "//common/values:base_proto_cel_value_converter_android", diff --git a/common/src/main/java/dev/cel/common/values/ProtoMessageLiteValueProvider.java b/common/src/main/java/dev/cel/common/values/ProtoMessageLiteValueProvider.java index b8f889708..fc0e18c2e 100644 --- a/common/src/main/java/dev/cel/common/values/ProtoMessageLiteValueProvider.java +++ b/common/src/main/java/dev/cel/common/values/ProtoMessageLiteValueProvider.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableSet; import com.google.errorprone.annotations.Immutable; import com.google.protobuf.MessageLite; +import dev.cel.common.annotations.Beta; import dev.cel.common.internal.CelLiteDescriptorPool; import dev.cel.common.internal.DefaultLiteDescriptorPool; import dev.cel.protobuf.CelLiteDescriptor; @@ -30,6 +31,7 @@ * fully qualified name and its fields to populate. */ @Immutable +@Beta public class ProtoMessageLiteValueProvider extends BaseProtoMessageValueProvider { private final CelLiteDescriptorPool descriptorPool; private final ProtoLiteCelValueConverter protoLiteCelValueConverter; diff --git a/policy/src/main/java/dev/cel/policy/BUILD.bazel b/policy/src/main/java/dev/cel/policy/BUILD.bazel index 7c5411cae..e878e1be6 100644 --- a/policy/src/main/java/dev/cel/policy/BUILD.bazel +++ b/policy/src/main/java/dev/cel/policy/BUILD.bazel @@ -4,6 +4,7 @@ package( default_applicable_licenses = ["//:license"], default_visibility = [ "//policy:__pkg__", + "//publish:__pkg__", ], ) diff --git a/protobuf/src/main/java/dev/cel/protobuf/BUILD.bazel b/protobuf/src/main/java/dev/cel/protobuf/BUILD.bazel index 5d60d4bc2..666915526 100644 --- a/protobuf/src/main/java/dev/cel/protobuf/BUILD.bazel +++ b/protobuf/src/main/java/dev/cel/protobuf/BUILD.bazel @@ -2,7 +2,10 @@ load("@rules_java//java:defs.bzl", "java_binary", "java_library") package( default_applicable_licenses = ["//:license"], - default_visibility = ["//protobuf:__pkg__"], + default_visibility = [ + "//protobuf:__pkg__", + "//publish:__pkg__", + ], ) java_binary( diff --git a/publish/BUILD.bazel b/publish/BUILD.bazel index 4ec1e68ab..adf2a80c8 100644 --- a/publish/BUILD.bazel +++ b/publish/BUILD.bazel @@ -13,6 +13,15 @@ RUNTIME_TARGETS = [ "//runtime/src/main/java/dev/cel/runtime:unknown_attributes", ] +LITE_RUNTIME_TARGETS = [ + "//runtime/src/main/java/dev/cel/runtime:lite_runtime_android", + "//runtime/src/main/java/dev/cel/runtime:lite_runtime_factory_android", + "//runtime/src/main/java/dev/cel/runtime:lite_runtime_library_android", + "//common/src/main/java/dev/cel/common:proto_ast_android", # Note: included due to generated protos requiring protolite dependency + "//common/src/main/java/dev/cel/common/values:proto_message_lite_value_provider_android", + "//protobuf/src/main/java/dev/cel/protobuf:cel_lite_descriptor", +] + COMPILER_TARGETS = [ "//parser/src/main/java/dev/cel/parser", "//parser/src/main/java/dev/cel/parser:parser_builder", @@ -47,6 +56,21 @@ OPTIMIZER_TARGETS = [ "//optimizer/src/main/java/dev/cel/optimizer/optimizers:common_subexpression_elimination", ] +POLICY_COMPILER_TARGETS = [ + "//policy/src/main/java/dev/cel/policy:policy", + "//policy/src/main/java/dev/cel/policy:source", + "//policy/src/main/java/dev/cel/policy:validation_exception", + "//policy/src/main/java/dev/cel/policy:parser_factory", + "//policy/src/main/java/dev/cel/policy:yaml_parser", + "//policy/src/main/java/dev/cel/policy:parser", + "//policy/src/main/java/dev/cel/policy:parser_builder", + "//policy/src/main/java/dev/cel/policy:compiler", + "//policy/src/main/java/dev/cel/policy:compiler_builder", + "//policy/src/main/java/dev/cel/policy:compiler_factory", + "//policy/src/main/java/dev/cel/policy:policy_parser_context", + "//policy/src/main/java/dev/cel/policy:compiled_rule", +] + V1ALPHA1_AST_TARGETS = [ "//common/src/main/java/dev/cel/common:proto_v1alpha1_ast", ] @@ -62,7 +86,7 @@ EXTENSION_TARGETS = [ ALL_TARGETS = [ "//bundle/src/main/java/dev/cel/bundle:cel", -] + RUNTIME_TARGETS + COMPILER_TARGETS + EXTENSION_TARGETS + V1ALPHA1_AST_TARGETS + CANONICAL_AST_TARGETS + OPTIMIZER_TARGETS + VALIDATOR_TARGETS +] + RUNTIME_TARGETS + COMPILER_TARGETS + EXTENSION_TARGETS + V1ALPHA1_AST_TARGETS + CANONICAL_AST_TARGETS + OPTIMIZER_TARGETS + VALIDATOR_TARGETS + POLICY_COMPILER_TARGETS # Excluded from the JAR as their source of truth is elsewhere EXCLUDED_TARGETS = [ @@ -178,3 +202,24 @@ java_export( pom_template = ":cel_protobuf_pom", runtime_deps = CANONICAL_AST_TARGETS, ) + +pom_file( + name = "cel_runtime_android_pom", + substitutions = { + "CEL_VERSION": CEL_VERSION, + "CEL_ARTIFACT_ID": "runtime-android", + "PACKAGE_NAME": "CEL Java Runtime for Android", + "PACKAGE_DESC": "Common Expression Language Lite Runtime for Java (Suitable for Android)", + }, + targets = LITE_RUNTIME_TARGETS, + template_file = "pom_template.xml", +) + +java_export( + name = "cel_runtime_android", + deploy_env = EXCLUDED_TARGETS, + javadocopts = JAVA_DOC_OPTIONS, + maven_coordinates = "dev.cel:runtime-android:%s" % CEL_VERSION, + pom_template = ":cel_runtime_android_pom", + runtime_deps = LITE_RUNTIME_TARGETS, +) diff --git a/publish/cel_version.bzl b/publish/cel_version.bzl index 1847a1923..93bc0d3c1 100644 --- a/publish/cel_version.bzl +++ b/publish/cel_version.bzl @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. """Maven artifact version for CEL.""" -CEL_VERSION = "0.9.1" +CEL_VERSION = "0.10.0" diff --git a/publish/publish.sh b/publish/publish.sh index 9a327cb08..888bf894e 100755 --- a/publish/publish.sh +++ b/publish/publish.sh @@ -25,7 +25,7 @@ # 2. You will need to enter the key's password. The prompt appears in GUI, not in terminal. The publish operation will eventually timeout if the password is not entered. -ALL_TARGETS=("//publish:cel.publish" "//publish:cel_compiler.publish" "//publish:cel_runtime.publish" "//publish:cel_v1alpha1.publish" "//publish:cel_protobuf.publish") +ALL_TARGETS=("//publish:cel.publish" "//publish:cel_compiler.publish" "//publish:cel_runtime.publish" "//publish:cel_v1alpha1.publish" "//publish:cel_protobuf.publish" "//publish:cel_runtime_android.publish") JDK8_FLAGS="--java_language_version=8 --java_runtime_version=8" function publish_maven_remote() { diff --git a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel index 754b360ae..46cf55921 100644 --- a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel +++ b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel @@ -648,14 +648,8 @@ cel_android_library( deps = [ ":function_binding_android", ":runtime_equality_android", - ":runtime_helpers_android", - "//common:error_codes", "//common:options", - "//common:runtime_exception", "//common/annotations", - "//common/internal:comparison_functions_android", - "//common/internal:proto_time_utils_android", - "//common/internal:safe_string_formatter", "//runtime/standard:add_android", "//runtime/standard:bool_android", "//runtime/standard:bytes_android", @@ -831,6 +825,7 @@ java_library( "//:auto_value", "//common:cel_ast", "//common:options", + "//common/annotations", "//common/values:cel_value_provider", "//runtime/standard:standard_function", "@maven//:com_google_code_findbugs_annotations", @@ -912,6 +907,7 @@ java_library( deps = [ ":lite_runtime", ":lite_runtime_impl", + "//common/annotations", ], ) @@ -925,6 +921,7 @@ cel_android_library( deps = [ ":lite_runtime_android", ":lite_runtime_impl_android", + "//common/annotations", ], ) @@ -1085,10 +1082,10 @@ cel_android_library( ":evaluation_exception", ":function_binding_android", ":function_resolver", - ":standard_functions_android", "//:auto_value", "//common:cel_ast_android", "//common:options", + "//common/annotations", "//common/values:cel_value_provider_android", "//runtime/standard:standard_function_android", "@maven//:com_google_code_findbugs_annotations", diff --git a/runtime/src/main/java/dev/cel/runtime/CelLiteRuntime.java b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntime.java index 0603db958..0652a7a63 100644 --- a/runtime/src/main/java/dev/cel/runtime/CelLiteRuntime.java +++ b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntime.java @@ -17,6 +17,7 @@ import com.google.errorprone.annotations.Immutable; import javax.annotation.concurrent.ThreadSafe; import dev.cel.common.CelAbstractSyntaxTree; +import dev.cel.common.annotations.Beta; import java.util.Map; /** @@ -27,6 +28,7 @@ * the protobuf, making it suitable for use in Android. */ @ThreadSafe +@Beta public interface CelLiteRuntime { Program createProgram(CelAbstractSyntaxTree ast) throws CelEvaluationException; diff --git a/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeFactory.java b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeFactory.java index bbca39ce8..260a62980 100644 --- a/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeFactory.java +++ b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeFactory.java @@ -14,7 +14,10 @@ package dev.cel.runtime; +import dev.cel.common.annotations.Beta; + /** Factory class for producing a lite runtime environment. */ +@Beta public final class CelLiteRuntimeFactory { /** Create a new builder for constructing a {@code CelLiteRuntime} instance. */