Merge pull request #5166 from Alexays/ci/smoke-test #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: smoke | |
| # Launch the real Waybar binary inside a headless sway compositor and verify it | |
| # starts, renders, and matches a reference screenshot. Complements the unit | |
| # tests and build jobs, which never actually run the bar. | |
| on: [push, pull_request] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| smoke: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install --no-install-recommends -y \ | |
| sway grim imagemagick fonts-dejavu-core \ | |
| meson ninja-build g++ pkg-config scdoc wayland-protocols \ | |
| gobject-introspection libdbusmenu-gtk3-dev libevdev-dev libfmt-dev \ | |
| libgirepository1.0-dev libgtk-3-dev libgtkmm-3.0-dev libinput-dev \ | |
| libjsoncpp-dev libmpdclient-dev libnl-3-dev libnl-genl-3-dev \ | |
| libpulse-dev libsigc++-2.0-dev libspdlog-dev libwayland-dev \ | |
| upower libxkbregistry-dev libxkbcommon-dev | |
| - name: Build & install Waybar | |
| run: | | |
| meson setup build -Dman-pages=disabled | |
| ninja -C build | |
| sudo ninja -C build install | |
| # --- Level 1: smoke with real modules --- | |
| - name: Smoke — real modules load without crashing | |
| run: ./test/smoke/run.sh test/smoke/modules-config.jsonc | |
| # --- Level 1 + 2: launch deterministic config and screenshot --- | |
| - name: Launch + screenshot (deterministic config) | |
| run: ./test/smoke/run.sh test/smoke/config.jsonc test/smoke/style.css bar.png | |
| # --- Level 2: the bar actually rendered something --- | |
| - name: Check the bar is not blank | |
| run: | | |
| sd=$(convert bar.png -crop 1920x30+0+0 +repage -colorspace Gray \ | |
| -format '%[fx:standard_deviation]' info:) | |
| echo "bar strip stddev = $sd" | |
| awk "BEGIN{ exit !($sd > 0.01) }" || { | |
| echo "::error::the top bar strip looks blank — Waybar rendered nothing" | |
| exit 1 | |
| } | |
| # --- Level 3: golden comparison against the committed reference --- | |
| - name: Compare against reference screenshot | |
| run: | | |
| if [ -f test/smoke/reference.png ]; then | |
| ae=$(compare -metric AE -fuzz 8% test/smoke/reference.png bar.png diff.png 2>&1 || true) | |
| ae=$(printf '%s' "$ae" | grep -oE '^[0-9]+' || echo 0) | |
| echo "differing pixels (fuzz 8%): $ae" | |
| if [ "$ae" -gt 800 ]; then | |
| echo "::error::visual regression: $ae pixels differ from the reference (threshold 800). See the 'diff.png' artifact." | |
| exit 1 | |
| fi | |
| echo "✓ within tolerance" | |
| else | |
| echo "::warning::No reference image yet. Download the 'waybar-screenshot' artifact from this run and commit bar.png as test/smoke/reference.png to enable golden comparison." | |
| fi | |
| - name: Upload screenshots | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: waybar-screenshot | |
| path: | | |
| bar.png | |
| diff.png | |
| if-no-files-found: warn |