diff options
author | Rin Kuryloski <kuryloskip@vmware.com> | 2023-01-05 12:41:07 +0100 |
---|---|---|
committer | Rin Kuryloski <kuryloskip@vmware.com> | 2023-01-05 13:02:02 +0100 |
commit | a8658ae68d26154e6bc0c208bde8f6cdcc6f3300 (patch) | |
tree | 66debb22c28afadf54d89784d0ba37c8207eb3de /tools | |
parent | 06a330f553cd4a9aed4e1bbdba5e347e532931b8 (diff) | |
download | rabbitmq-server-git-a8658ae68d26154e6bc0c208bde8f6cdcc6f3300.tar.gz |
Add "bazel run //tools:symlink_deps_for_erlang_ls"
for symlinking 3rd party deps into a place that erlang_ls can use them
Diffstat (limited to 'tools')
-rw-r--r-- | tools/BUILD.bazel | 16 | ||||
-rw-r--r-- | tools/erlang_ls.bzl | 64 |
2 files changed, 42 insertions, 38 deletions
diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index dbf4046a85..1b0de88b86 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -1,16 +1,18 @@ load("//:rabbitmq.bzl", "all_plugins") -load(":erlang_ls.bzl", "erlang_ls_config", "erlang_ls_tree") +load(":erlang_ls.bzl", "deps_symlinks", "erlang_ls_config") -erlang_ls_tree( - name = "erlang_ls_files", +erlang_ls_config( + name = "erlang_ls.config", +) + +deps_symlinks( + name = "symlink_deps_for_erlang_ls", apps = all_plugins( rabbitmq_workspace = "", ) + [ "//deps/rabbitmq_ct_helpers:erlang_app", "//deps/rabbitmq_ct_client_helpers:erlang_app", ], -) - -erlang_ls_config( - name = "erlang_ls.config", + dest = "extra_deps", # must also be listed in .bazelignore + tags = ["local"], ) diff --git a/tools/erlang_ls.bzl b/tools/erlang_ls.bzl index 1fc41468df..f704f08558 100644 --- a/tools/erlang_ls.bzl +++ b/tools/erlang_ls.bzl @@ -6,10 +6,6 @@ load( "@rules_erlang//:util.bzl", "path_join", ) -load( - "@rules_erlang//private:util.bzl", - "additional_file_dest_relative_path", -) def _erlang_ls_config(ctx): runtime_prefix = path_join( @@ -46,48 +42,54 @@ erlang_ls_config = rule( executable = True, ) -def _erlang_app_files(ctx, app, directory): - app_info = app[ErlangAppInfo] - app_path = path_join(directory, app_info.app_name) - files = [] - for f in app_info.srcs + app_info.beam: - relative_path = additional_file_dest_relative_path(app.label, f) - dest = ctx.actions.declare_file(path_join(app_path, relative_path)) - ctx.actions.symlink(output = dest, target_file = f) - files.append(dest) - return files - -def _erlang_ls_tree(ctx): +def _deps_symlinks(ctx): apps = ctx.attr.apps deps = [] for app in apps: app_info = app[ErlangAppInfo] for dep in app_info.deps: - # this puts non rabbitmq plugins, like amqp10_client into deps, - # but maybe those should be in apps? Does it matter? - if dep not in deps and dep not in apps: + if dep.label.workspace_name != "" and dep not in deps and dep not in apps: deps.append(dep) files = [] - for app in apps: - files.extend( - _erlang_app_files(ctx, app, path_join(ctx.label.name, "apps")), - ) - for dep in deps: - files.extend( - _erlang_app_files(ctx, dep, path_join(ctx.label.name, "deps")), - ) + output = ctx.actions.declare_file(ctx.label.name + ".sh") - return [ - DefaultInfo(files = depset(files)), + commands = [ + "set -euxo pipefail", + "", + "mkdir -p \"{}\"".format(path_join("$BUILD_WORKSPACE_DIRECTORY", ctx.attr.dest)), + "", ] -erlang_ls_tree = rule( - implementation = _erlang_ls_tree, + for dep in deps: + app_info = dep[ErlangAppInfo] + files.extend(app_info.srcs) + + commands.append("ln -s \"{target}\" \"{source}\"".format( + target = path_join("$PWD", "external", dep.label.workspace_name), + source = path_join("$BUILD_WORKSPACE_DIRECTORY", ctx.attr.dest, app_info.app_name), + )) + + ctx.actions.write( + output = output, + content = "\n".join(commands), + ) + + return [DefaultInfo( + runfiles = ctx.runfiles(files = files), + executable = output, + )] + +deps_symlinks = rule( + implementation = _deps_symlinks, attrs = { "apps": attr.label_list( providers = [ErlangAppInfo], ), + "dest": attr.string( + mandatory = True, + ), }, + executable = True, ) |