How to use filegroup with target|file syntax in please build?

144 views Asked by At

I'm using the please build tool and I'm having trouble using the target|file syntax with a filegroup. Specifically, I want to use specific files from the filegroup output in a genrule, but the syntax doesn't seem to work. Here's an example of what I'm trying to do:

# subdir/BUILD.plz

this = package_name()

a = text_file(
    name = 'a_file',
    content = "aaaaaaaaa",
)

b = text_file(
    name = 'b_file',
    content = "bbbbbbbbb",
)

c = text_file(
    name = 'c_file',
    content = "ccccccccc",
)

filegroup(
    name = this,
    srcs = {
        'A': [a],
        'B': [b],
        'C': [c],
    },
    visibility = ['PUBLIC']
)
# BUILD.plz

sub = '@//subdir'

a_and_c_concat = genrule(
    name = 'a_and_c_concat',
    srcs = {
        'A': [f'{sub}|A'],
        'C': [f'{sub}|C'],
    },
    outs = ["out"],
    cmd = """
        set -eux
        cat "${SRCS_A}" "${SRCS_C}" > "${OUTS}"
    """,
    visibility = ['PUBLIC'],
)

It does the expected behavior if I change the filegroup to be a genrule and 're-export' srcs to outs like so:

# subdir/BUILD.plz

...

genrule(
    name = this,
    srcs = {
        'A': [a],
        'B': [b],
        'C': [c],
    },
    outs = {
        'A': ['a'],
        'B': ['b'],
        'C': ['c'],
    },
    cmd = """
        set -eux
        cp "${SRCS_A}" "${OUTS_A}"
        cp "${SRCS_B}" "${OUTS_B}"
        cp "${SRCS_C}" "${OUTS_C}"
    """,
    visibility = ['PUBLIC']
)

Is there a way to use the target|file syntax with filegroup in Please build, or is there another way to achieve the same effect another way?

Any help or advice would be greatly appreciated. Thank you!

1

There are 1 answers

0
Jonathan Poole On BEST ANSWER

This isn't implemented at the moment, but I think it's a reasonable thing for Please to do.

Filegroups are just a thin wrapper around build_rule(), so they accept all the same arguments, however they don't expose named sources as named outputs. I've created an issue here to track this as a feature request: https://github.com/thought-machine/please/issues/2701