github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/rules/depsgen.bzl (about) 1 """depsgen.bzl 2 """ 3 4 load("@build_stack_rules_proto//rules:providers.bzl", "ProtoDependencyInfo") 5 6 def _depsgen_impl(ctx): 7 config_json = ctx.outputs.json 8 output_deps = ctx.outputs.deps 9 10 config = struct( 11 out = output_deps.path, 12 name = ctx.label.name, 13 deps = [dep[ProtoDependencyInfo] for dep in ctx.attr.deps], 14 ) 15 16 ctx.actions.write( 17 output = config_json, 18 content = config.to_json(), 19 ) 20 21 ctx.actions.run( 22 mnemonic = "DepsGenerate", 23 progress_message = "Generating %s deps" % ctx.attr.name, 24 executable = ctx.file._depsgen, 25 arguments = ["--config_json=%s" % config_json.path], 26 inputs = [config_json], 27 outputs = [output_deps], 28 ) 29 30 return [DefaultInfo( 31 files = depset([config_json, output_deps]), 32 )] 33 34 depsgen = rule( 35 implementation = _depsgen_impl, 36 attrs = { 37 "deps": attr.label_list( 38 doc = "Top level dependencies to compute", 39 providers = [ProtoDependencyInfo], 40 ), 41 "_depsgen": attr.label( 42 doc = "The depsgen tool", 43 default = "//cmd/depsgen", 44 allow_single_file = True, 45 executable = True, 46 cfg = "exec", 47 ), 48 }, 49 outputs = { 50 "json": "%{name}.json", 51 "deps": "%{name}_deps.bzl", 52 }, 53 )