diff options
author | Rin Kuryloski <kuryloskip@vmware.com> | 2023-05-04 08:31:54 +0200 |
---|---|---|
committer | Rin Kuryloski <kuryloskip@vmware.com> | 2023-05-12 08:26:42 +0200 |
commit | 19f4abd55b0d25b61feb75ff4447b75490fe0700 (patch) | |
tree | 638e4a784f54c256fcc3a3ae06d80be06512cf07 | |
parent | 45520436e8ed9f5f9f4d5cb8d25d054699ede716 (diff) | |
download | rabbitmq-server-git-19f4abd55b0d25b61feb75ff4447b75490fe0700.tar.gz |
Build cli deps as .ez archives
This provides an elixir/erlang agnostic way of providing them other
erlang rules
-rw-r--r-- | bazel/elixir/mix_archive_build.bzl | 60 | ||||
-rw-r--r-- | deps/rabbitmq_cli/BUILD.bazel | 28 | ||||
-rw-r--r-- | deps/rabbitmq_cli/rabbitmqctl.bzl | 2 | ||||
-rw-r--r-- | deps/rabbitmq_cli/rabbitmqctl_test.bzl | 4 |
4 files changed, 68 insertions, 26 deletions
diff --git a/bazel/elixir/mix_archive_build.bzl b/bazel/elixir/mix_archive_build.bzl index 9652e0f1de..adc3b15de6 100644 --- a/bazel/elixir/mix_archive_build.bzl +++ b/bazel/elixir/mix_archive_build.bzl @@ -1,7 +1,4 @@ -load( - "@rules_erlang//:util.bzl", - "path_join", -) +load("@bazel_skylib//lib:shell.bzl", "shell") load( "@rules_erlang//private:util.bzl", "additional_file_dest_relative_path", @@ -20,24 +17,20 @@ def _impl(ctx): out = ctx.actions.declare_file(ctx.attr.out.name) mix_invocation_dir = ctx.actions.declare_directory("{}_mix".format(ctx.label.name)) - package_dir = path_join( - ctx.label.workspace_root, - ctx.label.package, - ) - copy_srcs_commands = [] - for src in ctx.files.srcs: - dest = additional_file_dest_relative_path(ctx.label, src) - copy_srcs_commands.extend([ - 'mkdir -p "$(dirname ${{MIX_INVOCATION_DIR}}/{dest})"'.format( - dest = dest, - ), - 'cp {flags}"{src}" "${{MIX_INVOCATION_DIR}}/{dest}"'.format( - flags = "-r " if src.is_directory else "", - src = src.path, - dest = dest, - ), - ]) + for src in ctx.attr.srcs: + for src_file in src[DefaultInfo].files.to_list(): + dest = additional_file_dest_relative_path(src.label, src_file) + copy_srcs_commands.extend([ + 'mkdir -p "$(dirname ${{MIX_INVOCATION_DIR}}/{dest})"'.format( + dest = dest, + ), + 'cp {flags}"{src}" "${{MIX_INVOCATION_DIR}}/{dest}"'.format( + flags = "-r " if src_file.is_directory else "", + src = src_file.path, + dest = dest, + ), + ]) script = """set -euo pipefail @@ -60,11 +53,23 @@ MIX_INVOCATION_DIR="{mix_invocation_dir}" {copy_srcs_commands} +ORIGINAL_DIR=$PWD cd "${{MIX_INVOCATION_DIR}}" export HOME="${{PWD}}" export MIX_ENV=prod export ERL_COMPILER_OPTIONS=deterministic -"${{ABS_ELIXIR_HOME}}"/bin/mix archive.build -o "${{ABS_OUT_PATH}}" +for archive in {archives}; do + "${{ABS_ELIXIR_HOME}}"/bin/mix archive.install --force $ORIGINAL_DIR/$archive +done +if [[ -n "{ez_deps}" ]]; then + mkdir -p _build/${{MIX_ENV}}/lib + for ez_dep in {ez_deps}; do + unzip -q $ORIGINAL_DIR/$ez_dep -d _build/${{MIX_ENV}}/lib + done +fi +"${{ABS_ELIXIR_HOME}}"/bin/mix archive.build \\ + --no-deps-check \\ + -o "${{ABS_OUT_PATH}}" # remove symlinks from the _build directory since it # is an unused output, and bazel does not allow them @@ -75,7 +80,8 @@ find . -type l -delete elixir_home = elixir_home, mix_invocation_dir = mix_invocation_dir.path, copy_srcs_commands = "\n".join(copy_srcs_commands), - package_dir = package_dir, + archives = " ".join([shell.quote(a.path) for a in ctx.files.archives]), + ez_deps = " ".join([shell.quote(a.path) for a in ctx.files.ez_deps]), out = out.path, ) @@ -84,6 +90,8 @@ find . -type l -delete transitive = [ erlang_runfiles.files, elixir_runfiles.files, + depset(ctx.files.archives), + depset(ctx.files.ez_deps), ], ) @@ -110,6 +118,12 @@ mix_archive_build = rule( mandatory = True, allow_files = True, ), + "archives": attr.label_list( + allow_files = [".ez"], + ), + "ez_deps": attr.label_list( + allow_files = [".ez"], + ), "out": attr.output(), }, toolchains = [ diff --git a/deps/rabbitmq_cli/BUILD.bazel b/deps/rabbitmq_cli/BUILD.bazel index b2dcc1c3e0..0f66ea3576 100644 --- a/deps/rabbitmq_cli/BUILD.bazel +++ b/deps/rabbitmq_cli/BUILD.bazel @@ -5,6 +5,34 @@ load(":rabbitmqctl_test.bzl", "rabbitmqctl_test") load("//:rabbitmq_home.bzl", "rabbitmq_home") load("//:rabbitmq_run.bzl", "rabbitmq_run") load("//:rabbitmq.bzl", "RABBITMQ_DIALYZER_OPTS", "STARTS_BACKGROUND_BROKER_TAG", "without") +load( + "@rabbitmq-server//bazel/elixir:mix_archive_build.bzl", + "mix_archive_build", +) + +mix_archive_build( + name = "parallel_stream_ez", + srcs = ["@parallel_stream//:sources"], + archives = ["@hex//:archive"], + out = "parallel_stream.ez", +) + +mix_archive_build( + name = "csv_ez", + srcs = ["@csv//:sources"], + archives = ["@hex//:archive"], + ez_deps = [ + ":parallel_stream_ez", + ], + out = "csv.ez", +) + +mix_archive_build( + name = "json_ez", + srcs = ["@json//:sources"], + archives = ["@hex//:archive"], + out = "json.ez", +) # Note: All the various rabbitmq-* scripts are just copies of rabbitmqctl rabbitmqctl( diff --git a/deps/rabbitmq_cli/rabbitmqctl.bzl b/deps/rabbitmq_cli/rabbitmqctl.bzl index 35f330f9d9..10890d3457 100644 --- a/deps/rabbitmq_cli/rabbitmqctl.bzl +++ b/deps/rabbitmq_cli/rabbitmqctl.bzl @@ -149,7 +149,7 @@ find . -type l -delete escript_path = escript.path, ebin_dir = ebin.path, consolidated_dir = consolidated.path, - archives = "".join([shell.quote(a.path) for a in ctx.files.archives]), + archives = " ".join([shell.quote(a.path) for a in ctx.files.archives]), precompiled_deps = " ".join([ dep[ErlangAppInfo].app_name for dep in ctx.attr.deps diff --git a/deps/rabbitmq_cli/rabbitmqctl_test.bzl b/deps/rabbitmq_cli/rabbitmqctl_test.bzl index f3ef9f5169..3ba076f2f9 100644 --- a/deps/rabbitmq_cli/rabbitmqctl_test.bzl +++ b/deps/rabbitmq_cli/rabbitmqctl_test.bzl @@ -139,7 +139,7 @@ set -x elixir_home = elixir_home, package_dir = package_dir, deps_dir = deps_dir, - archives = "".join([shell.quote(a.short_path) for a in ctx.files.archives]), + archives = " ".join([shell.quote(a.short_path) for a in ctx.files.archives]), precompiled_deps = precompiled_deps, rabbitmq_run_cmd = ctx.attr.rabbitmq_run[DefaultInfo].files_to_run.executable.short_path, ) @@ -196,7 +196,7 @@ exit /b 1 elixir_home = windows_path(elixir_home), package_dir = windows_path(ctx.label.package), deps_dir = deps_dir, - archives = "".join([shell.quote(a.short_path) for a in ctx.files.archives]), + archives = " ".join([shell.quote(a.short_path) for a in ctx.files.archives]), precompiled_deps = precompiled_deps, rabbitmq_run_cmd = ctx.attr.rabbitmq_run[DefaultInfo].files_to_run.executable.short_path, ) |