Repository navigation
v0.6.0
-
Raise compiled-output CI cache budgets to 1 GB uncompressed by default and 3 GB for ASan.
-
Add
--summary-scopefor combined-root, per-root, and comparison statistics. In comparison mode,
scopes select ordered column groups in one table:compareexpands toleft-total,right-total,
difftoleft-only,right-only,different, and each explicit category gets its own statistics.
leftandrightalias the side totals; output labels use canonical names. Ordinary summaries
default tocompareduring comparison andallotherwise; explicit scopes override that default.
Scope selection requires an active ordinary summary; a comparison-results summary alone does not suffice. -
Support INI-only
${NAME},${NAME:-DEFAULT}, and${NAME:?MESSAGE}environment substitution,
with literal quoting, single-argument values, and unchanged validation of expanded safety roots. -
Preserve targeted Bazel preparation traces for coverage and fuzz to diagnose remaining CI delays.
-
Start coverage and fuzz CI jobs immediately while preserving all final merge checks.
-
Run fuzz campaigns concurrently after preparing all targets, with CPU/memory bounds, isolated
artifacts, per-target throughput statistics, and unchanged campaign time budgets. -
Raise coverage's CI cache allowance to 1.5 GB uncompressed and 1 GB compressed to retain more build outputs.
-
Allow MSan caches up to 4 GB uncompressed and 1.2 GB compressed; report per-job cache sizes
and repository-wide usage against the 10 GB budget in main's final CI job. -
Retire older main build caches immediately after a verified replacement upload, reducing
generation overlap while preserving previous caches when the replacement is missing or oversized. -
Preserve more reusable CI compilation outputs by evicting large cache blobs before small ones
with a 2.6 GB uncompressed allowance for sanitizer jobs; apply shared caching to deep fuzz and release reference generation. -
Reject invalid summary precision, negative or malformed top limits, comparison selections without
comparison, and unsupported summary formats.--top=0consistently removes a prior limit;
aligned summary output now works in comparison mode. Accept the implemented--summary=owneralias
in CLI validation. Clarify summary/compare accounting and exports. -
Refresh bounded CI compiled-output caches on main, reuse them in PR and release builds,
and remove closed-PR, tag-scoped, and superseded caches. GCC now caches compiled outputs. -
Add MBO Works artwork to the README and favicons to documentation and coverage Pages.
-
Keep
mainfirst in the coverage index, then interleave PRs and releases newest-first by
their merge or tagged commit in main’s history. -
Give Markdown summaries descriptive headings and bullet lists for labels and notes, separate
each table’s note from the next summary,
and align exact byte values with scaled sizes in console and Markdown tables. -
Render ordinary and comparison summary tables as Markdown with
--format=mdormarkdown. -
Show count, count percentage, size, and size percentage in summary tables. Comparison results
include directories and other matched entry types. Paired categories count each pair once and
include both sides' bytes; side-total groups count their own entries and bytes. Each summary
column group uses its own full pre---toptotals for percentages.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.6.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.6.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"