| "Example of a rule that can version-stamp its outputs" |
| |
| load("//lib:stamping.bzl", "STAMP_ATTRS", "maybe_stamp") |
| |
| def _stamp_aware_rule_impl(ctx): |
| args = ctx.actions.args() |
| inputs = [] |
| outputs = [ctx.outputs.out] |
| stamp = maybe_stamp(ctx) |
| if stamp: |
| args.add("--volatile_status_file", stamp.volatile_status_file) |
| args.add("--stable_status_file", stamp.stable_status_file) |
| |
| inputs.extend([stamp.volatile_status_file, stamp.stable_status_file]) |
| |
| ctx.actions.run_shell( |
| inputs = inputs, |
| arguments = [args], |
| outputs = outputs, |
| # In reality, this program would also read from the status files. |
| command = "echo $@ > " + outputs[0].path, |
| ) |
| return [DefaultInfo(files = depset(outputs))] |
| |
| my_stamp_aware_rule = rule( |
| implementation = _stamp_aware_rule_impl, |
| attrs = dict({ |
| "out": attr.output(mandatory = True), |
| }, **STAMP_ATTRS), |
| ) |