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  )