# fx multi

Run an `fx` command across multiple build directories.

```none
Usage: fx multi [add | list | remove | rm | save FILE | use FILE]
       fx multi [[-p | --parallel] | [-f | --fail]] COMMAND ...
       fx multi set {PRODUCT.BOARD | SPEC}... [SWITCHES...]

fx multi maintains lists of build directories and runs fx commands
across multiple builds in sequence.

The first form uses subcommands that maintain the current multi list:

  add                   Adds the current build to the multi list.
                        e.g. `fx --dir out/foo multi add`
                        If the directory is already present, rotates it
                        to the end of the list.

  clear                 Resets the current multi list to empty.

  list                  Displays the current multi list.
                        Just `fx multi` does this too.

  remove [-f] | rm [-f] Removes the current build from the multi list.
                        With -f it's not an error if it's not in the list.

  save FILE             Saves the multi list in FILE.

  use FILE              Resets the multi list to the one saved in FILE.

The second form runs any other `fx` subcommand you like, several times.
For each build in the multi list, it runs `fx --dir <build-dir> COMMAND ...`
With `--fail` (or `-f`), `fx multi` exits as soon as one COMMAND fails.
By default, it runs each one in sequence even if the previous one failed.
At the end it reports which ones failed.
With `--parallel` (or `-p`), `fx multi` executes COMMAND on all directories
in parallel. Fail and parallel are mutually exclusive.

The third form resets the multi list to empty and then runs several `fx set`
commands, adding each new build dir to the multi list (if it succeeded).
It's like running `fx multi clear` and then a series of:

  fx set PRODUCT.BOARD --auto-dir SWITCHES... && fx multi add

Arguments before SWITCHES... can be explicit PRODUCT.BOARD or can be
one of a fixed set of SPEC strings.  Run `fx multi set` alone to see
the set of available SPEC strings.  Each string corresponds to a list
of PRODUCT.BOARD + FIXED_SWITCHES... combinations.  The FIXED_SWITCHES...
are prepended to any SWITCHES... on the `fx multi set` command line.

```

[multi source code](https://cs.opensource.google/fuchsia/fuchsia/+/main:tools/devshell/multi)
