Everything buildprof can do beyond buildprof -- <command>, which is
covered by the quick start.
Put buildprof -- in front of the build command. Choose another output path
or disable automatic opening when needed:
buildprof -o clean-build.buildprof --no-open -- ninja -C outOn a Linux runner, install your build tools, then record the build:
steps:
- uses: actions/checkout@v7
- uses: LalitMaganti/buildprof@v0.2.7
with:
command: |
cmake -S . -B build
cmake --build build -j2The job summary links to the recording artifact, including when the build
fails. Download it and open it in the web UI.
See action inputs for version and retention settings; use a
unique artifact-name for each matrix entry. For upgrades, use release tags
or release SHAs with Dependabot (see action releases).
Open an existing recording later with:
buildprof open clean-build.buildprofbuildprof.lalitm.com only delivers the UI itself. Your browser fetches the recording from localhost and processes it entirely in the page; no trace data leaves your machine.
Because the page comes from buildprof.lalitm.com and the recording from
localhost, the browser asks once whether the site may access other apps and
services on this device. Allow it. If you block it, the trace never loads. To
recover, allow it again in the site settings next to the address bar, under
"Apps on device" in Chrome or "Access this device" in Firefox, then run
buildprof open again.
Recordings contain command lines and filesystem paths. Review them before sending them to anyone.
Over SSH there is no browser to launch, so Buildprof prints the port forward to run from your own machine instead and waits for the browser to fetch the trace:
ssh -L 9001:127.0.0.1:9001 user@buildhostVS Code Remote and JetBrains Gateway forward the port automatically. The wait
gives up after ten minutes; adjust it with --wait <SECONDS>, where 0 waits
forever. Alternatively, copy the recording to your own machine and open it
in the web UI. No local installation is needed
for viewing.
Process creation, commands, and timing are always recorded. File opens and renames are also recorded by default; to reduce overhead on builds with lots of filesystem activity, disable that layer:
buildprof --no-file-events -- make -j6The process timeline remains available, but file lists and producer/consumer links are unavailable. This skips filesystem interception itself, rather than collecting and discarding events. The UI identifies recordings made this way.
Process timing is usually the right level for understanding a build. When a particular compiler or linker invocation needs a closer look, enable compiler tracing:
buildprof --compiler-traces -- cargo buildBuildprof currently imports Clang -ftime-trace, explicitly selected LLD
--time-trace, and nightly Rust self-profile data. These events appear as a
summary of active compiler threads with expandable per-thread phase tracks.
Compiler tracing can be combined with process-only recording:
buildprof --no-file-events --compiler-traces -- ninja -C buildA build which invokes Clang through an absolute path currently bypasses compiler tracing. Buildprof will still record the compiler process, but its Clang and LLD internal phases will be absent.
Compiler tracing can also change compiler cache keys or turn cache hits into misses. Existing Rust compiler wrappers remain in the invocation chain, but cache preservation is not guaranteed in this mode.