From c804615f5312dad1e14f14ee781ddba29158031c Mon Sep 17 00:00:00 2001 From: Ying-Chun Liu Date: Thu, 10 Sep 2026 21:14:11 +0000 Subject: [PATCH 1/2] tools: testutils: add bazel-7-readiness test tools Signed-off-by: Ying-Chun Liu --- .../bazel-7-readiness/generate_mock_repos.py | 283 ++++++++++++++++++ ...de-fallback-wrapper-for-symbolic-mac.patch | 27 ++ .../0021-backport-rules-to-bazel-7.patch | 211 +++++++++++++ .../0022-remove-cc-compatibility-proxy.patch | 17 ++ ...remove-unused-build-external-modules.patch | 130 ++++++++ .../run_bazel_7_readiness_test.sh | 173 +++++++++++ 6 files changed, 841 insertions(+) create mode 100755 tools/testutils/bazel-7-readiness/generate_mock_repos.py create mode 100644 tools/testutils/bazel-7-readiness/patches/0016-cuttlefish-Provide-fallback-wrapper-for-symbolic-mac.patch create mode 100644 tools/testutils/bazel-7-readiness/patches/0021-backport-rules-to-bazel-7.patch create mode 100644 tools/testutils/bazel-7-readiness/patches/0022-remove-cc-compatibility-proxy.patch create mode 100644 tools/testutils/bazel-7-readiness/patches/0025-remove-unused-build-external-modules.patch create mode 100755 tools/testutils/bazel-7-readiness/run_bazel_7_readiness_test.sh diff --git a/tools/testutils/bazel-7-readiness/generate_mock_repos.py b/tools/testutils/bazel-7-readiness/generate_mock_repos.py new file mode 100755 index 00000000000..2bf6c97d67f --- /dev/null +++ b/tools/testutils/bazel-7-readiness/generate_mock_repos.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +import os +import stat +import sys + +EMPTY_REPOS = [ + "apple_support", + "buildozer", + "hedron_compile_commands", + "rules_foreign_cc", + "rules_m4", + "rules_nodejs", +] + +PKG_TARGETS = { + "abseil-cpp": ["abseil-cpp"], + "abseil-cpp/absl/algorithm": ["algorithm"], + "abseil-cpp/absl/base": ["base", "log_severity", "no_destructor"], + "abseil-cpp/absl/cleanup": ["cleanup"], + "abseil-cpp/absl/container": ["btree", "container", "flat_hash_map"], + "abseil-cpp/absl/debugging": ["debugging"], + "abseil-cpp/absl/flags": ["flag", "flags", "parse"], + "abseil-cpp/absl/functional": ["bind_front", "functional"], + "abseil-cpp/absl/hash": ["hash"], + "abseil-cpp/absl/log": ["check", "globals", "initialize", "log", "log_entry", "log_sink", "log_sink_registry", "vlog_is_on"], + "abseil-cpp/absl/memory": ["memory"], + "abseil-cpp/absl/meta": ["meta"], + "abseil-cpp/absl/numeric": ["numeric"], + "abseil-cpp/absl/profiling": ["profiling"], + "abseil-cpp/absl/random": ["bit_gen_ref", "distributions", "random"], + "abseil-cpp/absl/status": ["status", "statusor"], + "abseil-cpp/absl/strings": ["cord", "str_format", "strings"], + "abseil-cpp/absl/synchronization": ["synchronization"], + "abseil-cpp/absl/time": ["time"], + "abseil-cpp/absl/types": ["span", "types"], + "abseil-cpp/absl/utility": ["utility"], + "android_system_core": ["__subpackages__", "all", "android_system_core", "init", "lib", "libbase", "libcrypto_utils", "libcutils", "libext4_utils", "liblog", "liblp", "libsparse", "libutils", "libziparchive", "simg2img"], + "android_system_extras": ["__subpackages__", "all", "android_system_extras", "lib", "libext4_utils", "lpadd", "lpmake"], + "android_tools_netsim": ["all", "android_tools_netsim", "lib", "netsim", "netsim-cli", "netsim-daemon", "netsimd"], + "arm_optimized_routines": ["all", "arm_optimized_routines", "lib", "string"], + "boringssl": ["boringssl", "crypto"], + "brotli": ["brotlidec", "brotlienc", "brotli"], + "bzip2": ["bzip2"], + "c-ares": ["ares", "c-ares"], + "casimir": ["Cargo.toml", "all", "casimir", "lib"], + "crc32c": ["crc32c"], + "crosvm": ["Cargo.lock", "__subpackages__", "all", "compile_seccomp_policy_zip", "crosvm", "crosvm_gpu_display_wayland_protocols", "lib", "libcrosvm", "minijail_sources"], + "curl": ["curl"], + "cxx.rs": ["codegen", "cxx"], + "dosfstools": ["__subpackages__", "all", "dosfstools", "lib", "mkfs.fat"], + "e2fsprogs": ["__subpackages__", "all", "e2fsck", "e2fsdroid", "e2fsprogs", "lib", "libext2_com_err_headers", "libext2_uuid", "mke2fs", "resize2fs"], + "egl_headers": ["all", "egl_headers", "lib"], + "expat": ["__subpackages__", "all", "expat", "lib"], + "f2fs_tools": ["__subpackages__", "all", "f2fs_tools", "fsck.f2fs", "lib", "make_f2fs"], + "fec_rs": ["all", "fec_rs", "lib", "libfec_rs"], + "fmt": ["fmt"], + "freetype": ["freetype"], + "fruit": ["fruit", "lib", "all"], + "gflags": ["gflags"], + "gfxstream": ["__subpackages__", "all", "gfxstream", "lib"], + "gfxstream/host": ["gfxstream_backend"], + "googleapis": ["googleapis"], + "googleapis-cc": ["googleapis-cc"], + "googletest": ["gtest", "gtest_main", "gmock", "gmock_main"], + "grpc": ["grpc++", "grpc", "grpc++_reflection"], + "grpc-proto": ["grpc-proto"], + "icu": ["icu"], + "jsoncpp": ["jsoncpp"], + "libarchive": ["libarchive"], + "libarchive/cpio": ["cpio"], + "libcbor": ["__subpackages__", "all", "cbor", "lib", "libcbor"], + "libconfig": ["all", "lib", "libconfig"], + "libdrm": ["all", "lib", "libdrm", "libdrm_fourcc"], + "libeigen": ["all", "lib", "libeigen"], + "libevent": ["event", "libevent"], + "libffi": ["all", "lib", "libffi"], + "libjpeg_turbo": ["jpeg", "libjpeg_turbo"], + "libnl": ["__subpackages__", "all", "lib", "libnl"], + "libopenscreen": ["__subpackages__", "all", "lib", "libopenscreen"], + "libpffft": ["all", "lib", "libpffft"], + "libpng": ["libpng"], + "libsrtp2": ["all", "lib", "libsrtp2"], + "libusb": ["all", "lib", "libusb"], + "libuuid": ["libuuid"], + "libvpx": ["__subpackages__", "all", "lib", "libvpx"], + "libwebm": ["all", "lib", "libwebm", "mkvmuxer"], + "libwebrtc": ["all", "lib", "libwebrtc"], + "libwebsockets": ["__subpackages__", "all", "lib", "libwebsockets"], + "libxml2": ["libxml2"], + "libyuv": ["all", "lib", "libyuv"], + "libzip": ["libzip"], + "lz4": ["lz4", "lz4_frame"], + "lz4/programs": ["lz4"], + "mako": ["__subpackages__", "all", "lib", "mako"], + "markupsafe": ["all", "lib", "markupsafe"], + "mesa": ["__subpackages__", "all", "lib", "mesa", "vk_lavapipe"], + "mkbootimg": ["all", "bootimg_header", "lib", "mkbootimg", "mkbootimg.py", "unpack_bootimg", "unpack_bootimg.py"], + "ms-tpm-20-ref": ["all", "lib", "ms-tpm-20-ref", "simulator"], + "mtools": ["__subpackages__", "all", "lib", "mtools"], + "nasm": ["nasm"], + "opengl_headers": ["GLES2_headers", "GLES3_headers", "GLES_headers", "__subpackages__", "all", "lib", "opengl_headers"], + "pcre2": ["pcre2"], + "protobuf/src/google/protobuf/io": ["io", "tokenizer"], + "pyyaml": ["all", "lib", "pyyaml", "yaml"], + "re2": ["re2"], + "rootcanal": ["rootcanal", "rootcanal_proto", "librootcanal"], + "rootcanal/packets": ["link_layer_packets_rs"], + "sandboxed_api": ["sandboxed_api"], + "selinux": ["__subpackages__", "all", "lib", "libselinux", "sefcontext_compile", "selinux"], + "spirv_headers": ["all", "lib", "spirv_cpp_headers", "spirv_headers"], + "spirv_tools": ["all", "lib", "spirv_tools", "spirv_tools_opt"], + "swiftshader": ["all", "lib", "swiftshader", "swiftshader_llvm", "vk_swiftshader"], + "tinyxml2": ["tinyxml2"], + "tl-expected": ["tl-expected"], + "vulkan_headers": ["all", "lib", "vulkan_headers", "vulkan_hpp"], + "wayland": ["__subpackages__", "all", "lib", "wayland", "wayland_scanner", "wayland_server"], + "wmediumd": ["__subpackages__", "all", "lib", "libwmediumd", "wmediumd", "wmediumd_gen_config"], + "xz": ["xz"], + "zlib": ["zlib"], +} + +PROTOBUF_BUILD = """\ +load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_toolchain", "proto_library") +package(default_visibility = ["//visibility:public"]) + +cc_library(name = "protobuf", linkopts = ["-lprotobuf"]) +cc_library(name = "protobuf_lite", linkopts = ["-lprotobuf-lite"]) +cc_library(name = "differencer", deps = [":protobuf"]) +cc_library(name = "json_util", deps = [":protobuf"]) +sh_binary(name = "protoc", srcs = ["protoc.sh"]) +proto_lang_toolchain(name = "cc_toolchain", command_line = "--cpp_out=$(OUT)", runtime = ":protobuf") +proto_toolchain(name = "proto_toolchain", proto_compiler = ":protoc") +""" + "".join( + f'proto_library(name = "{p}_proto", srcs = [])\n' + f'cc_library(name = "{p}_cc_proto", deps = [":protobuf"])\n' + for p in [ + "any", "api", "cpp_features", "descriptor", "duration", "empty", + "field_mask", "source_context", "struct", "timestamp", "type", "wrappers", + ] +) + +CUSTOM_FILES = { + "aspect_bazel_lib/lib/expand_template.bzl": "def expand_template(**kwargs):\n pass\n", + "aspect_rules_lint/format/defs.bzl": "def format_test(**kwargs):\n pass\n", + "avb/BUILD": """\ +cc_library(name = "libavb", deps = ["@boringssl//:crypto"], visibility = ["//visibility:public"]) +exports_files(["avbtool.py"]) +alias(name = "avb", actual = ":libavb", visibility = ["//visibility:public"]) +alias(name = "lib", actual = ":libavb", visibility = ["//visibility:public"]) +alias(name = "all", actual = ":libavb", visibility = ["//visibility:public"]) +""", + "avb/avbtool.py": "#!/usr/bin/env python3\n", + "curl/MODULE.bazel": 'module(name = "curl")\nbazel_dep(name = "c-ares")\nbazel_dep(name = "re2")\n', + "googleapis/MODULE.bazel": 'module(name = "googleapis")\nbazel_dep(name = "protobuf")\n', + "googletest/MODULE.bazel": 'module(name = "googletest")\nbazel_dep(name = "rules_cc")\n', + "libarchive/MODULE.bazel": 'module(name = "libarchive")\nbazel_dep(name = "bzip2")\nbazel_dep(name = "xz")\nbazel_dep(name = "rules_m4")\n', + "googleapis/google/rpc/BUILD": """\ +load("@protobuf//bazel:proto_library.bzl", "proto_library") +load("@protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") + +proto_library(name = "status_proto", srcs = ["status.proto"], visibility = ["//visibility:public"], deps = ["@protobuf//:any_proto"]) +cc_proto_library(name = "status_cc_proto", deps = [":status_proto"], visibility = ["//visibility:public"]) +proto_library(name = "code_proto", srcs = ["code.proto"], visibility = ["//visibility:public"]) +cc_proto_library(name = "code_cc_proto", deps = [":code_proto"], visibility = ["//visibility:public"]) +""", + "grpc/bazel/cc_grpc_library.bzl": """\ +def _generate_grpc_impl(ctx): + out = [] + for t in ctx.attr.srcs: + for src in (t[ProtoInfo].direct_sources if ProtoInfo in t else t.files.to_list()): + b = src.basename[:-6] if src.basename.endswith(".proto") else src.basename + cc, h = ctx.actions.declare_file(b + ".grpc.pb.cc"), ctx.actions.declare_file(b + ".grpc.pb.h") + out.extend([cc, h]) + ctx.actions.run( + inputs = [src], outputs = [cc, h], executable = "/usr/bin/protoc", + arguments = ["--plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin", "--grpc_out=" + ctx.bin_dir.path, "-I.", src.path], + ) + return [DefaultInfo(files = depset(out))] + +_generate_grpc = rule(implementation = _generate_grpc_impl, attrs = {"srcs": attr.label_list()}) + +def cc_grpc_library(name, srcs = [], deps = [], **kwargs): + gen = "_" + name + "_grpc_gen" + _generate_grpc(name = gen, srcs = srcs) + native.cc_library( + name = name, srcs = [":" + gen], hdrs = [":" + gen], + deps = [d for d in deps if d != "@grpc//:grpc++"] + ["@grpc//:grpc++"], + visibility = kwargs.get("visibility", ["//visibility:public"]), + ) +""", + "protobuf/BUILD": PROTOBUF_BUILD, + "protobuf/MODULE.bazel": 'module(name = "protobuf")\nbazel_dep(name = "rules_proto", version = "0.0.0")\n', + "protobuf/bazel/cc_proto_library.bzl": "cc_proto_library = native.cc_proto_library\n", + "protobuf/bazel/proto_library.bzl": "proto_library = native.proto_library\n", + "protobuf/protobuf_deps.bzl": "def protobuf_deps():\n pass\n", + "protobuf/protoc.sh": "#!/bin/sh\n", + "rules_flex/flex/flex.bzl": "def flex_cc_library(**kwargs):\n pass\n", + "rules_proto_grpc_cpp/defs.bzl": "def cpp_grpc_library(**kwargs):\n pass\n", + "rules_proto_grpc_go/defs.bzl": """\ +def go_proto_compile(**kwargs): pass +def go_grpc_compile(**kwargs): pass +def go_proto_library(**kwargs): pass +def go_grpc_library(**kwargs): pass +""", + "rules_rust/rust/defs.bzl": """\ +def rust_binary(**kwargs): pass +def rust_library(**kwargs): pass +def rust_static_library(**kwargs): pass +def rust_test(**kwargs): pass +""", + "rules_rust/rust/extensions.bzl": """\ +def _dummy_repo_impl(ctx): + ctx.file("BUILD", "") + ctx.file("WORKSPACE", "") + +_dummy_repo = repository_rule(implementation = _dummy_repo_impl) + +def _impl(ctx): + _dummy_repo(name = "rust_host_tools_nightly") + +rust_host_tools = module_extension( + implementation = _impl, + tag_classes = {"host_tools": tag_class(attrs = {"name": attr.string(), "version": attr.string()})}, +) +""", + "toolchains_llvm/toolchain/extensions/llvm.bzl": """\ +def _dummy_repo_impl(ctx): + ctx.file("BUILD", "") + ctx.file("WORKSPACE", "") + +_dummy_repo = repository_rule(implementation = _dummy_repo_impl) + +def _impl(ctx): + _dummy_repo(name = "llvm_toolchain") + +llvm = module_extension( + implementation = _impl, + tag_classes = {"toolchain": tag_class(attrs = {"llvm_version": attr.string()})}, +) +""", +} + +def main(): + target_dir = sys.argv[1] if len(sys.argv) > 1 else os.path.join(os.path.dirname(__file__), "mock_repos") + repos = set(EMPTY_REPOS) + packages = set() + + for pkg, targets in PKG_TARGETS.items(): + repos.add(pkg.split("/")[0]) + packages.add(pkg) + pkg_dir = os.path.join(target_dir, pkg) + os.makedirs(pkg_dir, exist_ok=True) + with open(os.path.join(pkg_dir, "BUILD"), "w") as f: + for t in targets: + f.write(f'cc_library(name = "{t}", visibility = ["//visibility:public"])\n') + + for rel_path, content in CUSTOM_FILES.items(): + repos.add(rel_path.split("/")[0]) + full_path = os.path.join(target_dir, rel_path) + dir_path = os.path.dirname(full_path) + os.makedirs(dir_path, exist_ok=True) + with open(full_path, "w") as f: + f.write(content) + if full_path.endswith((".sh", ".py")): + os.chmod(full_path, os.stat(full_path).st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH) + packages.add(os.path.relpath(dir_path, target_dir)) + + for r in repos: + os.makedirs(os.path.join(target_dir, r), exist_ok=True) + packages.add(r) + mod_path = os.path.join(target_dir, r, "MODULE.bazel") + if not os.path.exists(mod_path): + with open(mod_path, "w") as f: + f.write(f'module(name = "{r}")\n') + + for pkg in packages: + build_path = os.path.join(target_dir, pkg, "BUILD") + if not os.path.exists(build_path): + open(build_path, "w").close() + + +if __name__ == "__main__": + main() diff --git a/tools/testutils/bazel-7-readiness/patches/0016-cuttlefish-Provide-fallback-wrapper-for-symbolic-mac.patch b/tools/testutils/bazel-7-readiness/patches/0016-cuttlefish-Provide-fallback-wrapper-for-symbolic-mac.patch new file mode 100644 index 00000000000..26a5bdb0cb4 --- /dev/null +++ b/tools/testutils/bazel-7-readiness/patches/0016-cuttlefish-Provide-fallback-wrapper-for-symbolic-mac.patch @@ -0,0 +1,27 @@ +--- a/base/cvd/cuttlefish/bazel/rules.bzl 2026-09-10 21:46:27.729380206 +0000 ++++ b/base/cvd/cuttlefish/bazel/rules.bzl 2026-09-10 21:46:27.730110696 +0000 +@@ -30,6 +30,24 @@ + COPTS = BUILD_VAR_COPTS + LINKOPTS = BUILD_VAR_LINKOPTS + ++def _fallback_macro(inherit_attrs = None, attrs = {}, implementation = None): ++ def _wrapper(name, **kwargs): ++ call_kwargs = dict(kwargs) ++ for k, a in attrs.items(): ++ if k not in call_kwargs: ++ if type(a) in ["string", "bool", "int", "list"]: ++ call_kwargs[k] = a ++ elif hasattr(a, "default"): ++ call_kwargs[k] = a.default ++ elif k.endswith("_enabled"): ++ call_kwargs[k] = True ++ elif k in ["copts", "linkopts", "srcs", "hdrs", "deps", "data", "features"]: ++ call_kwargs[k] = [] ++ return implementation(name = name, **call_kwargs) ++ return _wrapper ++ ++macro = _fallback_macro ++ + def _cf_build_test_implementation(name, srcs, **kwargs): + native.filegroup( + name = name + "_LINT_TEST_starlark_files", diff --git a/tools/testutils/bazel-7-readiness/patches/0021-backport-rules-to-bazel-7.patch b/tools/testutils/bazel-7-readiness/patches/0021-backport-rules-to-bazel-7.patch new file mode 100644 index 00000000000..8e6611147f5 --- /dev/null +++ b/tools/testutils/bazel-7-readiness/patches/0021-backport-rules-to-bazel-7.patch @@ -0,0 +1,211 @@ +--- a/base/cvd/cuttlefish/bazel/rules.bzl 2026-09-10 21:46:27.737014550 +0000 ++++ b/base/cvd/cuttlefish/bazel/rules.bzl 2026-09-10 21:47:01.305890411 +0000 +@@ -17,13 +17,11 @@ + invocation targets. + """ + +-load("@aspect_rules_lint//format:defs.bzl", "format_test") +-load("@cc_compatibility_proxy//:proxy.bzl", "cc_binary", "cc_library", "cc_test") ++load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") + load("@rules_rust//rust:defs.bzl", "rust_binary") + load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + load("@rules_shell//shell:sh_library.bzl", "sh_library") + load("//:build_variables.bzl", BUILD_VAR_COPTS = "COPTS", BUILD_VAR_LINKOPTS = "LINKOPTS") +-load("//tools/lint:linters.bzl", "buildifier_test", "clang_tidy_include_cleaner_test", "clang_tidy_test", "dwyu_rule", "shellcheck_test") + + visibility(["//..."]) + +@@ -49,22 +47,12 @@ + macro = _fallback_macro + + def _cf_build_test_implementation(name, srcs, **kwargs): +- native.filegroup( +- name = name + "_LINT_TEST_starlark_files", +- srcs = (srcs or []) + ["BUILD.bazel"], +- tags = ["lint-with-buildifier"], +- ) +- buildifier_test( +- name = name + "_LINT_TEST", +- srcs = [":" + name + "_LINT_TEST_starlark_files"], +- **kwargs +- ) ++ pass + + cf_build_test = macro( + inherit_attrs = "common", + attrs = { + "srcs": attr.label_list( +- configurable = False, + default = [], + ), + }, +@@ -83,7 +71,7 @@ + linkopts, + _target_type, + **kwargs): +- if not clang_tidy_enabled and not kwargs["deprecation"]: ++ if not clang_tidy_enabled and not kwargs.get("deprecation"): + kwargs["deprecation"] = "Not covered by clang-tidy" + + if _target_type == "cc_binary": +@@ -119,68 +107,32 @@ + else: + fail("Unknown target type " + _target_type) + +- if clang_format_enabled and (kwargs.get("srcs") or kwargs.get("hdrs")): +- format_test( +- name = name + "_format_test", +- cc = "//tools/format:clang_format", +- disable_git_attribute_checks = True, +- srcs = (kwargs.get("srcs") or []) + (kwargs.get("hdrs") or []), +- visibility = ["//visibility:private"], +- ) +- if clang_tidy_enabled: +- if include_cleaner_enabled: +- clang_tidy_include_cleaner_test( +- name = name + "_clang_tidy", +- srcs = [":" + name], +- tags = ["clang_tidy", "clang-tidy"], +- visibility = ["//visibility:private"], +- ) +- else: +- clang_tidy_test( +- name = name + "_clang_tidy", +- srcs = [":" + name], +- tags = ["clang_tidy", "clang-tidy"], +- visibility = ["//visibility:private"], +- ) +- if depend_on_what_you_use_enabled and not "-layering_check" in features: +- dwyu_rule( +- name = name + "_depend_on_what_you_use", +- deps = [":" + name], +- testonly = True, +- visibility = ["//visibility:private"], +- ) ++ + + _CC_COMMON_ATTRS = { + "clang_format_enabled": attr.bool( +- configurable = False, +- default = True, ++ default = False, + doc = "Decide if a corresponding format_test target is generated", + ), + "clang_tidy_enabled": attr.bool( +- configurable = False, +- default = True, ++ default = False, + doc = "Decide if a corresponding clang_tidy_test target is generated", + ), + "copts": attr.string_list( +- configurable = False, + default = [], + ), + "depend_on_what_you_use_enabled": attr.bool( +- configurable = False, +- default = True, ++ default = False, + doc = "Decide if a corresponding depend-on-what-you-use target is generated", + ), + "features": attr.string_list( +- configurable = False, + default = [], + ), + "include_cleaner_enabled": attr.bool( +- configurable = False, +- default = True, ++ default = False, + doc = "Run clang-tidy with misc-include-cleaner", + ), + "linkopts": attr.string_list( +- configurable = True, + default = [], + ), + } +@@ -188,8 +140,8 @@ + cf_cc_binary = macro( + inherit_attrs = cc_binary, + attrs = _CC_COMMON_ATTRS | { +- "deps": attr.label_list(configurable = True), +- "_target_type": attr.string(configurable = False, default = "cc_binary"), ++ "deps": attr.label_list(), ++ "_target_type": "cc_binary", + }, + implementation = _cf_cc_target_implementation, + ) +@@ -197,8 +149,8 @@ + cf_cc_library = macro( + inherit_attrs = cc_library, + attrs = _CC_COMMON_ATTRS | { +- "deps": attr.label_list(configurable = True), +- "_target_type": attr.string(configurable = False, default = "cc_library"), ++ "deps": attr.label_list(), ++ "_target_type": "cc_library", + }, + implementation = _cf_cc_target_implementation, + ) +@@ -206,8 +158,8 @@ + cf_cc_test = macro( + inherit_attrs = cc_test, + attrs = _CC_COMMON_ATTRS | { +- "deps": attr.label_list(configurable = False), +- "_target_type": attr.string(configurable = False, default = "cc_test"), ++ "deps": attr.label_list(), ++ "_target_type": "cc_test", + }, + implementation = _cf_cc_target_implementation, + ) +@@ -217,13 +169,6 @@ + name = name, + **kwargs + ) +- format_test( +- name = name + "_format_test", +- rust = "@rules_rust//tools/upstream_wrapper:rustfmt", +- disable_git_attribute_checks = True, +- srcs = (kwargs.get("srcs") or []), +- visibility = ["//visibility:private"], +- ) + + cf_rust_binary = macro( + inherit_attrs = rust_binary, +@@ -235,18 +180,11 @@ + name = name, + **kwargs + ) +- if shellcheck_enabled: +- shellcheck_test( +- name = name + "_shellcheck", +- srcs = [":" + name], +- tags = ["shellcheck"], +- visibility = ["//visibility:private"], +- ) + + cf_sh_binary = macro( + inherit_attrs = sh_binary, + attrs = { +- "shellcheck_enabled": attr.bool(configurable = False, default = True, doc = "Decide if a corresponding shellcheck_test target is generated"), ++ "shellcheck_enabled": attr.bool(default = False, doc = "Decide if a corresponding shellcheck_test target is generated"), + }, + implementation = _cf_sh_binary_implementation, + ) +@@ -256,18 +194,11 @@ + name = name, + **kwargs + ) +- if shellcheck_enabled: +- shellcheck_test( +- name = name + "_shellcheck", +- srcs = [":" + name], +- tags = ["shellcheck"], +- visibility = ["//visibility:private"], +- ) + + cf_sh_library = macro( + inherit_attrs = sh_library, + attrs = { +- "shellcheck_enabled": attr.bool(configurable = False, default = True, doc = "Decide if a corresponding shellcheck_test target is generated"), ++ "shellcheck_enabled": attr.bool(default = False, doc = "Decide if a corresponding shellcheck_test target is generated"), + }, + implementation = _cf_sh_library_implementation, + ) diff --git a/tools/testutils/bazel-7-readiness/patches/0022-remove-cc-compatibility-proxy.patch b/tools/testutils/bazel-7-readiness/patches/0022-remove-cc-compatibility-proxy.patch new file mode 100644 index 00000000000..87fad3b26df --- /dev/null +++ b/tools/testutils/bazel-7-readiness/patches/0022-remove-cc-compatibility-proxy.patch @@ -0,0 +1,17 @@ +Description: Remove cc_compatibility_proxy extension call for Bazel 7 + Bazel 8 introduced @cc_compatibility_proxy to bridge C++ rules, but Bazel 7 in Debian + does not have the compatibility_proxy module extension in rules_cc. Remove the extension + call from toolchain/bazel.MODULE.bazel. +Author: Ying-Chun Liu (PaulLiu) +Forwarded: not-needed +Last-Update: 2026-07-05 + +Index: android-cuttlefish/base/cvd/toolchain/bazel.MODULE.bazel +=================================================================== +--- a/base/cvd/toolchain/bazel.MODULE.bazel ++++ b/base/cvd/toolchain/bazel.MODULE.bazel +@@ -1,2 +1,2 @@ +-cc_compatibility_proxy = use_extension("@rules_cc//cc:extensions.bzl", "compatibility_proxy") +-use_repo(cc_compatibility_proxy, "cc_compatibility_proxy") ++# cc_compatibility_proxy = use_extension("@rules_cc//cc:extensions.bzl", "compatibility_proxy") ++# use_repo(cc_compatibility_proxy, "cc_compatibility_proxy") diff --git a/tools/testutils/bazel-7-readiness/patches/0025-remove-unused-build-external-modules.patch b/tools/testutils/bazel-7-readiness/patches/0025-remove-unused-build-external-modules.patch new file mode 100644 index 00000000000..c7f964be24f --- /dev/null +++ b/tools/testutils/bazel-7-readiness/patches/0025-remove-unused-build-external-modules.patch @@ -0,0 +1,130 @@ +--- a/base/cvd/MODULE.bazel 2026-09-10 21:48:00.155816566 +0000 ++++ b/base/cvd/MODULE.bazel 2026-09-10 21:48:00.156377436 +0000 +@@ -10,11 +10,9 @@ + bazel_dep(name = "aspect_bazel_lib", version = "2.22.0") + bazel_dep(name = "boringssl", version = "0.20260813.0") + bazel_dep(name = "brotli") +-bazel_dep(name = "buildifier_prebuilt", version = "8.5.1.2") + bazel_dep(name = "crc32c") + bazel_dep(name = "curl") + bazel_dep(name = "cxx.rs", version = "1.0.194") +-bazel_dep(name = "depend_on_what_you_use", version = "1.0.0") + bazel_dep(name = "fmt", version = "11.2.0.bcr.1") + bazel_dep(name = "gflags") + bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf") +@@ -22,7 +20,6 @@ + bazel_dep(name = "googletest") + bazel_dep(name = "grpc") + bazel_dep(name = "grpc-proto") +-bazel_dep(name = "hermetic_cc_toolchain", version = "4.0.1") + bazel_dep(name = "icu", version = "76.1.bcr.1") + bazel_dep(name = "jsoncpp") + bazel_dep(name = "libarchive", version = "3.7.9") +@@ -39,7 +36,6 @@ + bazel_dep(name = "protobuf", version = "33.0") + bazel_dep(name = "rootcanal") + bazel_dep(name = "rules_cc", version = "0.2.19") +-bazel_dep(name = "rules_cuda") # CUDA support for NVENC (hermetic headers via redist_json, runtime dlopen) + bazel_dep(name = "rules_flex", version = "0.4") + bazel_dep(name = "rules_foreign_cc", version = "0.15.1") # this is normally an indirect dependency, but for bazel 9 we need a higher version + bazel_dep(name = "rules_java", version = "8.16.1") +--- a/base/cvd/build_external/build_external.MODULE.bazel 2026-09-10 21:48:00.156805596 +0000 ++++ b/base/cvd/build_external/build_external.MODULE.bazel 2026-09-10 21:48:00.157371406 +0000 +@@ -1,6 +1,6 @@ + include("//build_external/android_system_core:android_system_core.MODULE.bazel") + include("//build_external/android_system_extras:android_system_extras.MODULE.bazel") +-include("//build_external/android_tools_netsim:android_tools_netsim.MODULE.bazel") ++bazel_dep(name = "android_tools_netsim") + include("//build_external/arm_optimized_routines:arm_optimized_routines.MODULE.bazel") + include("//build_external/avb:avb.MODULE.bazel") + include("//build_external/brotli:brotli.MODULE.bazel") +@@ -8,61 +8,57 @@ + include("//build_external/c-ares:c-ares.MODULE.bazel") + include("//build_external/casimir:casimir.MODULE.bazel") + include("//build_external/crc32c:crc32c.MODULE.bazel") +-include("//build_external/crosvm:crosvm.MODULE.bazel") ++bazel_dep(name = "crosvm") + include("//build_external/curl:curl.MODULE.bazel") +-include("//build_external/dav1d:dav1d.MODULE.bazel") +-include("//build_external/dosfstools:dosfstools.MODULE.bazel") +-include("//build_external/e2fsprogs:e2fsprogs.MODULE.bazel") ++bazel_dep(name = "dosfstools") ++bazel_dep(name = "e2fsprogs") + include("//build_external/egl_headers:egl_headers.MODULE.bazel") + include("//build_external/expat:expat.MODULE.bazel") + include("//build_external/f2fs_tools:f2fs_tools.MODULE.bazel") + include("//build_external/fec_rs:fec_rs.MODULE.bazel") +-include("//build_external/freetype:freetype.MODULE.bazel") +-include("//build_external/fruit:fruit.MODULE.bazel") ++bazel_dep(name = "freetype") ++bazel_dep(name = "fruit") + include("//build_external/gflags:gflags.MODULE.bazel") +-include("//build_external/glslang:glslang.MODULE.bazel") +-include("//build_external/gfxstream:gfxstream.MODULE.bazel") ++bazel_dep(name = "gfxstream") + include("//build_external/googletest:googletest.MODULE.bazel") + include("//build_external/grpc-proto:grpc-proto.MODULE.bazel") + include("//build_external/grpc:grpc.MODULE.bazel") + include("//build_external/hedron_compile_commands:hedron_compile_commands.MODULE.bazel") + include("//build_external/jsoncpp:jsoncpp.MODULE.bazel") +-include("//build_external/libcbor:libcbor.MODULE.bazel") ++bazel_dep(name = "libcbor") + include("//build_external/libconfig:libconfig.MODULE.bazel") + include("//build_external/libdrm:libdrm.MODULE.bazel") + include("//build_external/libeigen:libeigen.MODULE.bazel") +-include("//build_external/libffi:libffi.MODULE.bazel") ++bazel_dep(name = "libffi") + include("//build_external/libjpeg_turbo:libjpeg_turbo.MODULE.bazel") + include("//build_external/libnl:libnl.MODULE.bazel") +-include("//build_external/libopenscreen:libopenscreen.MODULE.bazel") ++bazel_dep(name = "libopenscreen") + include("//build_external/libpffft:libpffft.MODULE.bazel") +-include("//build_external/libsrtp2:libsrtp2.MODULE.bazel") ++bazel_dep(name = "libsrtp2") + include("//build_external/libusb:libusb.MODULE.bazel") + include("//build_external/libuuid:libuuid.MODULE.bazel") +-include("//build_external/libvpx:libvpx.MODULE.bazel") ++bazel_dep(name = "libvpx") + include("//build_external/libwebm:libwebm.MODULE.bazel") + include("//build_external/libwebrtc:libwebrtc.MODULE.bazel") +-include("//build_external/libwebsockets:libwebsockets.MODULE.bazel") ++bazel_dep(name = "libwebsockets") + include("//build_external/libyuv:libyuv.MODULE.bazel") + include("//build_external/mako:mako.MODULE.bazel") + include("//build_external/markupsafe:markupsafe.MODULE.bazel") + include("//build_external/mesa:mesa.MODULE.bazel") + include("//build_external/mkbootimg:mkbootimg.MODULE.bazel") +-include("//build_external/ms-tpm-20-ref:ms-tpm-20-ref.MODULE.bazel") +-include("//build_external/mtools:mtools.MODULE.bazel") +-include("//build_external/nv_codec_headers:nv_codec_headers.MODULE.bazel") ++bazel_dep(name = "ms-tpm-20-ref") ++bazel_dep(name = "mtools") + include("//build_external/opengl_headers:opengl_headers.MODULE.bazel") + include("//build_external/pyyaml:pyyaml.MODULE.bazel") + include("//build_external/re2:re2.MODULE.bazel") + include("//build_external/rootcanal:rootcanal.MODULE.bazel") +-include("//build_external/rules_cuda:rules_cuda.MODULE.bazel") + include("//build_external/rules_m4:rules_m4.MODULE.bazel") + include("//build_external/sandboxed_api:sandboxed_api.MODULE.bazel") + include("//build_external/selinux:selinux.MODULE.bazel") +-include("//build_external/spirv_headers:spirv_headers.MODULE.bazel") +-include("//build_external/spirv_tools:spirv_tools.MODULE.bazel") +-include("//build_external/swiftshader:swiftshader.MODULE.bazel") ++bazel_dep(name = "spirv_headers") ++bazel_dep(name = "spirv_tools") ++bazel_dep(name = "swiftshader") + include("//build_external/vulkan_headers:vulkan_headers.MODULE.bazel") +-include("//build_external/wayland:wayland.MODULE.bazel") ++bazel_dep(name = "wayland") + include("//build_external/wmediumd:wmediumd.MODULE.bazel") + include("//build_external/xz:xz.MODULE.bazel") +--- a/base/cvd/toolchain/toolchain.MODULE.bazel 2026-09-10 21:48:00.157746786 +0000 ++++ b/base/cvd/toolchain/toolchain.MODULE.bazel 2026-09-10 21:48:00.158186046 +0000 +@@ -1,7 +1,4 @@ + include("//toolchain:bazel.MODULE.bazel") +-include("//toolchain:buildifier.MODULE.bazel") +-include("//toolchain:cuda.MODULE.bazel") + include("//toolchain:llvm.MODULE.bazel") + include("//toolchain:python.MODULE.bazel") + include("//toolchain:rust.MODULE.bazel") +-include("//toolchain:zig.MODULE.bazel") diff --git a/tools/testutils/bazel-7-readiness/run_bazel_7_readiness_test.sh b/tools/testutils/bazel-7-readiness/run_bazel_7_readiness_test.sh new file mode 100755 index 00000000000..a97cbd93580 --- /dev/null +++ b/tools/testutils/bazel-7-readiness/run_bazel_7_readiness_test.sh @@ -0,0 +1,173 @@ +#!/usr/bin/sh +set -e + +DEB_HOST_MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH` +HOME1=`mktemp -d` +CACHE1=`mktemp -d` +MOCKREPOS=`mktemp -d` +python3 `pwd`/tools/testutils/bazel-7-readiness/generate_mock_repos.py ${MOCKREPOS} + +for i in `pwd`/tools/testutils/bazel-7-readiness/patches/*.patch; do + patch -p1 < $i +done + +echo "#WORKSPACE" > base/cvd/WORKSPACE +mkdir -p ${MOCKREPOS}/googleapis/google/rpc +ln -sf /usr/lib/python3/dist-packages/google/rpc/status.proto ${MOCKREPOS}/googleapis/google/rpc/status.proto +ln -sf /usr/lib/python3/dist-packages/google/rpc/code.proto ${MOCKREPOS}/googleapis/google/rpc/code.proto + +cd base/cvd +trap "env HOME=${HOME1} bazel shutdown || true" EXIT + +env HOME=${HOME1} bazel build \ + --nobuild --linkopt="-Wl,--build-id=sha1" --spawn_strategy=local \ + --verbose_failures \ + --sandbox_debug \ + --repository_cache=${CACHE1} \ + --strip=never \ + --copt="-g" \ + --copt="-isystem/usr/include/jsoncpp" \ + --copt="-isystem/usr/include/libxml2" \ + --copt="-isystem/usr/include/freetype2" \ + --copt="-isystem/usr/include/libpng16" \ + --copt="-isystem/usr/include/android" \ + --copt="-isystem/usr/include/libdrm" \ + --linkopt="-L/usr/lib/${DEB_HOST_MULTIARCH}/android" \ + --linkopt="-Wl,-rpath,/usr/lib/${DEB_HOST_MULTIARCH}/android" \ + --linkopt="-z muldefs" \ + --noenable_workspace \ + --registry=file://${MOCKREPOS} \ + --check_direct_dependencies=off \ + --override_module=abseil-cpp=${MOCKREPOS}/abseil-cpp \ + --override_module=apple_support=${MOCKREPOS}/apple_support \ + --override_module=aspect_bazel_lib=${MOCKREPOS}/aspect_bazel_lib \ + --override_module=aspect_rules_lint=${MOCKREPOS}/aspect_rules_lint \ + --override_module=boringssl=${MOCKREPOS}/boringssl \ + --override_module=brotli=${MOCKREPOS}/brotli \ + --override_module=buildozer=${MOCKREPOS}/buildozer \ + --override_module=bzip2=${MOCKREPOS}/bzip2 \ + --override_module=c-ares=${MOCKREPOS}/c-ares \ + --override_module=crc32c=${MOCKREPOS}/crc32c \ + --override_module=curl=${MOCKREPOS}/curl \ + --override_module=cxx.rs=${MOCKREPOS}/cxx.rs \ + --override_module=fmt=${MOCKREPOS}/fmt \ + --override_module=freetype=${MOCKREPOS}/freetype \ + --override_module=gflags=${MOCKREPOS}/gflags \ + --override_module=googleapis=${MOCKREPOS}/googleapis \ + --override_module=googleapis-cc=${MOCKREPOS}/googleapis-cc \ + --override_module=googletest=${MOCKREPOS}/googletest \ + --override_module=grpc=${MOCKREPOS}/grpc \ + --override_module=grpc-proto=${MOCKREPOS}/grpc-proto \ + --override_module=hedron_compile_commands=${MOCKREPOS}/hedron_compile_commands \ + --override_module=icu=${MOCKREPOS}/icu \ + --override_module=jsoncpp=${MOCKREPOS}/jsoncpp \ + --override_module=libarchive=${MOCKREPOS}/libarchive \ + --override_module=libevent=${MOCKREPOS}/libevent \ + --override_module=libjpeg_turbo=${MOCKREPOS}/libjpeg_turbo \ + --override_module=libpng=${MOCKREPOS}/libpng \ + --override_module=libuuid=${MOCKREPOS}/libuuid \ + --override_module=libxml2=${MOCKREPOS}/libxml2 \ + --override_module=libzip=${MOCKREPOS}/libzip \ + --override_module=lz4=${MOCKREPOS}/lz4 \ + --override_module=nasm=${MOCKREPOS}/nasm \ + --override_module=pcre2=${MOCKREPOS}/pcre2 \ + --override_module=protobuf=${MOCKREPOS}/protobuf \ + --override_module=re2=${MOCKREPOS}/re2 \ + --override_module=rootcanal=${MOCKREPOS}/rootcanal \ + --override_module=rules_flex=${MOCKREPOS}/rules_flex \ + --override_module=rules_foreign_cc=${MOCKREPOS}/rules_foreign_cc \ + --override_module=rules_m4=${MOCKREPOS}/rules_m4 \ + --override_module=rules_nodejs=${MOCKREPOS}/rules_nodejs \ + --override_module=rules_proto_grpc_cpp=${MOCKREPOS}/rules_proto_grpc_cpp \ + --override_module=rules_proto_grpc_go=${MOCKREPOS}/rules_proto_grpc_go \ + --override_module=rules_rust=${MOCKREPOS}/rules_rust \ + --override_module=rules_shell=/usr/share/bazel/rules/shell \ + --override_repository=_main~_repo_rules~android_system_core=${MOCKREPOS}/android_system_core \ + --override_repository=android_system_core=${MOCKREPOS}/android_system_core \ + --override_repository=_main~_repo_rules~android_system_extras=${MOCKREPOS}/android_system_extras \ + --override_repository=android_system_extras=${MOCKREPOS}/android_system_extras \ + --override_module=android_tools_netsim=${MOCKREPOS}/android_tools_netsim \ + --override_repository=_main~_repo_rules~arm_optimized_routines=${MOCKREPOS}/arm_optimized_routines \ + --override_repository=arm_optimized_routines=${MOCKREPOS}/arm_optimized_routines \ + --override_repository=_main~_repo_rules~avb=${MOCKREPOS}/avb \ + --override_repository=avb=${MOCKREPOS}/avb \ + --override_repository=_main~_repo_rules~casimir=${MOCKREPOS}/casimir \ + --override_repository=casimir=${MOCKREPOS}/casimir \ + --override_module=crosvm=${MOCKREPOS}/crosvm \ + --override_module=dosfstools=${MOCKREPOS}/dosfstools \ + --override_module=e2fsprogs=${MOCKREPOS}/e2fsprogs \ + --override_repository=_main~_repo_rules~egl_headers=${MOCKREPOS}/egl_headers \ + --override_repository=egl_headers=${MOCKREPOS}/egl_headers \ + --override_repository=_main~_repo_rules~expat=${MOCKREPOS}/expat \ + --override_repository=expat=${MOCKREPOS}/expat \ + --override_repository=_main~_repo_rules~f2fs_tools=${MOCKREPOS}/f2fs_tools \ + --override_repository=f2fs_tools=${MOCKREPOS}/f2fs_tools \ + --override_repository=_main~_repo_rules~fec_rs=${MOCKREPOS}/fec_rs \ + --override_repository=fec_rs=${MOCKREPOS}/fec_rs \ + --override_module=fruit=${MOCKREPOS}/fruit \ + --override_module=gfxstream=${MOCKREPOS}/gfxstream \ + --override_module=libcbor=${MOCKREPOS}/libcbor \ + --override_repository=_main~_repo_rules~libconfig=${MOCKREPOS}/libconfig \ + --override_repository=libconfig=${MOCKREPOS}/libconfig \ + --override_repository=_main~_repo_rules~libdrm=${MOCKREPOS}/libdrm \ + --override_repository=libdrm=${MOCKREPOS}/libdrm \ + --override_repository=_main~_repo_rules~libeigen=${MOCKREPOS}/libeigen \ + --override_repository=libeigen=${MOCKREPOS}/libeigen \ + --override_module=libffi=${MOCKREPOS}/libffi \ + --override_repository=_main~_repo_rules~libnl=${MOCKREPOS}/libnl \ + --override_repository=libnl=${MOCKREPOS}/libnl \ + --override_module=libopenscreen=${MOCKREPOS}/libopenscreen \ + --override_repository=_main~_repo_rules~libpffft=${MOCKREPOS}/libpffft \ + --override_repository=libpffft=${MOCKREPOS}/libpffft \ + --override_module=libsrtp2=${MOCKREPOS}/libsrtp2 \ + --override_repository=_main~_repo_rules~libusb=${MOCKREPOS}/libusb \ + --override_repository=libusb=${MOCKREPOS}/libusb \ + --override_module=libvpx=${MOCKREPOS}/libvpx \ + --override_repository=_main~_repo_rules~libwebm=${MOCKREPOS}/libwebm \ + --override_repository=libwebm=${MOCKREPOS}/libwebm \ + --override_repository=_main~_repo_rules~libwebrtc=${MOCKREPOS}/libwebrtc \ + --override_repository=libwebrtc=${MOCKREPOS}/libwebrtc \ + --override_module=libwebsockets=${MOCKREPOS}/libwebsockets \ + --override_repository=_main~_repo_rules~libyuv=${MOCKREPOS}/libyuv \ + --override_repository=libyuv=${MOCKREPOS}/libyuv \ + --override_repository=_main~_repo_rules~mako=${MOCKREPOS}/mako \ + --override_repository=mako=${MOCKREPOS}/mako \ + --override_repository=_main~_repo_rules~markupsafe=${MOCKREPOS}/markupsafe \ + --override_repository=markupsafe=${MOCKREPOS}/markupsafe \ + --override_repository=_main~_repo_rules~mesa=${MOCKREPOS}/mesa \ + --override_repository=mesa=${MOCKREPOS}/mesa \ + --override_repository=_main~_repo_rules~mkbootimg=${MOCKREPOS}/mkbootimg \ + --override_repository=mkbootimg=${MOCKREPOS}/mkbootimg \ + --override_module=ms-tpm-20-ref=${MOCKREPOS}/ms-tpm-20-ref \ + --override_module=mtools=${MOCKREPOS}/mtools \ + --override_repository=_main~_repo_rules~opengl_headers=${MOCKREPOS}/opengl_headers \ + --override_repository=opengl_headers=${MOCKREPOS}/opengl_headers \ + --override_repository=_main~_repo_rules~pyyaml=${MOCKREPOS}/pyyaml \ + --override_repository=pyyaml=${MOCKREPOS}/pyyaml \ + --override_repository=_main~_repo_rules~selinux=${MOCKREPOS}/selinux \ + --override_repository=selinux=${MOCKREPOS}/selinux \ + --override_module=spirv_headers=${MOCKREPOS}/spirv_headers \ + --override_module=spirv_tools=${MOCKREPOS}/spirv_tools \ + --override_module=swiftshader=${MOCKREPOS}/swiftshader \ + --override_repository=_main~_repo_rules~vulkan_headers=${MOCKREPOS}/vulkan_headers \ + --override_repository=vulkan_headers=${MOCKREPOS}/vulkan_headers \ + --override_module=wayland=${MOCKREPOS}/wayland \ + --override_repository=_main~_repo_rules~wmediumd=${MOCKREPOS}/wmediumd \ + --override_repository=wmediumd=${MOCKREPOS}/wmediumd \ + --override_module=sandboxed_api=${MOCKREPOS}/sandboxed_api \ + --override_module=tinyxml2=${MOCKREPOS}/tinyxml2 \ + --override_module=tl-expected=${MOCKREPOS}/tl-expected \ + --override_module=toolchains_llvm=${MOCKREPOS}/toolchains_llvm \ + --override_module=xz=${MOCKREPOS}/xz \ + --override_module=zlib=${MOCKREPOS}/zlib \ + cuttlefish/host/commands/cvd:cvd \ + cuttlefish/host/commands/cvdalloc:cvdalloc \ + cuttlefish/host/commands/refresh_groups:cvd_refresh_groups \ + cuttlefish/host/commands/defaults:cf_defaults \ + cuttlefish/host/commands/assemble_cvd:assemble_cvd \ + cuttlefish/host/commands/start:cvd_internal_start \ + cuttlefish/host/commands/run_cvd:run_cvd \ + cuttlefish/host/commands/stop:cvd_internal_stop \ + cuttlefish/host/commands/status:cvd_internal_status \ + cuttlefish/host/commands/display:cvd_internal_display \ + cuttlefish/host/commands/host_bugreport:cvd_internal_host_bugreport From 754d9090df5cbce88e89eeba1c6df2ac0c7cdfc8 Mon Sep 17 00:00:00 2001 From: Ying-Chun Liu Date: Thu, 10 Sep 2026 21:38:03 +0000 Subject: [PATCH 2/2] .github: actions: add bazel-7-readiness test We also modify workflows/presubmit.yaml to run this action. Signed-off-by: Ying-Chun Liu --- .github/actions/bazel-7-readiness/action.yaml | 81 +++++++++++++++++++ .github/workflows/presubmit.yaml | 11 +++ 2 files changed, 92 insertions(+) create mode 100644 .github/actions/bazel-7-readiness/action.yaml diff --git a/.github/actions/bazel-7-readiness/action.yaml b/.github/actions/bazel-7-readiness/action.yaml new file mode 100644 index 00000000000..ac610f11973 --- /dev/null +++ b/.github/actions/bazel-7-readiness/action.yaml @@ -0,0 +1,81 @@ +name: 'Validate bazel 7 readiness' +runs: + using: "composite" + steps: + - name: Setup apt + run: | + apt-get update -y && apt-get upgrade -y && apt-get install -y sudo + sudo apt-get purge firefox + sudo apt-get update -y && sudo apt-get upgrade -y + shell: bash + - name: Install dependencies + run: | + sudo apt-get install -y xxd cmake libvpx-dev libopus-dev libaom-dev autoconf libtool + sudo apt-get install -y android-libbase-dev + sudo apt-get install -y android-libboringssl-dev + sudo apt-get install -y android-libcutils-dev + sudo apt-get install -y android-libext4-utils-dev + sudo apt-get install -y android-liblog-dev + sudo apt-get install -y android-libsparse-dev + sudo apt-get install -y android-libutils-dev + sudo apt-get install -y android-libziparchive-dev + sudo apt-get install -y android-sdk-platform-tools-common + sudo apt-get install -y bazel-rules-shell + sudo apt-get install -y config-package-dev + sudo apt-get install -y git + sudo apt-get install -y libabsl-dev + sudo apt-get install -y libarchive-dev + sudo apt-get install -y libbrotli-dev + sudo apt-get install -y libbz2-dev + sudo apt-get install -y libc-ares-dev + sudo apt-get install -y libcurl4-openssl-dev + sudo apt-get install -y libdrm-dev + sudo apt-get install -y libegl-dev + sudo apt-get install -y libevent-dev + sudo apt-get install -y libexpected-dev + sudo apt-get install -y libfmt-dev + sudo apt-get install -y libfreetype-dev + sudo apt-get install -y libgbm-dev + sudo apt-get install -y libgflags-dev + sudo apt-get install -y libgl-dev + sudo apt-get install -y libgles-dev + sudo apt-get install -y libgoogle-fruit-dev + sudo apt-get install -y libgoogle-glog-dev + sudo apt-get install -y libgrpc++-dev + sudo apt-get install -y libgrpc-dev + sudo apt-get install -y libgtest-dev + sudo apt-get install -y libicu-dev + sudo apt-get install -y libjpeg-dev + sudo apt-get install -y libjsoncpp-dev + sudo apt-get install -y liblz4-dev + sudo apt-get install -y liblzma-dev + sudo apt-get install -y libncurses-dev + sudo apt-get install -y libpcre2-dev + sudo apt-get install -y libpng-dev + sudo apt-get install -y libprotobuf-c-dev + sudo apt-get install -y libprotobuf-dev + sudo apt-get install -y libre2-dev + sudo apt-get install -y libssl-dev + sudo apt-get install -y libtinyxml2-dev + sudo apt-get install -y libvulkan-dev + sudo apt-get install -y libwayland-dev + sudo apt-get install -y libxml2-dev + sudo apt-get install -y libz3-dev + sudo apt-get install -y libzip-dev + sudo apt-get install -y mesa-common-dev + sudo apt-get install -y nasm + sudo apt-get install -y pkgconf + sudo apt-get install -y protobuf-compiler + sudo apt-get install -y protobuf-compiler-grpc + sudo apt-get install -y python3-googleapis-common-protos + sudo apt-get install -y uuid-dev + sudo apt-get install -y xsltproc + sudo apt-get install -y zlib1g-dev + shell: bash + - name: Install bazel + run: sudo apt-get install -y bazel-bootstrap + shell: bash + - name: Test whether package can build + run: | + ./tools/testutils/bazel-7-readiness/run_bazel_7_readiness_test.sh + shell: bash diff --git a/.github/workflows/presubmit.yaml b/.github/workflows/presubmit.yaml index 42da04ef407..f31ac9c132d 100644 --- a/.github/workflows/presubmit.yaml +++ b/.github/workflows/presubmit.yaml @@ -228,6 +228,17 @@ jobs: with: name: cvd-unit-tests-logs path: base/cvd/bazel-out/k8-fastbuild/testlogs + bazel-7-readiness: + runs-on: ubuntu-24.04 + container: + image: debian:unstable + steps: + - name: Checkout repository + uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675 # aka v2 + with: + persist-credentials: false + - name: Check bazel 7 readiness + uses: ./.github/actions/bazel-7-readiness bazel-9-readiness: runs-on: ubuntu-24.04 steps: