Finding Commands That Buck2 Ran
Buck2 logs all the commands it runs. So, after you've run a build, you can query Buck2 to get access to the exact command it used.
To do so, do your build as normal, then run buck2 log what-ran
.
What Ran output format
This will output a table showing all the commands that were executed, and how they were executed.
The structure is as follows:
REASON <TAB> TARGET <TAB> IDENTIFIER <TAB> EXECUTOR <TAB> REPRODUCER
Which should be used as follows:
- REASON - value is either
build
(for building a thing) ortest
(for running a test). - TARGET - the name of the build target that declared an action.
- IDENTIFIER - depends on the target but will usually be something like a file name or a module.
- EXECUTOR - value is either
cache
,re
orlocal
. - REPRODUCER - how you can re-run this yourself.
Using the What Ran output
Use What Ran as follows:
- Start by identifying the command you're looking for:
- You can grep the output for a given target.
- You can then grep by identifier if necessary. For example, if you're after
C++ compilation, try grepping for the basename of your file (for example,
for
fbcode/my/stuff.cpp
, grep forstuff.cpp
).
- Once you found it, reproduce as follows:
- If the executor was
local
, the command is in the output, so just run it. It's expected that you'll do this from the root of your project (usebuck2 root --kind project
to find where that is). - If the executor was
re
orcache
, you're provided a RE digest of the formHASH:SIZE
. Runfrecli cas download-action HASH:SIZE
to retrieve the action, then follow the instructions to run it.
- If the executor was
Examples
The following ran locally:
build fbcode//scripts/torozco/getenv:getenv-san-conf-__generated-lib__ (archive_thin libgetenv-san-conf-__generated-lib__.pic.a) local fbcode/third-party-buck/platform010/build/llvm-fb/bin/llvm-ar qcsTD buck-out/v2/gen/fbcode/d839c731f5505c62/scripts/torozco/getenv/__getenv-san-conf-__generated-lib____/libgetenv-san-conf-__generated-lib__.pic.a buck-out/v2/gen/fbcode/d839c731f5505c62/scripts/torozco/getenv/__getenv-san-conf-__generated-lib____/__objects__/san-conf.c.pic.o
To repro, you'd run:
fbcode/third-party-buck/platform010/build/llvm-fb/bin/llvm-ar qcsTD buck-out/v2/gen/fbcode/d839c731f5505c62/scripts/torozco/getenv/__getenv-san-conf-__generated-lib____/libgetenv-san-conf-__generated-lib__.pic.a buck-out/v2/gen/fbcode/d839c731f5505c62/scripts/torozco/getenv/__getenv-san-conf-__generated-lib____/__objects__/san-conf.c.pic.
The following ran on RE:
build fbcode//common/init:kill (cxx_compile Kill.cpp (pic)) re 97feca9d014155a80ec55fe27e6bb17f9d2f8574:94
Reproducing this command will depend on the particular RE implementation you use.
Expired Digests
Note that if the action was a cache hit on RE, you might get an error when downloading it, indicating that it's not found. If that happens, it's because the cache entry is there but the inputs have expired.
If this happens to you, run your build with --upload-all-actions
.