Skip to main content
PR #859 adds a Binary Size GitHub Actions workflow. It gates PRs on binary growth and keeps a historical size series. This closes the feedback loop that previously allowed dependency bloat and cross-crate monomorphization creep to go undetected between audits.

What is tracked

All metrics come from a single release build. This build uses fat LTO, codegen-units=1, and keeps symbols so cargo bloat can reuse it without recompiling.
MetricSignal
Stripped file sizeShows how much the shipping binary grew
.text sectionMeasures code bloat from generic instantiation that persists even in stripped builds
Allocated size (text+data+bss)Catches static data tables that never appear in .text
.text per crate (cargo bloat --crates)Attributes .text growth to individual workspace crates and std; everything else appears as “other deps”
LLVM IR lines/copies (cargo llvm-lines)Detects monomorphization growth before linking, cheaply
Crate count (Cargo.lock)Signals when a new dependency was added

PR gate

Every PR gets a sticky comment with all metric deltas and a per-crate top-movers table. The job fails when either of the two gated metrics exceeds its absolute per-PR budget:
MetricBudget
Δ stripped size≤ 64 KiB
Δ .text≤ 32 KiB
Absolute budgets catch real regressions on large binaries that percentage thresholds would hide. Sizes are deterministic across the pinned toolchain, so deltas are noise-free.

Escape hatch

Add the size-increase-ok label to a PR and re-run the failed job to downgrade the gate to a warning. Use this for expected jumps such as toolchain bumps, accepted new dependencies, or deliberate feature additions. The size increase still lands in the historical series.
The workflow queries the label live at gate time (not from the frozen event payload), so adding the label and re-running always works, even after the workflow has already triggered.

Historical series

The push job stores every main-branch measurement at dev/binary-size on gh-pages via github-action-benchmark. A 102% alert threshold posts a comment on the offending commit as a post-merge safety net for regressions that slipped through the PR gate (e.g. via the label). Charts: https://oxidezap.github.io/whatsapp-rust/dev/binary-size/

Baseline semantics

The PR baseline is the size-metrics artifact from the latest successful main run, not the merge-base commit. A long-lived stale PR can therefore show deltas inherited from main merges that happened while it sat open — rebase to clear them.

Fork PRs

Fork PRs run with a read-only token and receive the job summary and gate result but no PR comment.