From c9eddfd52b75e907164f8e72348d76ed15cbdb37 Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Thu, 10 Sep 2026 22:55:16 +0500 Subject: [PATCH 1/2] promotion: establish module extension boundary --- MODULE.bazel | 2 +- MODULE.bazel.lock | 28 ++++++++++++-- examples/demo_app/MODULE.bazel.lock | 45 ++++++++++++++++++++-- examples/local_plugin/MODULE.bazel.lock | 45 ++++++++++++++++++++-- examples/no_plugins/MODULE.bazel.lock | 41 +++++++++++++++++++- examples/pub_plugins/MODULE.bazel.lock | 45 ++++++++++++++++++++-- flutter/BUILD.bazel | 5 ++- flutter/extensions.bzl | 14 +++++++ tests/consumer/MODULE.bazel.lock | 35 +++++++++++++---- tests/consumer/android/config.MODULE.bazel | 9 +++-- tests/consumer/external_app/MODULE.bazel | 2 +- 11 files changed, 244 insertions(+), 27 deletions(-) create mode 100644 flutter/extensions.bzl diff --git a/MODULE.bazel b/MODULE.bazel index 6d43e64..8f6e44b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -67,7 +67,7 @@ bazel_dep(name = "rules_android_ndk", version = "0.1.5") # `platforms` is declared for the Android NDK toolchain's platform constraints. bazel_dep(name = "platforms", version = "1.0.0") -android_ndk = use_extension("//tools/flutter:ndk.bzl", "android_ndk") +android_ndk = use_extension("//flutter:extensions.bzl", "android_ndk") use_repo(android_ndk, "androidndk", "androidndk_cmake") remote_android_extensions = use_extension( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 7d2d584..29ccf56 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -258,12 +258,32 @@ }, "selectedYankedVersions": {}, "moduleExtensions": { - "//tools/flutter:ndk.bzl%android_ndk": { + "//flutter:extensions.bzl%android_ndk": { "general": { - "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "ODsxSS/bHQV4H/lVib94fc3moWuBdb51ekbQ1pT4FHo=", + "bzlTransitiveDigest": "myIOBLM9s4amVM4T5T6C1tqW7cS9Lfibpp0Fm+0j9n0=", + "usagesDigest": "u+HEkcGg21uv1v1Y5n7OFzVXl5/8Fi8W5y561YLsmWA=", "recordedInputs": [ - "REPO_MAPPING:,rules_android_ndk rules_android_ndk+" + "REPO_MAPPING:,platforms platforms", + "REPO_MAPPING:,rules_android rules_android+", + "REPO_MAPPING:,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:,rules_java rules_java+", + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+" ], "generatedRepoSpecs": { "androidndk": { diff --git a/examples/demo_app/MODULE.bazel.lock b/examples/demo_app/MODULE.bazel.lock index 3456a1f..4129e21 100644 --- a/examples/demo_app/MODULE.bazel.lock +++ b/examples/demo_app/MODULE.bazel.lock @@ -555,10 +555,49 @@ } } }, + "@@sameri11_rules_flutter+//flutter:extensions.bzl%android_ndk": { + "general": { + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "EKTbZN96IdqkA4qQ7A5/CMRth7+5iMGDY1uCPeLj36w=", + "recordedInputs": [ + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", + "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+" + ], + "generatedRepoSpecs": { + "androidndk": { + "repoRuleId": "@@rules_android_ndk+//:rules.bzl%android_ndk_repository", + "attributes": {} + }, + "androidndk_cmake": { + "repoRuleId": "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%_androidndk_cmake_repository", + "attributes": {} + } + } + } + }, "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%android_ndk": { "general": { "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "zNXx7iUET2E9lvb9GO6yHZIEondr/lc26H0dH4yvUPI=", + "usagesDigest": "QrRRy1TWmQYnmdSUlW7uJgLdSfFApDsrkLaLj/wqh2g=", "recordedInputs": [ "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+" ], @@ -600,7 +639,7 @@ "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+", - "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk+androidndk_cmake" + "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk2+androidndk_cmake" ], "generatedRepoSpecs": { "flutter_plugins": { @@ -626,7 +665,7 @@ "embedding": "'@@//android/app:flutter_embedding'", "android_bzl": "'@@sameri11_rules_flutter+//tools/flutter:android.bzl'", "recipe_bzl": "'@@sameri11_rules_flutter+//tools/flutter:recipe.bzl'", - "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk+androidndk_cmake//:ndk_source_properties'" + "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk2+androidndk_cmake//:ndk_source_properties'" } } } diff --git a/examples/local_plugin/MODULE.bazel.lock b/examples/local_plugin/MODULE.bazel.lock index 069251f..ef203ce 100644 --- a/examples/local_plugin/MODULE.bazel.lock +++ b/examples/local_plugin/MODULE.bazel.lock @@ -555,10 +555,49 @@ } } }, + "@@sameri11_rules_flutter+//flutter:extensions.bzl%android_ndk": { + "general": { + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "EKTbZN96IdqkA4qQ7A5/CMRth7+5iMGDY1uCPeLj36w=", + "recordedInputs": [ + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", + "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+" + ], + "generatedRepoSpecs": { + "androidndk": { + "repoRuleId": "@@rules_android_ndk+//:rules.bzl%android_ndk_repository", + "attributes": {} + }, + "androidndk_cmake": { + "repoRuleId": "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%_androidndk_cmake_repository", + "attributes": {} + } + } + } + }, "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%android_ndk": { "general": { "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "0Iwt0tF90zzwGWlVAuZfwkYKdPTLsPz/Uv/70VyXf48=", + "usagesDigest": "A7oaOkSjfvJwyjAnMsfa+v9OgvQ5pbbliBwdFibgSv4=", "recordedInputs": [ "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+" ], @@ -600,7 +639,7 @@ "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+", - "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk+androidndk_cmake" + "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk2+androidndk_cmake" ], "generatedRepoSpecs": { "flutter_plugins": { @@ -621,7 +660,7 @@ "embedding": "'@@//packages/host_app/android/app:flutter_embedding'", "android_bzl": "'@@sameri11_rules_flutter+//tools/flutter:android.bzl'", "recipe_bzl": "'@@sameri11_rules_flutter+//tools/flutter:recipe.bzl'", - "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk+androidndk_cmake//:ndk_source_properties'" + "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk2+androidndk_cmake//:ndk_source_properties'" } } } diff --git a/examples/no_plugins/MODULE.bazel.lock b/examples/no_plugins/MODULE.bazel.lock index fdd6a02..5a35db1 100644 --- a/examples/no_plugins/MODULE.bazel.lock +++ b/examples/no_plugins/MODULE.bazel.lock @@ -555,10 +555,49 @@ } } }, + "@@sameri11_rules_flutter+//flutter:extensions.bzl%android_ndk": { + "general": { + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "EKTbZN96IdqkA4qQ7A5/CMRth7+5iMGDY1uCPeLj36w=", + "recordedInputs": [ + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", + "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+" + ], + "generatedRepoSpecs": { + "androidndk": { + "repoRuleId": "@@rules_android_ndk+//:rules.bzl%android_ndk_repository", + "attributes": {} + }, + "androidndk_cmake": { + "repoRuleId": "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%_androidndk_cmake_repository", + "attributes": {} + } + } + } + }, "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%android_ndk": { "general": { "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "HyHKof/Hwyc4Aa/4VHEFWpZTPqhUXqxO4KBOHKeIK5o=", + "usagesDigest": "RmWgbl3ZrcRS38YkTUmgaXvm4e7smxgPZPFePrLvlLU=", "recordedInputs": [ "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+" ], diff --git a/examples/pub_plugins/MODULE.bazel.lock b/examples/pub_plugins/MODULE.bazel.lock index af0b854..7f99143 100644 --- a/examples/pub_plugins/MODULE.bazel.lock +++ b/examples/pub_plugins/MODULE.bazel.lock @@ -555,10 +555,49 @@ } } }, + "@@sameri11_rules_flutter+//flutter:extensions.bzl%android_ndk": { + "general": { + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "EKTbZN96IdqkA4qQ7A5/CMRth7+5iMGDY1uCPeLj36w=", + "recordedInputs": [ + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", + "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+" + ], + "generatedRepoSpecs": { + "androidndk": { + "repoRuleId": "@@rules_android_ndk+//:rules.bzl%android_ndk_repository", + "attributes": {} + }, + "androidndk_cmake": { + "repoRuleId": "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%_androidndk_cmake_repository", + "attributes": {} + } + } + } + }, "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%android_ndk": { "general": { "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "x+t7RfXM6J9LFdzY4BsMFFRW3Omzmr2QijNtTLItWds=", + "usagesDigest": "DbV1H8oR3Qzpg/rrhdvrY4gJ0TwkhR++v18wnMYCt14=", "recordedInputs": [ "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+" ], @@ -600,7 +639,7 @@ "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+", - "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk+androidndk_cmake" + "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk2+androidndk_cmake" ], "generatedRepoSpecs": { "flutter_plugins": { @@ -621,7 +660,7 @@ "embedding": "'@@//android/app:flutter_embedding'", "android_bzl": "'@@sameri11_rules_flutter+//tools/flutter:android.bzl'", "recipe_bzl": "'@@sameri11_rules_flutter+//tools/flutter:recipe.bzl'", - "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk+androidndk_cmake//:ndk_source_properties'" + "ndk_source_properties": "'@@sameri11_rules_flutter++android_ndk2+androidndk_cmake//:ndk_source_properties'" } } } diff --git a/flutter/BUILD.bazel b/flutter/BUILD.bazel index 0ca983a..281e959 100644 --- a/flutter/BUILD.bazel +++ b/flutter/BUILD.bazel @@ -1,3 +1,6 @@ package(default_visibility = ["//visibility:public"]) -exports_files(["defs.bzl"]) +exports_files([ + "defs.bzl", + "extensions.bzl", +]) diff --git a/flutter/extensions.bzl b/flutter/extensions.bzl new file mode 100644 index 0000000..65b40a6 --- /dev/null +++ b/flutter/extensions.bzl @@ -0,0 +1,14 @@ +"""The supported module-extension API for Flutter Consumer Modules. + +Consumer Modules load this entrypoint rather than implementation-oriented files +under ``//tools/flutter``. The Flutter SDK/engine provisioning extension remains +private to the Ruleset Module because it supplies the rules' own tool inputs. +""" + +load("//tools/flutter:ndk.bzl", _android_ndk = "android_ndk") +load("//tools/flutter:plugins.bzl", _flutter_plugins_ext = "flutter_plugins_ext") + +# Explicit assignments make the curated names exports of this module. Merely +# importing names with load() does not re-export them to downstream MODULE files. +android_ndk = _android_ndk +flutter_plugins_ext = _flutter_plugins_ext diff --git a/tests/consumer/MODULE.bazel.lock b/tests/consumer/MODULE.bazel.lock index 34d0b36..6943749 100644 --- a/tests/consumer/MODULE.bazel.lock +++ b/tests/consumer/MODULE.bazel.lock @@ -555,12 +555,32 @@ } } }, - "@@sameri11_rules_flutter+//tools/flutter:ndk.bzl%android_ndk": { + "@@sameri11_rules_flutter+//flutter:extensions.bzl%android_ndk": { "general": { - "bzlTransitiveDigest": "wubp2T1WtFjfb9+kfYhB63NRFwpD0mXcOWF3daEO03c=", - "usagesDigest": "/82dU0lb19d04CKeX2zZwzdPElf1kvxwA5T03tNl8t4=", + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "CE2Z/tOTJqwioicux0yXg4nzWLIvZDfcM/KtRNy1Og4=", "recordedInputs": [ - "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+" + "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals", + "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version", + "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+", + "REPO_MAPPING:protobuf+,rules_java rules_java+", + "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy", + "REPO_MAPPING:rules_cc+,platforms platforms", + "REPO_MAPPING:rules_cc+,rules_cc rules_cc+", + "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+", + "REPO_MAPPING:rules_java+,bazel_features bazel_features+", + "REPO_MAPPING:rules_java+,bazel_skylib bazel_skylib+", + "REPO_MAPPING:rules_java+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_java+,com_google_protobuf protobuf+", + "REPO_MAPPING:rules_java+,compatibility_proxy rules_java++compatibility_proxy+compatibility_proxy", + "REPO_MAPPING:rules_java+,rules_cc rules_cc+", + "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", + "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+" ], "generatedRepoSpecs": { "androidndk": { @@ -574,10 +594,10 @@ } } }, - "@@sameri11_rules_flutter+//tools/flutter:plugins.bzl%flutter_plugins_ext": { + "@@sameri11_rules_flutter+//flutter:extensions.bzl%flutter_plugins_ext": { "general": { - "bzlTransitiveDigest": "tQNMt955Aw9GgNkaaslFjOQlTt/8uwsvu2YmduiXfjg=", - "usagesDigest": "y1rZq2zpdkA6oSYP7t9egDQda7qVS9Am8CyqQojviY4=", + "bzlTransitiveDigest": "h0f/0RNvDpo1r9DeVB1pJNoDRBHQDBih+l5n+H8Gacw=", + "usagesDigest": "Ledc+BavJyeReHRqHvz5/Wcm+5OIAQF8UJuGmSbzKpI=", "recordedInputs": [ "REPO_MAPPING:,fake_plugin_metadata +fake_plugin_metadata+fake_plugin_metadata", "REPO_MAPPING:,plugin_maven rules_jvm_external++maven+plugin_maven", @@ -600,6 +620,7 @@ "REPO_MAPPING:rules_java++compatibility_proxy+compatibility_proxy,rules_java rules_java+", "REPO_MAPPING:sameri11_rules_flutter+,platforms platforms", "REPO_MAPPING:sameri11_rules_flutter+,rules_android rules_android+", + "REPO_MAPPING:sameri11_rules_flutter+,rules_android_ndk rules_android_ndk+", "REPO_MAPPING:sameri11_rules_flutter+,rules_java rules_java+", "REPO_MAPPING:sameri11_rules_flutter+,androidndk_cmake sameri11_rules_flutter++android_ndk+androidndk_cmake" ], diff --git a/tests/consumer/android/config.MODULE.bazel b/tests/consumer/android/config.MODULE.bazel index f2ec380..d341b69 100644 --- a/tests/consumer/android/config.MODULE.bazel +++ b/tests/consumer/android/config.MODULE.bazel @@ -62,7 +62,7 @@ local_path_override( path = "external_app", ) -android_ndk = use_extension("@rules_flutter//tools/flutter:ndk.bzl", "android_ndk") +android_ndk = use_extension("@rules_flutter//flutter:extensions.bzl", "android_ndk") use_repo(android_ndk, "androidndk", "androidndk_cmake") register_toolchains("@androidndk//:all") @@ -74,7 +74,7 @@ fake_plugin_metadata( marker = "//:fixtures/fake_plugin/pubspec.yaml", ) -plugins = use_extension("@rules_flutter//tools/flutter:plugins.bzl", "flutter_plugins_ext") +plugins = use_extension("@rules_flutter//flutter:extensions.bzl", "flutter_plugins_ext") plugins.project( abis = ["arm64-v8a"], embedding = "//:flutter_embedding_no_plugins", @@ -84,5 +84,8 @@ plugins.project( ) use_repo(plugins, "flutter_plugins") +# The private SDK/engine extension is direct fixture-only internal coverage for +# explicit embedding debug/release labels. Ticket 06 will move it with its +# implementation; it is intentionally absent from extensions.bzl. flutter = use_extension("@rules_flutter//tools/flutter:repo.bzl", "flutter") -use_repo(flutter, "flutter_embedding_debug", "flutter_embedding_release", "flutter_sdk") +use_repo(flutter, "flutter_embedding_debug", "flutter_embedding_release") diff --git a/tests/consumer/external_app/MODULE.bazel b/tests/consumer/external_app/MODULE.bazel index 2220e7a..616a6f9 100644 --- a/tests/consumer/external_app/MODULE.bazel +++ b/tests/consumer/external_app/MODULE.bazel @@ -6,7 +6,7 @@ module( 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") +plugins = use_extension("@rules_flutter//flutter:extensions.bzl", "flutter_plugins_ext") plugins.package( name = "absent_package", bzl_file = "//:absent_package.bzl", From a6be60772392e0e6a57e0a9bd79d0486fa2ab80a Mon Sep 17 00:00:00 2001 From: Mikhail Novoseltsev <51940183+Sameri11@users.noreply.github.com> Date: Sat, 12 Sep 2026 20:05:53 +0500 Subject: [PATCH 2/2] concise comments --- flutter/extensions.bzl | 10 ++++------ tests/consumer/android/config.MODULE.bazel | 5 ++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/flutter/extensions.bzl b/flutter/extensions.bzl index 65b40a6..0b4888e 100644 --- a/flutter/extensions.bzl +++ b/flutter/extensions.bzl @@ -1,14 +1,12 @@ -"""The supported module-extension API for Flutter Consumer Modules. +"""Supported module-extension API for Flutter Consumer Modules. -Consumer Modules load this entrypoint rather than implementation-oriented files -under ``//tools/flutter``. The Flutter SDK/engine provisioning extension remains -private to the Ruleset Module because it supplies the rules' own tool inputs. +Consumer Modules load this entrypoint, not ``//tools/flutter``. SDK/engine +provisioning stays private because it supplies the Ruleset Module's tool inputs. """ load("//tools/flutter:ndk.bzl", _android_ndk = "android_ndk") load("//tools/flutter:plugins.bzl", _flutter_plugins_ext = "flutter_plugins_ext") -# Explicit assignments make the curated names exports of this module. Merely -# importing names with load() does not re-export them to downstream MODULE files. +# Assigning these names re-exports them to downstream MODULE files. android_ndk = _android_ndk flutter_plugins_ext = _flutter_plugins_ext diff --git a/tests/consumer/android/config.MODULE.bazel b/tests/consumer/android/config.MODULE.bazel index d341b69..13db4bd 100644 --- a/tests/consumer/android/config.MODULE.bazel +++ b/tests/consumer/android/config.MODULE.bazel @@ -84,8 +84,7 @@ plugins.project( ) use_repo(plugins, "flutter_plugins") -# The private SDK/engine extension is direct fixture-only internal coverage for -# explicit embedding debug/release labels. Ticket 06 will move it with its -# implementation; it is intentionally absent from extensions.bzl. +# Fixture-only coverage of the private SDK/engine extension's embedding labels. +# Ticket 06 moves it with its implementation; it is not public. flutter = use_extension("@rules_flutter//tools/flutter:repo.bzl", "flutter") use_repo(flutter, "flutter_embedding_debug", "flutter_embedding_release")