From 11fd866247549505b96a323f3d4690d62345c298 Mon Sep 17 00:00:00 2001 From: Philip Kuryloski Date: Thu, 30 Sep 2021 15:49:08 +0200 Subject: Add the bazel target :package-generic-unix Which can be used to build the artifact with bazel --- BUILD.bazel | 106 ++++++++++++------ WORKSPACE.bazel | 13 +++ deps/rabbit/BUILD.bazel | 70 ++++++++++++ deps/rabbitmq_web_dispatch/BUILD.bazel | 13 +-- dist.bzl | 199 +++++++++++++++++++++++++++++++++ rabbitmq.bzl | 39 +++++++ rabbitmq_home.bzl | 62 +++++----- 7 files changed, 419 insertions(+), 83 deletions(-) create mode 100644 dist.bzl diff --git a/BUILD.bazel b/BUILD.bazel index 9ea70fc6e3..4645c3c516 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,9 +1,12 @@ +load("@rules_pkg//:pkg.bzl", "pkg_tar") load("@bazel-erlang//:dialyze.bzl", "plt") load("@bazel-erlang//:shell.bzl", "shell") load("elixir_home.bzl", "elixir_home") load(":rabbitmq_home.bzl", "rabbitmq_home") load(":rabbitmq_run.bzl", "rabbitmq_run", "rabbitmq_run_command") load(":rabbitmqctl.bzl", "rabbitmqctl") +load(":rabbitmq.bzl", "ALL_PLUGINS", "APP_VERSION") +load(":dist.bzl", "collect_licenses", "versioned_rabbitmq_home") exports_files([ "scripts/bazel/rabbitmq-run.sh", @@ -37,42 +40,6 @@ plt( visibility = ["//visibility:public"], ) -ALL_PLUGINS = [ - "//deps/rabbit:bazel_erlang_lib", - "//deps/rabbitmq_amqp1_0:bazel_erlang_lib", - "//deps/rabbitmq_auth_backend_cache:bazel_erlang_lib", - "//deps/rabbitmq_auth_backend_http:bazel_erlang_lib", - "//deps/rabbitmq_auth_backend_ldap:bazel_erlang_lib", - "//deps/rabbitmq_auth_backend_oauth2:bazel_erlang_lib", - "//deps/rabbitmq_auth_mechanism_ssl:bazel_erlang_lib", - "//deps/rabbitmq_consistent_hash_exchange:bazel_erlang_lib", - "//deps/rabbitmq_event_exchange:bazel_erlang_lib", - "//deps/rabbitmq_federation:bazel_erlang_lib", - "//deps/rabbitmq_federation_management:bazel_erlang_lib", - "//deps/rabbitmq_jms_topic_exchange:bazel_erlang_lib", - "//deps/rabbitmq_management:bazel_erlang_lib", - "//deps/rabbitmq_mqtt:bazel_erlang_lib", - "//deps/rabbitmq_peer_discovery_aws:bazel_erlang_lib", - "//deps/rabbitmq_peer_discovery_consul:bazel_erlang_lib", - "//deps/rabbitmq_peer_discovery_etcd:bazel_erlang_lib", - "//deps/rabbitmq_peer_discovery_k8s:bazel_erlang_lib", - "//deps/rabbitmq_prometheus:bazel_erlang_lib", - "//deps/rabbitmq_random_exchange:bazel_erlang_lib", - "//deps/rabbitmq_recent_history_exchange:bazel_erlang_lib", - "//deps/rabbitmq_sharding:bazel_erlang_lib", - "//deps/rabbitmq_shovel:bazel_erlang_lib", - "//deps/rabbitmq_shovel_management:bazel_erlang_lib", - "//deps/rabbitmq_stomp:bazel_erlang_lib", - "//deps/rabbitmq_stream:bazel_erlang_lib", - "//deps/rabbitmq_stream_management:bazel_erlang_lib", - "//deps/rabbitmq_top:bazel_erlang_lib", - "//deps/rabbitmq_tracing:bazel_erlang_lib", - "//deps/rabbitmq_trust_store:bazel_erlang_lib", - "//deps/rabbitmq_web_dispatch:bazel_erlang_lib", - "//deps/rabbitmq_web_mqtt:bazel_erlang_lib", - "//deps/rabbitmq_web_stomp:bazel_erlang_lib", -] - rabbitmq_home( name = "broker-home", plugins = ALL_PLUGINS, @@ -132,3 +99,70 @@ shell( name = "repl", deps = ALL_PLUGINS, ) + +collect_licenses( + name = "licenses", + srcs = glob( + ["LICENSE*"], + exclude = [ + "LICENSE.md", + "LICENSE.txt", + ], + ), + deps = ALL_PLUGINS, +) + +versioned_rabbitmq_home( + name = "dist-home", + plugins = ALL_PLUGINS, +) + +# need to add the INSTALL file + +pkg_tar( + name = "license-files", + srcs = [ + ":licenses", + "//deps/rabbit:INSTALL", + ], + visibility = ["//visibility:public"], +) + +pkg_tar( + name = "scripts", + srcs = [ + "scripts/bash_autocomplete.sh", + "scripts/rabbitmq-script-wrapper", + "scripts/rabbitmqctl-autocomplete.sh", + "scripts/zsh_autocomplete.sh", + ], + package_dir = "scripts", + visibility = ["//visibility:public"], +) + +pkg_tar( + name = "release-notes", + srcs = glob([ + "release-notes/*.md", + "release-notes/*.txt", + ]), + package_dir = "release-notes", + visibility = ["//visibility:public"], +) + +pkg_tar( + name = "package-generic-unix", + srcs = [ + ":dist-home", + ], + extension = "tar.xz", + package_dir = "rabbitmq_server-{}".format(APP_VERSION), + strip_prefix = "dist-home", + visibility = ["//visibility:public"], + deps = [ + ":license-files", + ":release-notes", + ":scripts", + "//deps/rabbit:manpages-dir", + ], +) diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 29850175ef..006f3b6b31 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -1,6 +1,19 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") +http_archive( + name = "rules_pkg", + sha256 = "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz", + "https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz", + ], +) + +load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies") + +rules_pkg_dependencies() + http_archive( name = "io_buildbuddy_buildbuddy_toolchain", sha256 = "48546946879b1fd2dcba327ba15776c822f2ce9a9ef1077be9bf3ecadcc1564a", diff --git a/deps/rabbit/BUILD.bazel b/deps/rabbit/BUILD.bazel index 01ec856b50..01be7ae4e2 100644 --- a/deps/rabbit/BUILD.bazel +++ b/deps/rabbit/BUILD.bazel @@ -23,6 +23,7 @@ exports_files([ "scripts/rabbitmq-queues", "scripts/rabbitmq-server", "scripts/rabbitmqctl", + "INSTALL", ]) _APP_ENV = """[ @@ -997,3 +998,72 @@ assert_suites( suites, glob(["test/**/*_SUITE.erl"]), ) + +filegroup( + name = "manpages", + srcs = glob([ + "docs/*.1", + "docs/*.2", + "docs/*.3", + "docs/*.4", + "docs/*.5", + "docs/*.6", + "docs/*.7", + "docs/*.8", + "docs/*.9", + ]), +) + +genrule( + name = "manpages-dir", + srcs = [":manpages"], + outs = ["manpages.tar"], + cmd = """set -euo pipefail + +DESTDIR=manpages-tmp/share/man +mkdir -p $${DESTDIR} +for mp in $(SRCS); do + section=$${mp##*.} + mkdir -p $${DESTDIR}/man$$section + gzip < $$mp \\ + > $${DESTDIR}/man$$section/$$(basename $$mp).gz +done +tar --strip-components 1 -cf $@ manpages-tmp/* +rm -dr manpages-tmp +""", + visibility = ["//visibility:public"], +) + +genrule( + name = "web-manpages", + srcs = [":manpages"], + outs = ["web-manpages.tar"], + cmd = """set -euo pipefail + +mkdir web-manpages-tmp +for mp in $(SRCS); do + d=web-manpages-tmp/$$(basename $${mp}).html + echo "Converting $$mp to $$d..." + mandoc -T html -O 'fragment,man=%N.%S.html' "$$mp" | \\ + awk '\\ + /^$$/ { remove_table=1; next; } \\ + /^
$$/ { remove_table=1; next; } \\ + /^<\\/table>$$/ { if (remove_table) { remove_table=0; next; } } \\ + { if (!remove_table) { \\ + line=$$0; \\ + gsub(/

/, "

", line); \\ + gsub(/

/, "

", line); \\ + gsub(/class="D1"/, "class=\"D1 lang-bash\"", line); \\ + gsub(/class="Bd Bd-indent"/, "class=\"Bd Bd-indent lang-bash\"", line); \\ + gsub(/&#[xX]201[cCdD];/, "\\"", line); \\ + print line; \\ + } } \\ + ' > "$$d" +done +tar --strip-components 1 -cf $@ web-manpages-tmp/* +rm -dr web-manpages-tmp +""", + visibility = ["//visibility:public"], +) diff --git a/deps/rabbitmq_web_dispatch/BUILD.bazel b/deps/rabbitmq_web_dispatch/BUILD.bazel index d8395dfaab..096d91d0cd 100644 --- a/deps/rabbitmq_web_dispatch/BUILD.bazel +++ b/deps/rabbitmq_web_dispatch/BUILD.bazel @@ -1,4 +1,3 @@ -load("@bazel-erlang//:bazel_erlang_lib.bzl", "erlang_lib", "test_erlang_lib") load("@bazel-erlang//:xref.bzl", "xref") load("@bazel-erlang//:dialyze.bzl", "dialyze", "plt") load("//:rabbitmq_home.bzl", "rabbitmq_home") @@ -9,6 +8,7 @@ load( "RABBITMQ_DIALYZER_OPTS", "assert_suites", "rabbitmq_integration_suite", + "rabbitmq_lib", "rabbitmq_suite", ) @@ -28,16 +28,7 @@ DEPS = [ "@cowboy//:bazel_erlang_lib", ] -erlang_lib( - app_description = APP_DESCRIPTION, - app_module = APP_MODULE, - app_name = APP_NAME, - app_version = APP_VERSION, - extra_apps = EXTRA_APPS, - deps = DEPS, -) - -test_erlang_lib( +rabbitmq_lib( app_description = APP_DESCRIPTION, app_module = APP_MODULE, app_name = APP_NAME, diff --git a/dist.bzl b/dist.bzl new file mode 100644 index 0000000000..98eed9d1a9 --- /dev/null +++ b/dist.bzl @@ -0,0 +1,199 @@ +load("@bazel-erlang//:erlang_home.bzl", "ErlangHomeProvider") +load("@bazel-erlang//:bazel_erlang_lib.bzl", "ErlangLibInfo", "flat_deps", "path_join") +load("@bazel-erlang//:ct.bzl", "additional_file_dest_relative_path") +load( + ":rabbitmq_home.bzl", + "RABBITMQ_HOME_ATTRS", + "RabbitmqHomeInfo", + "flatten", + "link_escript", + "unique_versions", +) + +def _collect_licenses_impl(ctx): + srcs = ctx.files.srcs + flatten([ + d[ErlangLibInfo].license_files + for d in flat_deps(ctx.attr.deps) + ]) + + outs = {} + for src in srcs: + name = src.basename + if name not in outs: + dest = ctx.actions.declare_file(name) + ctx.actions.run( + inputs = [src], + outputs = [dest], + executable = "cp", + arguments = [ + src.path, + dest.path, + ], + ) + outs[name] = dest + + return [ + DefaultInfo( + files = depset(sorted(outs.values())), + ), + ] + +collect_licenses = rule( + implementation = _collect_licenses_impl, + attrs = { + "srcs": attr.label_list(allow_files = True), + "deps": attr.label_list(providers = [ErlangLibInfo]), + }, +) + +def _copy_script(ctx, script): + dest = ctx.actions.declare_file(path_join(ctx.label.name, "sbin", script.basename)) + ctx.actions.expand_template( + template = script, + output = dest, + substitutions = { + "SYS_PREFIX=": "SYS_PREFIX=${RABBITMQ_HOME}", + }, + ) + return dest + +def _extract_version(p): + return "erl -eval '{ok, [{application, _, AppInfo}]} = file:consult(\"" + p + "\"), Version = proplists:get_value(vsn, AppInfo), io:fwrite(Version), halt().' -noshell" + +def _app_file(plugin_lib_info): + for f in plugin_lib_info.beam: + if f.basename.endswith(".app"): + return f + fail(".app file not found in {}".format(plugin_lib_info)) + +def _plugins_dir(ctx, plugins): + plugins_dir = ctx.actions.declare_directory(path_join(ctx.label.name, "plugins")) + + erlang_home = ctx.attr._erlang_home[ErlangHomeProvider].path + + inputs = [] + + commands = ["set -euo pipefail", ""] + + for plugin in plugins: + lib_info = plugin[ErlangLibInfo] + app_file = _app_file(lib_info) + extract_version = _extract_version(app_file.path) + commands.append("PLUGIN_VERSION=$({erlang_home}/bin/{extract_version})".format(erlang_home = erlang_home, extract_version = extract_version)) + + commands.append( + "echo \"Assembling {lib_name}-$PLUGIN_VERSION...\"".format( + lib_name = lib_info.lib_name, + ), + ) + + commands.append( + "mkdir -p {plugins_dir}/{lib_name}-$PLUGIN_VERSION/include".format( + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + ), + ) + for f in lib_info.include: + commands.append( + "cp {src} {plugins_dir}/{lib_name}-$PLUGIN_VERSION/include/{dest}".format( + src = f.path, + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + dest = f.basename, + ), + ) + inputs.extend(lib_info.include) + + commands.append( + "mkdir -p {plugins_dir}/{lib_name}-$PLUGIN_VERSION/ebin".format( + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + ), + ) + for f in lib_info.beam: + if f.is_directory: + if f.basename != "ebin": + fail("{} contains a directory in 'beam' that is not an ebin dir".format(lib_info.lib_name)) + commands.append( + "cp -R {src} {plugins_dir}/{lib_name}-$PLUGIN_VERSION".format( + src = f.path, + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + ), + ) + else: + commands.append( + "cp {src} {plugins_dir}/{lib_name}-$PLUGIN_VERSION/ebin/{dest}".format( + src = f.path, + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + dest = f.basename, + ), + ) + inputs.extend(lib_info.beam) + + for f in lib_info.priv: + p = additional_file_dest_relative_path(plugin.label, f) + commands.append( + "mkdir -p $(dirname {plugins_dir}/{lib_name}-$PLUGIN_VERSION/{dest}) && cp {src} {plugins_dir}/{lib_name}-$PLUGIN_VERSION/{dest}".format( + src = f.path, + plugins_dir = plugins_dir.path, + lib_name = lib_info.lib_name, + dest = p, + ), + ) + inputs.extend(lib_info.priv) + + commands.append("") + + ctx.actions.run_shell( + inputs = inputs, + outputs = [plugins_dir], + command = "\n".join(commands), + ) + + return plugins_dir + +def _versioned_rabbitmq_home_impl(ctx): + plugins = flat_deps(ctx.attr.plugins) + + erlang_versions = unique_versions(plugins) + if len(erlang_versions) > 1: + fail("plugins do not have a unified erlang version", erlang_versions) + + scripts = [_copy_script(ctx, script) for script in ctx.files._scripts] + + rabbitmq_ctl_copies = [ + "rabbitmq-diagnostics", + "rabbitmq-plugins", + "rabbitmq-queues", + "rabbitmq-streams", + "rabbitmq-upgrade", + "rabbitmqctl", + ] + escripts = [link_escript(ctx, escript) for escript in rabbitmq_ctl_copies] + + plugins_dir = _plugins_dir(ctx, plugins) + + rabbitmqctl = None + for script in scripts: + if script.basename == "rabbitmqctl": + rabbitmqctl = script + if rabbitmqctl == None: + fail("could not find rabbitmqct among", scripts) + + return [ + RabbitmqHomeInfo( + rabbitmqctl = rabbitmqctl, + ), + DefaultInfo( + files = depset(scripts + escripts + [plugins_dir]), + ), + ] + +versioned_rabbitmq_home = rule( + implementation = _versioned_rabbitmq_home_impl, + attrs = dict(RABBITMQ_HOME_ATTRS.items() + { + "_erlang_home": attr.label(default = "@bazel-erlang//:erlang_home"), + }.items()), +) diff --git a/rabbitmq.bzl b/rabbitmq.bzl index 4a5cdb489b..8e73b5922e 100644 --- a/rabbitmq.bzl +++ b/rabbitmq.bzl @@ -22,6 +22,42 @@ RABBITMQ_DIALYZER_OPTS = [ APP_VERSION = "3.10.0" +ALL_PLUGINS = [ + "//deps/rabbit:bazel_erlang_lib", + "//deps/rabbitmq_amqp1_0:bazel_erlang_lib", + "//deps/rabbitmq_auth_backend_cache:bazel_erlang_lib", + "//deps/rabbitmq_auth_backend_http:bazel_erlang_lib", + "//deps/rabbitmq_auth_backend_ldap:bazel_erlang_lib", + "//deps/rabbitmq_auth_backend_oauth2:bazel_erlang_lib", + "//deps/rabbitmq_auth_mechanism_ssl:bazel_erlang_lib", + "//deps/rabbitmq_consistent_hash_exchange:bazel_erlang_lib", + "//deps/rabbitmq_event_exchange:bazel_erlang_lib", + "//deps/rabbitmq_federation:bazel_erlang_lib", + "//deps/rabbitmq_federation_management:bazel_erlang_lib", + "//deps/rabbitmq_jms_topic_exchange:bazel_erlang_lib", + "//deps/rabbitmq_management:bazel_erlang_lib", + "//deps/rabbitmq_mqtt:bazel_erlang_lib", + "//deps/rabbitmq_peer_discovery_aws:bazel_erlang_lib", + "//deps/rabbitmq_peer_discovery_consul:bazel_erlang_lib", + "//deps/rabbitmq_peer_discovery_etcd:bazel_erlang_lib", + "//deps/rabbitmq_peer_discovery_k8s:bazel_erlang_lib", + "//deps/rabbitmq_prometheus:bazel_erlang_lib", + "//deps/rabbitmq_random_exchange:bazel_erlang_lib", + "//deps/rabbitmq_recent_history_exchange:bazel_erlang_lib", + "//deps/rabbitmq_sharding:bazel_erlang_lib", + "//deps/rabbitmq_shovel:bazel_erlang_lib", + "//deps/rabbitmq_shovel_management:bazel_erlang_lib", + "//deps/rabbitmq_stomp:bazel_erlang_lib", + "//deps/rabbitmq_stream:bazel_erlang_lib", + "//deps/rabbitmq_stream_management:bazel_erlang_lib", + "//deps/rabbitmq_top:bazel_erlang_lib", + "//deps/rabbitmq_tracing:bazel_erlang_lib", + "//deps/rabbitmq_trust_store:bazel_erlang_lib", + "//deps/rabbitmq_web_dispatch:bazel_erlang_lib", + "//deps/rabbitmq_web_mqtt:bazel_erlang_lib", + "//deps/rabbitmq_web_stomp:bazel_erlang_lib", +] + LABELS_WITH_TEST_VERSIONS = [ "//deps/amqp10_common:bazel_erlang_lib", "//deps/rabbit_common:bazel_erlang_lib", @@ -29,6 +65,9 @@ LABELS_WITH_TEST_VERSIONS = [ "//deps/rabbit/apps/rabbitmq_prelaunch:bazel_erlang_lib", ] +def all_plugins(rabbitmq_workspace = "@rabbitmq-server"): + return [rabbitmq_workspace + p for p in ALL_PLUGINS] + def with_test_versions(deps): r = [] for d in deps: diff --git a/rabbitmq_home.bzl b/rabbitmq_home.bzl index 6342d75f40..eca1ff1fb9 100644 --- a/rabbitmq_home.bzl +++ b/rabbitmq_home.bzl @@ -1,4 +1,5 @@ load("@bazel-erlang//:bazel_erlang_lib.bzl", "ErlangLibInfo", "flat_deps", "path_join") +load("@bazel-erlang//:ct.bzl", "additional_file_dest_relative_path") RabbitmqHomeInfo = provider( doc = "An assembled RABBITMQ_HOME dir", @@ -19,7 +20,7 @@ def _copy_script(ctx, script): ) return dest -def _link_escript(ctx, escript): +def link_escript(ctx, escript): e = ctx.attr._rabbitmqctl_escript.files_to_run.executable s = ctx.actions.declare_file(path_join(ctx.label.name, "escript", escript)) ctx.actions.symlink( @@ -28,19 +29,6 @@ def _link_escript(ctx, escript): ) return s -def _priv_file_dest_relative_path(plugin_label, f): - if plugin_label.workspace_root != "": - if plugin_label.package != "": - rel_base = path_join(plugin_label.workspace_root, plugin_label.package) - else: - rel_base = plugin_label.workspace_root - else: - rel_base = plugin_label.package - if rel_base != "": - return f.path.replace(rel_base + "/", "") - else: - return f.path - def _plugins_dir_links(ctx, plugin): lib_info = plugin[ErlangLibInfo] plugin_path = path_join( @@ -72,7 +60,7 @@ def _plugins_dir_links(ctx, plugin): links.append(o) for f in lib_info.priv: - p = _priv_file_dest_relative_path(plugin.label, f) + p = additional_file_dest_relative_path(plugin.label, f) o = ctx.actions.declare_file(path_join(plugin_path, p)) ctx.actions.symlink( output = o, @@ -82,7 +70,7 @@ def _plugins_dir_links(ctx, plugin): return links -def _unique_versions(plugins): +def unique_versions(plugins): erlang_versions = [] for plugin in plugins: erlang_version = plugin[ErlangLibInfo].erlang_version @@ -90,13 +78,13 @@ def _unique_versions(plugins): erlang_versions.append(erlang_version) return erlang_versions -def _flatten(list_of_lists): +def flatten(list_of_lists): return [item for sublist in list_of_lists for item in sublist] def _impl(ctx): plugins = flat_deps(ctx.attr.plugins) - erlang_versions = _unique_versions(plugins) + erlang_versions = unique_versions(plugins) if len(erlang_versions) > 1: fail("plugins do not have a unified erlang version", erlang_versions) @@ -110,9 +98,9 @@ def _impl(ctx): "rabbitmq-upgrade", "rabbitmqctl", ] - escripts = [_link_escript(ctx, escript) for escript in rabbitmq_ctl_copies] + escripts = [link_escript(ctx, escript) for escript in rabbitmq_ctl_copies] - plugins = _flatten([_plugins_dir_links(ctx, plugin) for plugin in plugins]) + plugins = flatten([_plugins_dir_links(ctx, plugin) for plugin in plugins]) rabbitmqctl = None for script in scripts: @@ -130,24 +118,26 @@ def _impl(ctx): ), ] +RABBITMQ_HOME_ATTRS = { + "_scripts": attr.label_list( + default = [ + "//deps/rabbit:scripts/rabbitmq-defaults", + "//deps/rabbit:scripts/rabbitmq-diagnostics", + "//deps/rabbit:scripts/rabbitmq-env", + "//deps/rabbit:scripts/rabbitmq-plugins", + "//deps/rabbit:scripts/rabbitmq-queues", + "//deps/rabbit:scripts/rabbitmq-server", + "//deps/rabbit:scripts/rabbitmqctl", + ], + allow_files = True, + ), + "_rabbitmqctl_escript": attr.label(default = "//deps/rabbitmq_cli:rabbitmqctl"), + "plugins": attr.label_list(providers = [ErlangLibInfo]), +} + rabbitmq_home = rule( implementation = _impl, - attrs = { - "_scripts": attr.label_list( - default = [ - "//deps/rabbit:scripts/rabbitmq-defaults", - "//deps/rabbit:scripts/rabbitmq-diagnostics", - "//deps/rabbit:scripts/rabbitmq-env", - "//deps/rabbit:scripts/rabbitmq-plugins", - "//deps/rabbit:scripts/rabbitmq-queues", - "//deps/rabbit:scripts/rabbitmq-server", - "//deps/rabbit:scripts/rabbitmqctl", - ], - allow_files = True, - ), - "_rabbitmqctl_escript": attr.label(default = "//deps/rabbitmq_cli:rabbitmqctl"), - "plugins": attr.label_list(), - }, + attrs = RABBITMQ_HOME_ATTRS, ) def _dirname(p): -- cgit v1.2.1