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
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. */