# Smoke / screenshot test The [`smoke`](../../.github/workflows/smoke.yml) workflow launches the real Waybar binary inside a **headless sway** compositor (software-rendered, no GPU) and checks three things: 1. **It starts and stays alive** — with real modules (`clock`, `cpu`, `memory`, `disk`) loaded, Waybar must not crash or log a fatal error. ([`modules-config.jsonc`](modules-config.jsonc)) 2. **It renders** — a deterministic config ([`config.jsonc`](config.jsonc) + [`style.css`](style.css)) is captured with `grim`; the bar strip must not be blank. 3. **It looks right** — the screenshot is compared to `reference.png` with an 8% fuzz and an 800-pixel tolerance. Regressions fail the job, and the screenshot and diff are uploaded as artifacts. ## Updating the reference image `reference.png` must be generated by the CI environment (local rendering differs from Ubuntu's). To (re)bless it: 1. Push your change and open the run of the `smoke` workflow. 2. Download the `waybar-screenshot` artifact. 3. Commit its `bar.png` as `test/smoke/reference.png`. Do this whenever an **intended** visual change makes the golden comparison fail. ## Run locally On a machine with `sway`, `grim` and `waybar`: ```sh ./test/smoke/run.sh test/smoke/config.jsonc test/smoke/style.css /tmp/bar.png ```