Add tar rule
This commit is contained in:
parent
9e5782304e
commit
3fd337a155
1 changed files with 65 additions and 0 deletions
65
rules.bzl
65
rules.bzl
|
|
@ -255,6 +255,11 @@ def databuild_graph(name, jobs, lookup, visibility = None):
|
||||||
exec = "%s.exec" % name,
|
exec = "%s.exec" % name,
|
||||||
visibility = visibility,
|
visibility = visibility,
|
||||||
)
|
)
|
||||||
|
_databuild_graph_tar(
|
||||||
|
name = "%s.tar" % name,
|
||||||
|
build = "%s.build" % name,
|
||||||
|
visibility = visibility,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# TODO there feels like a lot of boilerplate around wrapping a target with a script - can this be simplified?
|
# TODO there feels like a lot of boilerplate around wrapping a target with a script - can this be simplified?
|
||||||
|
|
@ -505,6 +510,66 @@ _databuild_graph_build = rule(
|
||||||
executable = True,
|
executable = True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _databuild_graph_tar_impl(ctx):
|
||||||
|
"""Creates a tar archive of the build target and all its runfiles."""
|
||||||
|
# Get the build target
|
||||||
|
build_target = ctx.attr.build
|
||||||
|
|
||||||
|
# Create a tar file containing the build target executable and all its runfiles
|
||||||
|
tar_file = ctx.actions.declare_file(ctx.label.name)
|
||||||
|
|
||||||
|
# Get all runfiles from the build target
|
||||||
|
runfiles_list = []
|
||||||
|
|
||||||
|
# Add the build target executable
|
||||||
|
runfiles_list.append(build_target.files_to_run.executable)
|
||||||
|
|
||||||
|
# Add all runfiles from the build target
|
||||||
|
if hasattr(build_target, "default_runfiles"):
|
||||||
|
runfiles_list.extend(build_target.default_runfiles.files.to_list())
|
||||||
|
|
||||||
|
# Create the tar file
|
||||||
|
args = ctx.actions.args()
|
||||||
|
args.add("--output", tar_file.path)
|
||||||
|
args.add("--directory", "/")
|
||||||
|
|
||||||
|
for f in runfiles_list:
|
||||||
|
# Use the short path to preserve the directory structure
|
||||||
|
dest = f.short_path
|
||||||
|
args.add("--file", "%s=%s" % (f.path, dest))
|
||||||
|
|
||||||
|
ctx.actions.run(
|
||||||
|
inputs = runfiles_list,
|
||||||
|
executable = ctx.executable._build_tar,
|
||||||
|
arguments = [args],
|
||||||
|
outputs = [tar_file],
|
||||||
|
mnemonic = "DataBuildGraphTar",
|
||||||
|
use_default_shell_env = True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return [
|
||||||
|
DefaultInfo(
|
||||||
|
files = depset([tar_file]),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
_databuild_graph_tar = rule(
|
||||||
|
implementation = _databuild_graph_tar_impl,
|
||||||
|
attrs = {
|
||||||
|
"build": attr.label(
|
||||||
|
doc = "The build target to tar up",
|
||||||
|
mandatory = True,
|
||||||
|
executable = True,
|
||||||
|
cfg = "target",
|
||||||
|
),
|
||||||
|
"_build_tar": attr.label(
|
||||||
|
default = Label("@bazel_tools//tools/build_defs/pkg:build_tar"),
|
||||||
|
executable = True,
|
||||||
|
cfg = "exec",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
#def _graph_impl(name):
|
#def _graph_impl(name):
|
||||||
# """
|
# """
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue