From 966024da77852dc0fcde4f50b800ed110bb71f3d Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Thu, 10 Sep 2026 22:32:25 +0500 Subject: [PATCH 1/4] Establish curated BUILD API facade --- flutter/BUILD.bazel | 3 ++ flutter/defs.bzl | 57 +++++++++++++++++++++ tests/consumer/BUILD.bazel | 39 +++++++++++--- tests/consumer/external_app/app/BUILD.bazel | 2 +- tests/consumer/standard_layout/BUILD.bazel | 2 +- 5 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 flutter/BUILD.bazel create mode 100644 flutter/defs.bzl diff --git a/flutter/BUILD.bazel b/flutter/BUILD.bazel new file mode 100644 index 0000000..0ca983a --- /dev/null +++ b/flutter/BUILD.bazel @@ -0,0 +1,3 @@ +package(default_visibility = ["//visibility:public"]) + +exports_files(["defs.bzl"]) diff --git a/flutter/defs.bzl b/flutter/defs.bzl new file mode 100644 index 0000000..d51538a --- /dev/null +++ b/flutter/defs.bzl @@ -0,0 +1,57 @@ +"""The supported BUILD-file API for Flutter Consumer Modules. + +Consumer BUILD files load this one entrypoint rather than implementation-oriented +packages under ``//tools/flutter``. The implementation delegation is temporary: +the public names below are the complete contract exercised by the consumer API +fixture and can move without another consumer migration. +""" + +load("//tools/flutter:abis.bzl", _ABIS = "ABIS") +load( + "//tools/flutter:android.bzl", + _android_native_lib_jar = "android_native_lib_jar", + _flutter_android_binary = "flutter_android_binary", + _flutter_android_libs = "flutter_android_libs", + _jni_lib_jar = "jni_lib_jar", + _strip_native_libs = "strip_native_libs", +) +load( + "//tools/flutter:defs.bzl", + _dart_aot_elf = "dart_aot_elf", + _dart_kernel = "dart_kernel", + _flutter_aot_library = "flutter_aot_library", + _flutter_app = "flutter_app", + _flutter_assets = "flutter_assets", + _pub_path_deps_check = "pub_path_deps_check", + _pub_plugins_check = "pub_plugins_check", +) +load( + "//tools/flutter:embedding.bzl", + _flutter_embedding_library = "flutter_embedding_library", +) +load("//tools/flutter:pubspec.bzl", _flutter_pubspec = "flutter_pubspec") +load( + "//tools/flutter:recipe.bzl", + _flutter_native_contribution = "flutter_native_contribution", + _flutter_native_libs = "flutter_native_libs", +) + +# Explicit assignments make the curated names exports of this module. Merely +# importing names with load() does not re-export them to downstream BUILD files. +ABIS = _ABIS +android_native_lib_jar = _android_native_lib_jar +dart_aot_elf = _dart_aot_elf +dart_kernel = _dart_kernel +flutter_android_binary = _flutter_android_binary +flutter_android_libs = _flutter_android_libs +flutter_aot_library = _flutter_aot_library +flutter_app = _flutter_app +flutter_assets = _flutter_assets +flutter_embedding_library = _flutter_embedding_library +flutter_native_contribution = _flutter_native_contribution +flutter_native_libs = _flutter_native_libs +flutter_pubspec = _flutter_pubspec +jni_lib_jar = _jni_lib_jar +pub_path_deps_check = _pub_path_deps_check +pub_plugins_check = _pub_plugins_check +strip_native_libs = _strip_native_libs diff --git a/tests/consumer/BUILD.bazel b/tests/consumer/BUILD.bazel index 645d911..82af4cf 100644 --- a/tests/consumer/BUILD.bazel +++ b/tests/consumer/BUILD.bazel @@ -4,13 +4,38 @@ This is an API test, not a behaviour test. """ load("@bazel_skylib//rules:build_test.bzl", "build_test") -load("@rules_flutter//tools/flutter:abis.bzl", "ABIS", "aot_gen_snapshot", "aot_target_compatible_with", "plugin_repo_target") -load("@rules_flutter//tools/flutter:android.bzl", "android_native_lib_jar", "flutter_android_binary", "flutter_android_libs", "flutter_assets_dir", "jni_lib_jar", "strip_native_libs") -load("@rules_flutter//tools/flutter:bundle.bzl", "CLASSES", "NATIVE_LIB", "flutter_bundle_contribution") -load("@rules_flutter//tools/flutter:defs.bzl", "dart_aot_elf", "dart_kernel", "flutter_aot_library", "flutter_assets", "pub_path_deps_check", "pub_plugins_check") -load("@rules_flutter//tools/flutter:embedding.bzl", "flutter_embedding_library") -load("@rules_flutter//tools/flutter:pubspec.bzl", "flutter_pubspec") -load("@rules_flutter//tools/flutter:recipe.bzl", "flutter_native_contribution", "flutter_native_libs") +load( + "@rules_flutter//flutter:defs.bzl", + "ABIS", + "android_native_lib_jar", + "dart_aot_elf", + "dart_kernel", + "flutter_android_binary", + "flutter_android_libs", + "flutter_aot_library", + "flutter_assets", + "flutter_embedding_library", + "flutter_native_contribution", + "flutter_native_libs", + "flutter_pubspec", + "jni_lib_jar", + "pub_path_deps_check", + "pub_plugins_check", + "strip_native_libs", +) +load( + "@rules_flutter//tools/flutter:abis.bzl", + "aot_gen_snapshot", + "aot_target_compatible_with", + "plugin_repo_target", +) +load("@rules_flutter//tools/flutter:android.bzl", "flutter_assets_dir") +load( + "@rules_flutter//tools/flutter:bundle.bzl", + "CLASSES", + "NATIVE_LIB", + "flutter_bundle_contribution", +) load("@rules_java//java:defs.bzl", "java_import") load(":assertions.bzl", "expect_equal", "expect_label_equal") diff --git a/tests/consumer/external_app/app/BUILD.bazel b/tests/consumer/external_app/app/BUILD.bazel index 58a5ce2..fd43baf 100644 --- a/tests/consumer/external_app/app/BUILD.bazel +++ b/tests/consumer/external_app/app/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_flutter//tools/flutter:defs.bzl", "flutter_app") +load("@rules_flutter//flutter:defs.bzl", "flutter_app") package(default_visibility = ["//visibility:public"]) diff --git a/tests/consumer/standard_layout/BUILD.bazel b/tests/consumer/standard_layout/BUILD.bazel index f2feebf..4b774a0 100644 --- a/tests/consumer/standard_layout/BUILD.bazel +++ b/tests/consumer/standard_layout/BUILD.bazel @@ -13,7 +13,7 @@ # package pairs that with `plugins = None`, proving the complete shape creates no # @flutter_plugins label and defaults to no federated Dart registrant. -load("@rules_flutter//tools/flutter:defs.bzl", "flutter_app") +load("@rules_flutter//flutter:defs.bzl", "flutter_app") package(default_visibility = ["//visibility:public"]) From 3f5d6b5dc44a2d36db99f5350dddfa2752b91132 Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Thu, 10 Sep 2026 22:50:21 +0500 Subject: [PATCH 2/4] promotion: format module declarations --- examples/demo_app/MODULE.bazel | 2 +- examples/local_plugin/MODULE.bazel | 2 +- examples/no_plugins/MODULE.bazel | 2 +- examples/pub_plugins/MODULE.bazel | 2 +- tests/consumer/MODULE.bazel | 2 +- tests/consumer/external_app/MODULE.bazel | 2 +- tests/core_consumer/MODULE.bazel | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/demo_app/MODULE.bazel b/examples/demo_app/MODULE.bazel index 83222b9..0038b68 100644 --- a/examples/demo_app/MODULE.bazel +++ b/examples/demo_app/MODULE.bazel @@ -4,7 +4,7 @@ module( ) # Uses the local checkout because rules_flutter is not published. -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") local_path_override( module_name = "sameri11_rules_flutter", path = "../..", diff --git a/examples/local_plugin/MODULE.bazel b/examples/local_plugin/MODULE.bazel index cb409ab..3f31b76 100644 --- a/examples/local_plugin/MODULE.bazel +++ b/examples/local_plugin/MODULE.bazel @@ -5,7 +5,7 @@ module( # Monorepo app with a local path plugin. It exercises non-root metadata and # plugin paths outside the pub cache. -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") local_path_override( module_name = "sameri11_rules_flutter", path = "../..", diff --git a/examples/no_plugins/MODULE.bazel b/examples/no_plugins/MODULE.bazel index 5cd6127..262ca56 100644 --- a/examples/no_plugins/MODULE.bazel +++ b/examples/no_plugins/MODULE.bazel @@ -5,7 +5,7 @@ module( # Minimal plugin-free module: no plugins.project(), generated segment, or # @flutter_plugins repository. -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") local_path_override( module_name = "sameri11_rules_flutter", path = "../..", diff --git a/examples/pub_plugins/MODULE.bazel b/examples/pub_plugins/MODULE.bazel index 33e5991..bd09c70 100644 --- a/examples/pub_plugins/MODULE.bazel +++ b/examples/pub_plugins/MODULE.bazel @@ -4,7 +4,7 @@ module( ) # Copyable flat app: pub plugins, one ABI, no recipes or path dependencies. -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") local_path_override( module_name = "sameri11_rules_flutter", path = "../..", diff --git a/tests/consumer/MODULE.bazel b/tests/consumer/MODULE.bazel index 67fc758..44bed83 100644 --- a/tests/consumer/MODULE.bazel +++ b/tests/consumer/MODULE.bazel @@ -3,7 +3,7 @@ module( version = "0.0.1", ) -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") bazel_dep(name = "bazel_skylib", version = "1.8.2") local_path_override( diff --git a/tests/consumer/external_app/MODULE.bazel b/tests/consumer/external_app/MODULE.bazel index e2e6961..2220e7a 100644 --- a/tests/consumer/external_app/MODULE.bazel +++ b/tests/consumer/external_app/MODULE.bazel @@ -3,7 +3,7 @@ module( version = "0.0.1", ) -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") # Report and ignore unmatched dependency recipes. plugins = use_extension("@rules_flutter//tools/flutter:plugins.bzl", "flutter_plugins_ext") diff --git a/tests/core_consumer/MODULE.bazel b/tests/core_consumer/MODULE.bazel index bc7e573..8809683 100644 --- a/tests/core_consumer/MODULE.bazel +++ b/tests/core_consumer/MODULE.bazel @@ -3,7 +3,7 @@ module( version = "0.0.1", ) -bazel_dep(name = "sameri11_rules_flutter", repo_name = "rules_flutter", version = "0.1.0") +bazel_dep(name = "sameri11_rules_flutter", version = "0.1.0", repo_name = "rules_flutter") local_path_override( module_name = "sameri11_rules_flutter", path = "../..", From e9a3af81b768466499fbdc62bb00da26cfbbeedf Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Thu, 10 Sep 2026 22:50:21 +0500 Subject: [PATCH 3/4] promotion: curate BUILD API contract --- flutter/defs.bzl | 2 -- tests/consumer/BUILD.bazel | 12 +++++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/flutter/defs.bzl b/flutter/defs.bzl index d51538a..dd4a19b 100644 --- a/flutter/defs.bzl +++ b/flutter/defs.bzl @@ -17,7 +17,6 @@ load( ) load( "//tools/flutter:defs.bzl", - _dart_aot_elf = "dart_aot_elf", _dart_kernel = "dart_kernel", _flutter_aot_library = "flutter_aot_library", _flutter_app = "flutter_app", @@ -40,7 +39,6 @@ load( # importing names with load() does not re-export them to downstream BUILD files. ABIS = _ABIS android_native_lib_jar = _android_native_lib_jar -dart_aot_elf = _dart_aot_elf dart_kernel = _dart_kernel flutter_android_binary = _flutter_android_binary flutter_android_libs = _flutter_android_libs diff --git a/tests/consumer/BUILD.bazel b/tests/consumer/BUILD.bazel index 82af4cf..8092a25 100644 --- a/tests/consumer/BUILD.bazel +++ b/tests/consumer/BUILD.bazel @@ -1,6 +1,8 @@ -"""Every public symbol, instantiated the way a consumer would. +"""The supported BUILD API, with deliberate coverage of macro internals. -This is an API test, not a behaviour test. +All supported symbols load from @rules_flutter//flutter:defs.bzl. The specialist +loads below exercise helpers that consumers do not write and are excluded from +the supported API. """ load("@bazel_skylib//rules:build_test.bzl", "build_test") @@ -8,7 +10,6 @@ load( "@rules_flutter//flutter:defs.bzl", "ABIS", "android_native_lib_jar", - "dart_aot_elf", "dart_kernel", "flutter_android_binary", "flutter_android_libs", @@ -36,6 +37,11 @@ load( "NATIVE_LIB", "flutter_bundle_contribution", ) + +# +# These specialist loads are deliberate macro-internal coverage only. Their +# symbols are not part of the supported Consumer Module API. +load("@rules_flutter//tools/flutter:defs.bzl", "dart_aot_elf") load("@rules_java//java:defs.bzl", "java_import") load(":assertions.bzl", "expect_equal", "expect_label_equal") From bfb6945c8102658d8fb19636b0bc9e271994c0cd Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Sat, 12 Sep 2026 19:59:46 +0500 Subject: [PATCH 4/4] concise comments --- flutter/defs.bzl | 12 +++++------- tests/consumer/BUILD.bazel | 11 ++++------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/flutter/defs.bzl b/flutter/defs.bzl index dd4a19b..39e73b2 100644 --- a/flutter/defs.bzl +++ b/flutter/defs.bzl @@ -1,9 +1,8 @@ -"""The supported BUILD-file API for Flutter Consumer Modules. +"""Supported BUILD-file API for Flutter Consumer Modules. -Consumer BUILD files load this one entrypoint rather than implementation-oriented -packages under ``//tools/flutter``. The implementation delegation is temporary: -the public names below are the complete contract exercised by the consumer API -fixture and can move without another consumer migration. +Consumer BUILD files load this entrypoint, not ``//tools/flutter``. These +exports are the complete consumer contract; implementation may move without a +consumer migration. """ load("//tools/flutter:abis.bzl", _ABIS = "ABIS") @@ -35,8 +34,7 @@ load( _flutter_native_libs = "flutter_native_libs", ) -# Explicit assignments make the curated names exports of this module. Merely -# importing names with load() does not re-export them to downstream BUILD files. +# Assigning these names re-exports them to downstream BUILD files. ABIS = _ABIS android_native_lib_jar = _android_native_lib_jar dart_kernel = _dart_kernel diff --git a/tests/consumer/BUILD.bazel b/tests/consumer/BUILD.bazel index 8092a25..88f10fe 100644 --- a/tests/consumer/BUILD.bazel +++ b/tests/consumer/BUILD.bazel @@ -1,8 +1,7 @@ -"""The supported BUILD API, with deliberate coverage of macro internals. +"""Supported BUILD API, including macro-internal coverage. -All supported symbols load from @rules_flutter//flutter:defs.bzl. The specialist -loads below exercise helpers that consumers do not write and are excluded from -the supported API. +Public symbols load from @rules_flutter//flutter:defs.bzl. Specialist loads +cover private helpers, not Consumer Module API. """ load("@bazel_skylib//rules:build_test.bzl", "build_test") @@ -38,9 +37,7 @@ load( "flutter_bundle_contribution", ) -# -# These specialist loads are deliberate macro-internal coverage only. Their -# symbols are not part of the supported Consumer Module API. +# Macro-internal coverage only; not Consumer Module API. load("@rules_flutter//tools/flutter:defs.bzl", "dart_aot_elf") load("@rules_java//java:defs.bzl", "java_import") load(":assertions.bzl", "expect_equal", "expect_label_equal")