Add a rule for building a source archive
that includes the external dependencies
This commit is contained in:
parent
4fd20ad376
commit
34db1a3c38
|
@ -9,7 +9,7 @@ load("//bazel/elixir:iex_eval.bzl", "iex_eval")
|
|||
load(":rabbitmq_home.bzl", "rabbitmq_home")
|
||||
load(":rabbitmq_run.bzl", "rabbitmq_run", "rabbitmq_run_command")
|
||||
load(":rabbitmqctl.bzl", "rabbitmqctl")
|
||||
load(":dist.bzl", "package_generic_unix")
|
||||
load(":dist.bzl", "package_generic_unix", "source_archive")
|
||||
load(":rabbitmq.bzl", "all_plugins")
|
||||
|
||||
exports_files([
|
||||
|
@ -94,6 +94,8 @@ iex_eval(
|
|||
|
||||
package_generic_unix(PLUGINS)
|
||||
|
||||
source_archive(PLUGINS + ["//deps/rabbitmq_cli:rabbitmqctl"])
|
||||
|
||||
genrule(
|
||||
name = "test-logs",
|
||||
outs = ["open-test-logs.sh"],
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
load("@bazel_skylib//rules:select_file.bzl", "select_file")
|
||||
load(":rabbitmqctl.bzl", "rabbitmqctl")
|
||||
load(":rabbitmqctl_test.bzl", "rabbitmqctl_test")
|
||||
load("//:rabbitmq_home.bzl", "rabbitmq_home")
|
||||
|
@ -13,12 +14,20 @@ rabbitmqctl(
|
|||
] + glob([
|
||||
"lib/**/*.ex",
|
||||
]),
|
||||
license_files = glob(["LICENSE*"]),
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//deps/rabbit_common:erlang_app",
|
||||
],
|
||||
)
|
||||
|
||||
select_file(
|
||||
name = "fetched_srcs",
|
||||
srcs = ":rabbitmqctl",
|
||||
subpath = "deps.tar",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
rabbitmq_home(
|
||||
name = "broker-for-cli-tests-home",
|
||||
testonly = True,
|
||||
|
|
|
@ -43,7 +43,7 @@ def _impl(ctx):
|
|||
escript = ctx.actions.declare_file(path_join("escript", "rabbitmqctl"))
|
||||
ebin = ctx.actions.declare_directory("ebin")
|
||||
mix_invocation_dir = ctx.actions.declare_directory("{}_mix".format(ctx.label.name))
|
||||
fetched_srcs = ctx.actions.declare_directory("fetched_srcs")
|
||||
fetched_srcs = ctx.actions.declare_file("deps.tar")
|
||||
|
||||
deps = flat_deps(ctx.attr.deps)
|
||||
|
||||
|
@ -67,7 +67,7 @@ else
|
|||
fi
|
||||
ABS_EBIN_DIR=$PWD/{ebin_dir}
|
||||
ABS_ESCRIPT_PATH=$PWD/{escript_path}
|
||||
ABS_FETCHED_SRCS_DIR=$PWD/{fetched_srcs}
|
||||
ABS_FETCHED_SRCS=$PWD/{fetched_srcs}
|
||||
|
||||
export PATH="$ABS_ELIXIR_HOME"/bin:"{erlang_home}"/bin:${{PATH}}
|
||||
|
||||
|
@ -101,7 +101,12 @@ cp escript/rabbitmqctl ${{ABS_ESCRIPT_PATH}}
|
|||
cp _build/${{MIX_ENV}}/lib/rabbitmqctl/ebin/* ${{ABS_EBIN_DIR}}
|
||||
cp _build/${{MIX_ENV}}/lib/rabbitmqctl/consolidated/* ${{ABS_EBIN_DIR}}
|
||||
|
||||
cp -r deps/* ${{ABS_FETCHED_SRCS_DIR}}
|
||||
tar --sort=name \\
|
||||
--owner=root:0 \\
|
||||
--group=root:0 \\
|
||||
--mtime='UTC 2019-01-01' \\
|
||||
--file ${{ABS_FETCHED_SRCS}} \\
|
||||
--create deps
|
||||
|
||||
# remove symlinks from the _build directory since it
|
||||
# is not used, and bazel does not allow them
|
||||
|
@ -145,15 +150,16 @@ find . -type l -delete
|
|||
return [
|
||||
DefaultInfo(
|
||||
executable = escript,
|
||||
files = depset([ebin]),
|
||||
files = depset([ebin, fetched_srcs]),
|
||||
runfiles = runfiles,
|
||||
),
|
||||
ErlangAppInfo(
|
||||
app_name = ctx.attr.name,
|
||||
app_name = "rabbitmq_cli",
|
||||
include = [],
|
||||
beam = [ebin],
|
||||
priv = [],
|
||||
srcs = ctx.files.srcs + [fetched_srcs],
|
||||
license_files = ctx.files.license_files,
|
||||
srcs = ctx.files.srcs,
|
||||
deps = deps,
|
||||
),
|
||||
]
|
||||
|
@ -161,9 +167,19 @@ find . -type l -delete
|
|||
rabbitmqctl_private = rule(
|
||||
implementation = _impl,
|
||||
attrs = {
|
||||
"is_windows": attr.bool(mandatory = True),
|
||||
"srcs": attr.label_list(allow_files = True),
|
||||
"deps": attr.label_list(providers = [ErlangAppInfo]),
|
||||
"is_windows": attr.bool(
|
||||
mandatory = True,
|
||||
),
|
||||
"srcs": attr.label_list(
|
||||
mandatory = True,
|
||||
allow_files = True,
|
||||
),
|
||||
"license_files": attr.label_list(
|
||||
allow_files = True,
|
||||
),
|
||||
"deps": attr.label_list(
|
||||
providers = [ErlangAppInfo],
|
||||
),
|
||||
},
|
||||
toolchains = [
|
||||
"//bazel/elixir:toolchain_type",
|
||||
|
|
43
dist.bzl
43
dist.bzl
|
@ -7,6 +7,7 @@ load(
|
|||
"erlang_dirs",
|
||||
"maybe_install_erlang",
|
||||
)
|
||||
load("@rules_erlang//:source_tree.bzl", "source_tree")
|
||||
load(
|
||||
":rabbitmq_home.bzl",
|
||||
"RABBITMQ_HOME_ATTRS",
|
||||
|
@ -282,3 +283,45 @@ def package_generic_unix(plugins):
|
|||
"//deps/rabbit:manpages-dir",
|
||||
],
|
||||
)
|
||||
|
||||
# This macro must be invoked from the top level BUILD.bazel of rabbitmq-server
|
||||
def source_archive(plugins):
|
||||
source_tree(
|
||||
name = "source-tree",
|
||||
deps = plugins,
|
||||
)
|
||||
|
||||
native.filegroup(
|
||||
name = "root-licenses",
|
||||
srcs = native.glob(["LICENSE*"]),
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
pkg_tar(
|
||||
name = "deps-archive",
|
||||
srcs = [
|
||||
":source-tree",
|
||||
],
|
||||
package_dir = "deps",
|
||||
strip_prefix = "source-tree",
|
||||
)
|
||||
|
||||
pkg_tar(
|
||||
name = "cli-deps-archive",
|
||||
deps = [
|
||||
"//deps/rabbitmq_cli:fetched_srcs",
|
||||
],
|
||||
package_dir = "deps/rabbitmq_cli",
|
||||
)
|
||||
|
||||
pkg_tar(
|
||||
name = "source_archive",
|
||||
srcs = [
|
||||
":root-licenses",
|
||||
],
|
||||
deps = [
|
||||
":deps-archive",
|
||||
":cli-deps-archive",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue