Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Running Checks Across Architectures

just preflight runs every lane CI runs: hygiene, clippy on all three arches, then unittests, miri, loom and the qemu selftests, then the audit / license group. Unit, miri, and loom tests are host-only by construction (they declare target_compatible_with = [host_configuration.os, host_configuration.cpu]) and --skip-incompatible-targets drops them silently on the arch lanes. selftests always boots the riscv64 qemu image; per-arch qemu_test targets aren’t wired yet.

By default it only covers the targets your changes affect, so it is cheap enough to run before every push. Pass targets explicitly to override:

just preflight                        # everything your changes affect
just preflight //...                  # the whole workspace
just preflight //lib/mycrate:mycrate  # one crate

just changed-targets prints the affected set on its own if you want to see what preflight will act on. Individual phases (check, clippy, doc, unittests, miri, loom, benchmark) take the same target list plus a platform=X flag if you want to invoke just one.

A crate that’s intrinsically host-only (test runners, benches, fuzzers, host tooling like mkdisk-img) declares this with target_compatible_with:

load("@prelude//platforms:defs.bzl", "host_configuration")

rust_test(
    name = "my_unittests",
    srcs = glob(["src/**/*.rs"]),
    target_compatible_with = [host_configuration.os, host_configuration.cpu],
    visibility = ["PUBLIC"],
)

The rust_benchmark, rust_loom_test, and rust_fuzz wrappers in build/{bench,loom,fuzz}.bzl apply this automatically. A crate that’s arch-locked (e.g. lib/riscv, the kernel, the loader) declares the inverse:

target_compatible_with = ["prelude//cpu/constraints:riscv64"],