Skip to content

Commit 087ee2a

Browse files
Kelwanzaucy
authored andcommitted
feat: add rules for recipe bundles
1 parent 7929f24 commit 087ee2a

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ module(
77
bazel_dep(name = "rules_cc", version = "0.0.9")
88
bazel_dep(name = "bazel_skylib", version = "1.5.0")
99
bazel_dep(name = "platforms", version = "0.0.9")
10-
bazel_dep(name = "ecsact_cli", version = "0.3.4")
10+
bazel_dep(name = "ecsact_cli", version = "0.3.12")
1111

1212
bazel_dep(name = "aspect_bazel_lib", version = "1.32.1", dev_dependency = True)

ecsact/defs.bzl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
"""
22
"""
33

4+
load("//ecsact/private:ecsact_binary.bzl", _ecsact_binary = "ecsact_binary")
5+
load("//ecsact/private:ecsact_build_recipe.bzl", _ecsact_build_recipe = "ecsact_build_recipe", _ecsact_build_recipe_bundle = "ecsact_build_recipe_bundle")
46
load("//ecsact/private:ecsact_codegen.bzl", _ecsact_codegen = "ecsact_codegen")
57
load("//ecsact/private:ecsact_codegen_plugin.bzl", _ecsact_codegen_plugin = "ecsact_codegen_plugin")
6-
load("//ecsact/private:ecsact_binary.bzl", _ecsact_binary = "ecsact_binary")
7-
load("//ecsact/private:ecsact_build_recipe.bzl", _ecsact_build_recipe = "ecsact_build_recipe")
88
load("//ecsact/private:ecsact_library.bzl", _ecsact_library = "ecsact_library")
99

1010
ecsact_codegen = _ecsact_codegen
1111
ecsact_codegen_plugin = _ecsact_codegen_plugin
1212
ecsact_binary = _ecsact_binary
1313
ecsact_build_recipe = _ecsact_build_recipe
14+
ecsact_build_recipe_bundle = _ecsact_build_recipe_bundle
1415
ecsact_library = _ecsact_library

ecsact/private/ecsact_build_recipe.bzl

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load("@rules_cc//cc:find_cc_toolchain.bzl", "use_cc_toolchain")
12
load("//ecsact/private:ecsact_codegen_plugin.bzl", "EcsactCodegenPluginInfo")
23

34
EcsactBuildRecipeInfo = provider(
@@ -101,3 +102,44 @@ ecsact_build_recipe = rule(
101102
),
102103
},
103104
)
105+
106+
def _ecsact_build_recipe_bundle(ctx):
107+
# type: (ctx) -> None
108+
109+
ecsact_toolchain = ctx.toolchains["//ecsact:toolchain_type"].ecsact_info
110+
bundle_output_file = ctx.actions.declare_file("{}.ecsact-recipe-bundle".format(ctx.attr.name))
111+
112+
args = ctx.actions.args()
113+
args.add("recipe-bundle")
114+
args.add_all(ctx.files.recipes)
115+
args.add("-o", bundle_output_file)
116+
117+
report_filter = ctx.var.get("ECSACT_CLI_REPORT_FILTER", "errors_and_warnings")
118+
args.add("--report_filter", report_filter)
119+
120+
print("ARGS: ", args)
121+
122+
executable = ecsact_toolchain.target_tool if ecsact_toolchain.target_tool != None else ecsact_toolchain.target_tool_path
123+
124+
ctx.actions.run(
125+
mnemonic = "EcsactRecipeBundle",
126+
progress_message = "Bundling Ecsact Build Recipe %{output}",
127+
outputs = [bundle_output_file],
128+
inputs = ctx.files.recipes,
129+
executable = executable,
130+
arguments = [args],
131+
toolchain = Label("//ecsact:toolchain_type"),
132+
)
133+
return DefaultInfo(
134+
files = depset([bundle_output_file]),
135+
)
136+
137+
ecsact_build_recipe_bundle = rule(
138+
implementation = _ecsact_build_recipe_bundle,
139+
attrs = {
140+
"recipes": attr.label_list(
141+
providers = [EcsactBuildRecipeInfo],
142+
),
143+
},
144+
toolchains = ["//ecsact:toolchain_type"] + use_cc_toolchain(),
145+
)

0 commit comments

Comments
 (0)