.github/workflows/nightly-regression.yml
wavgen
Generate reference material
Once, cached
wavchan
Split/downmix channels
If multichannel
wavelens analyze
Ref vs DUT, 6 checks
wavsummary
Rolls every report into one file
CI gate
Exit code decides pass or fail
EXIT 0 All reports pass. Pipeline continues, merge proceeds.
EXIT 1 Any report fails. Build stops, PR is blocked until it's fixed.

wavgen and wavchan are conditional — most pipelines generate reference material once and cache it, and only need wavchan for multichannel content. wavscan isn't part of the gated flow; it's for ad-hoc single-file inspection outside CI. wavelens, wavsummary, and the gate itself are the only steps every pipeline needs.

A minimal pipeline

The whole chain, as a single job:

# .github/workflows/nightly-regression.yml
name: Nightly audio regression
on: [push]
jobs:
  regression:
    runs-on: ubuntu-latest
    steps:
      - run: |
          # reference material is generated once and cached elsewhere --
          # this step only runs the comparison and the CI gate
          wavelens analyze --ref reference.wav --dut build/output.wav \
            --out reports/output.html --json
          wavsummary ./reports --json

A failed comparison stops the job — no separate script to interpret output, no report anyone has to remember to open by hand.

Deciding what actually gates the build

Not every check failure should block a merge. A codec round-trip that reliably fails Bit-Exactness but passes everything else isn’t a regression — it’s expected behavior for a lossy pipeline. See Wiring wavsummary into a CI pipeline for the full walkthrough, including what to gate on and how to archive reports as build artifacts.

Full reference

For every flag, every command, and the complete list of what each tool does — see the docs.