def _copy_go_binary_impl(ctx):
    output = ctx.actions.declare_file(ctx.label.name)
    for f in ctx.attr.src.files.to_list():
        # go_binary rules have two outputs, a library and the binary itself.
        # The following is a horrible hack to avoid copying the library.
        if f.path.endswith(".a"):
            continue
        ctx.actions.run_shell(
            inputs=[f],
            outputs=[output],
            mnemonic="CopyGoBinary",
            command="mkdir -p %s && cp %s %s" % (output.dirname, f.path, output.path))
        return [DefaultInfo(executable=output)]

copy_go_binary = rule(
    implementation=_copy_go_binary_impl,
    attrs={
        "src": attr.label(mandatory=True, allow_files=True),
    },
    executable=True,
)
