From 46250dce110effc1a56d76911cc8da3a15bc9ea6 Mon Sep 17 00:00:00 2001 From: Rin Kuryloski Date: Mon, 17 Jun 2024 18:14:46 +0200 Subject: [PATCH] ensure that csv and json elixir deps are embedded in the cli escript also set 'cfg =' appropriately --- bazel/elixir/elixir_bytecode.bzl | 14 +++--- bazel/elixir/mix_archive_extract.bzl | 67 ++++++++++++++++++++++++++++ deps/rabbitmq_cli/BUILD.bazel | 47 ++++++++++++------- 3 files changed, 105 insertions(+), 23 deletions(-) create mode 100644 bazel/elixir/mix_archive_extract.bzl diff --git a/bazel/elixir/elixir_bytecode.bzl b/bazel/elixir/elixir_bytecode.bzl index d44779785e65..c4b3d306f14b 100644 --- a/bazel/elixir/elixir_bytecode.bzl +++ b/bazel/elixir/elixir_bytecode.bzl @@ -50,13 +50,13 @@ set -x erl_libs_path = erl_libs_path, env = env, setup = ctx.attr.setup, - elixirc = ctx.executable._compiler.path, + elixirc = ctx.executable._elixirc.path, out_dir = ebin.path, elixirc_opts = " ".join([shell.quote(opt) for opt in ctx.attr.elixirc_opts]), srcs = " ".join([f.path for f in ctx.files.srcs]), ) - compiler_runfiles = ctx.attr._compiler[DefaultInfo].default_runfiles + compiler_runfiles = ctx.attr._elixirc[DefaultInfo].default_runfiles inputs = depset( direct = ctx.files.srcs + erl_libs_files, @@ -70,7 +70,7 @@ set -x outputs = [ebin], command = script, mnemonic = "ELIXIRC", - tools = [ctx.executable._compiler], + tools = [ctx.executable._elixirc], ) return [ @@ -97,12 +97,10 @@ elixir_bytecode = rule( mandatory = True, ), "setup": attr.string(), - "_compiler": attr.label( - default = Label("@rules_elixir//tools:elixirc"), - allow_single_file = True, + "_elixirc": attr.label( + default = Label("@rules_elixir//tools:elixirc_wrapper"), executable = True, - cfg = "exec", + cfg = "target", ), }, - # toolchains = ["@rules_elixir//:toolchain_type"], ) diff --git a/bazel/elixir/mix_archive_extract.bzl b/bazel/elixir/mix_archive_extract.bzl new file mode 100644 index 000000000000..8683da3c6e46 --- /dev/null +++ b/bazel/elixir/mix_archive_extract.bzl @@ -0,0 +1,67 @@ +load( + "@rules_erlang//:erlang_app_info.bzl", + "ErlangAppInfo", + "flat_deps", +) +load( + "@rules_erlang//:util.bzl", + "path_join", +) + +def _impl(ctx): + ebin = ctx.actions.declare_directory(path_join(ctx.attr.app_name, "ebin")) + + script = """set -euo pipefail + +DEST="$(mktemp -d)" +unzip -q -d "$DEST" {archive} +cp "$DEST"/{app_name}/ebin/* {ebin} +""".format( + archive = ctx.file.archive.path, + app_name = ctx.attr.app_name, + ebin = ebin.path, +) + + ctx.actions.run_shell( + inputs = ctx.files.archive, + outputs = [ebin], + command = script, + mnemonic = "MixArchiveExtract", + ) + + deps = flat_deps(ctx.attr.deps) + + runfiles = ctx.runfiles([ebin]) + for dep in ctx.attr.deps: + runfiles = runfiles.merge(dep[DefaultInfo].default_runfiles) + + return [ + DefaultInfo( + files = depset([ebin]), + runfiles = runfiles, + ), + ErlangAppInfo( + app_name = ctx.attr.app_name, + extra_apps = ctx.attr.extra_apps, + include = [], + beam = [ebin], + priv = [], + license_files = [], + srcs = ctx.files.srcs, + deps = deps, + ) + ] + +mix_archive_extract = rule( + implementation = _impl, + attrs = { + "app_name": attr.string(mandatory = True), + "extra_apps": attr.string_list(), + "deps": attr.label_list(providers = [ErlangAppInfo]), + "archive": attr.label( + allow_single_file = [".ez"], + ), + "srcs": attr.label_list(), + }, + provides = [ErlangAppInfo], +) diff --git a/deps/rabbitmq_cli/BUILD.bazel b/deps/rabbitmq_cli/BUILD.bazel index 740c1365b4e5..136beb0f59a0 100644 --- a/deps/rabbitmq_cli/BUILD.bazel +++ b/deps/rabbitmq_cli/BUILD.bazel @@ -32,6 +32,10 @@ load( "//bazel/elixir:mix_archive_build.bzl", "mix_archive_build", ) +load( + "//bazel/elixir:mix_archive_extract.bzl", + "mix_archive_extract", +) mix_archive_build( name = "csv_ez", @@ -40,6 +44,16 @@ mix_archive_build( archives = ["@hex//:archive"], ) +mix_archive_extract( + name = "csv", + srcs = ["@csv//:sources"], + app_name = "csv", + archive = ":csv_ez", + deps = [ + "@rules_elixir//elixir", + ], +) + mix_archive_build( name = "json_ez", srcs = ["@json//:sources"], @@ -47,6 +61,17 @@ mix_archive_build( archives = ["@hex//:archive"], ) +mix_archive_extract( + name = "json", + srcs = ["@json//:sources"], + app_name = "json", + archive = ":json_ez", + deps = [ + "@rules_elixir//elixir", + "@rules_elixir//elixir:logger", + ], +) + mix_archive_build( name = "amqp_ez", testonly = True, @@ -93,6 +118,8 @@ SRCS = glob([ ]) DEPS = [ + ":csv", + ":json", "//deps/rabbit_common:erlang_app", "@observer_cli//:erlang_app", "@stdout_formatter//:erlang_app", @@ -114,10 +141,6 @@ elixir_bytecode( "LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8", }, - ez_deps = [ - ":csv.ez", - ":json.ez", - ], setup = """\ mkdir -p _build/$MIX_ENV/lib/csv cp -RL $ERL_LIBS/csv/ebin _build/$MIX_ENV/lib/csv @@ -133,6 +156,7 @@ app_file( app_name = APP_NAME, app_version = APP_VERSION, modules = [":beam_files"], + # mix escripts do not include dependencies in the applications key deps = [ "@rules_elixir//elixir", "@rules_elixir//elixir:logger", @@ -225,6 +249,7 @@ app_file( "Elixir." + name for name in _TEST_MODULES ], + # mix escripts do not include dependencies in the applications key deps = [ "@rules_elixir//elixir", "@rules_elixir//elixir:logger", @@ -285,13 +310,11 @@ plt( "public_key", "runtime_tools", ], - ez_deps = [ - ":csv_ez", - ":json_ez", - ], ignore_warnings = True, libs = ["@rules_elixir//elixir:elixir"], deps = [ + ":csv", + ":json", "//deps/rabbit:erlang_app", "//deps/rabbit_common:erlang_app", "@rules_elixir//elixir", @@ -328,8 +351,6 @@ ex_unit_test( }, ez_deps = [ ":amqp.ez", - ":csv.ez", - ":json.ez", ":temp.ez", ":x509.ez", ], @@ -388,16 +409,12 @@ elixir_bytecode( "LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8", }, - ez_deps = [ - ":csv.ez", - ":json.ez", - ], setup = """\ mkdir -p _build/$MIX_ENV/lib/csv cp -RL $ERL_LIBS/csv/ebin _build/$MIX_ENV/lib/csv """, + tags = ["manual"], deps = DEPS + [ "//deps/rabbit:erlang_app", ], - tags = ["manual"], )