Skip to content

Commit

Permalink
Adjustments to :package-generic-unix for rules_pkg 0.5.1
Browse files Browse the repository at this point in the history
  • Loading branch information
HoloRin committed Jun 18, 2022
1 parent 9b73834 commit 4b870a5
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 48 deletions.
2 changes: 1 addition & 1 deletion WORKSPACE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ bazel_skylib_workspace()

http_archive(
name = "rules_pkg",
sha256 = "a89e203d3cf264e564fcb96b6e06dd70bc0557356eb48400ce4b5d97c2c3720d",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.5.1/rules_pkg-0.5.1.tar.gz",
"https://github.com/bazelbuild/rules_pkg/releases/download/0.5.1/rules_pkg-0.5.1.tar.gz",
],
sha256 = "a89e203d3cf264e564fcb96b6e06dd70bc0557356eb48400ce4b5d97c2c3720d",
)

load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")
Expand Down
120 changes: 73 additions & 47 deletions dist.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,52 @@ def _copy_script(ctx, script):
)
return dest

def _scripts_and_escripts_private_impl(ctx):
plugins = flat_deps(ctx.attr.plugins)

scripts = [_copy_script(ctx, script) for script in ctx.files._scripts]

rabbitmq_ctl_copies = [
"rabbitmq-diagnostics",
"rabbitmq-plugins",
"rabbitmq-queues",
"rabbitmq-streams",
"rabbitmq-tanzu",
"rabbitmq-upgrade",
"rabbitmqctl",
]
escripts = [link_escript(ctx, escript) for escript in rabbitmq_ctl_copies]

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),
),
]

scripts_and_escripts_private = rule(
implementation = _scripts_and_escripts_private_impl,
attrs = RABBITMQ_HOME_ATTRS,
)

def scripts_and_escripts(**kwargs):
scripts_and_escripts_private(
is_windows = select({
"@bazel_tools//src/conditions:host_windows": True,
"//conditions:default": False,
}),
**kwargs
)

def _extract_version(p):
return "erl -eval '{ok, [{application, _, AppInfo}]} = file:consult(\"" + p + "\"), Version = proplists:get_value(vsn, AppInfo), io:fwrite(Version), halt().' -noshell"

Expand All @@ -76,7 +122,9 @@ def _app_file(plugin_lib_info):
return f
fail(".app file not found in {}".format(plugin_lib_info))

def _plugins_dir(ctx, plugins):
def _versioned_plugins_dir_impl(ctx):
plugins = flat_deps(ctx.attr.plugins)

plugins_dir = ctx.actions.declare_directory(path_join(ctx.label.name, "plugins"))

(erlang_home, _, runfiles) = erlang_dirs(ctx)
Expand All @@ -95,12 +143,6 @@ def _plugins_dir(ctx, plugins):
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.app_name,
),
)

commands.append(
"mkdir -p {plugins_dir}/{lib_name}-$PLUGIN_VERSION/include".format(
plugins_dir = plugins_dir.path,
Expand Down Expand Up @@ -166,50 +208,20 @@ def _plugins_dir(ctx, plugins):
command = "\n".join(commands),
)

return plugins_dir

def _versioned_rabbitmq_home_impl(ctx):
plugins = flat_deps(ctx.attr.plugins)

scripts = [_copy_script(ctx, script) for script in ctx.files._scripts]

rabbitmq_ctl_copies = [
"rabbitmq-diagnostics",
"rabbitmq-plugins",
"rabbitmq-queues",
"rabbitmq-streams",
"rabbitmq-tanzu",
"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]),
files = depset([plugins_dir]),
),
]

versioned_rabbitmq_home_private = rule(
implementation = _versioned_rabbitmq_home_impl,
versioned_plugins_dir_private = rule(
implementation = _versioned_plugins_dir_impl,
attrs = RABBITMQ_HOME_ATTRS,
toolchains = ["@rules_erlang//tools:toolchain_type"],
)

def versioned_rabbitmq_home(**kwargs):
versioned_rabbitmq_home_private(
def versioned_plugins_dir(**kwargs):
versioned_plugins_dir_private(
is_windows = select({
"@bazel_tools//src/conditions:host_windows": True,
"//conditions:default": False,
Expand Down Expand Up @@ -262,21 +274,34 @@ def package_generic_unix(plugins):
visibility = ["//visibility:public"],
)

versioned_rabbitmq_home(
name = "dist-home",
scripts_and_escripts(
name = "scripts-and-escripts",
)

versioned_plugins_dir(
name = "plugins-dir",
plugins = plugins,
)

pkg_tar(
name = "package-generic-unix",
name = "plugins-tar",
srcs = [
":dist-home",
":plugins-dir",
],
package_dir = "plugins",
)

pkg_tar(
name = "package-generic-unix",
extension = "tar.xz",
srcs = [
":scripts-and-escripts",
],
package_dir = "rabbitmq_server-{}".format(APP_VERSION),
strip_prefix = "dist-home",
strip_prefix = "scripts-and-escripts",
visibility = ["//visibility:public"],
deps = [
":plugins-tar",
":license-files",
":release-notes",
":scripts",
Expand Down Expand Up @@ -316,6 +341,7 @@ def source_archive(plugins):

pkg_tar(
name = "source_archive",
extension = "tar.gz",
srcs = [
":root-licenses",
],
Expand Down

0 comments on commit 4b870a5

Please sign in to comment.