From 67d75af2ba1ae4184f9931e4563540bde6f39c55 Mon Sep 17 00:00:00 2001 From: Mark Elliot <123787712+mark-thm@users.noreply.github.com> Date: Mon, 15 Apr 2024 20:53:22 -0400 Subject: [PATCH] template --- multitool/cwd.bzl | 25 +++---------------------- multitool/private/BUILD.bazel | 4 ++++ multitool/private/cwd.bzl | 21 +++++++++++++++++++++ multitool/private/cwd.template.sh | 8 ++++++++ 4 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 multitool/private/cwd.bzl create mode 100644 multitool/private/cwd.template.sh diff --git a/multitool/cwd.bzl b/multitool/cwd.bzl index c2f5cd3..9ccea80 100644 --- a/multitool/cwd.bzl +++ b/multitool/cwd.bzl @@ -1,24 +1,5 @@ -"cwd: a rule for executing an executable in the BUILD_WORKING_DIRECTORY" +"multitool cwd execution rule" -def _cwd_impl(ctx): - output = ctx.actions.declare_file(ctx.label.name) - ctx.actions.write( - content = "\n".join([ - "#!/usr/bin/env bash", - "execdir=\"$PWD\"", - "pushd $BUILD_WORKING_DIRECTORY > /dev/null", - "\"$execdir/{tool}\" \"$@\"".format(tool = ctx.file.tool.short_path), - "popd > /dev/null", - "", - ]), - output = output, - ) - return [DefaultInfo(executable = output, runfiles = ctx.runfiles(files = [ctx.file.tool]))] +load("@rules_multitool//multitool/private:cwd.bzl", _cwd = "cwd") -cwd = rule( - implementation = _cwd_impl, - attrs = { - "tool": attr.label(mandatory = True, allow_single_file = True, executable = True, cfg = "exec"), - }, - executable = True, -) +cwd = _cwd diff --git a/multitool/private/BUILD.bazel b/multitool/private/BUILD.bazel index 13fa4e3..b4859c1 100644 --- a/multitool/private/BUILD.bazel +++ b/multitool/private/BUILD.bazel @@ -1,5 +1,9 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +exports_files([ + "cwd.template.sh", +]) + bzl_library( name = "multitool", srcs = ["multitool.bzl"], diff --git a/multitool/private/cwd.bzl b/multitool/private/cwd.bzl new file mode 100644 index 0000000..97cc681 --- /dev/null +++ b/multitool/private/cwd.bzl @@ -0,0 +1,21 @@ +"cwd: a rule for executing an executable in the BUILD_WORKING_DIRECTORY" + +def _cwd_impl(ctx): + output = ctx.actions.declare_file(ctx.label.name) + ctx.actions.expand_template( + template = ctx.file._template, + output = output, + substitutions = { + "{{tool}}": ctx.file.tool.short_path, + }, + ) + return [DefaultInfo(executable = output, runfiles = ctx.runfiles(files = [ctx.file.tool]))] + +cwd = rule( + implementation = _cwd_impl, + attrs = { + "tool": attr.label(mandatory = True, allow_single_file = True, executable = True, cfg = "exec"), + "_template": attr.label(default = "//multitool/private:cwd.template.sh", allow_single_file = True), + }, + executable = True, +) diff --git a/multitool/private/cwd.template.sh b/multitool/private/cwd.template.sh new file mode 100644 index 0000000..92f0716 --- /dev/null +++ b/multitool/private/cwd.template.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +tool="{{tool}}" +execdir="$PWD" + +pushd $BUILD_WORKING_DIRECTORY > /dev/null +"$execdir/$tool" "$@" +popd > /dev/null