Skip to content

test: run the Wayland keyboard suite on Ubuntu 24.04 and 26.04 - #3

Merged
foxnne merged 1 commit into
fizzyfrom
test/xkb-fallback
Oct 9, 2026
Merged

foxnne merged 1 commit into
fizzyfrom
test/xkb-fallback

Conversation

@foxnne

@foxnne foxnne commented Oct 9, 2026

Copy link
Copy Markdown

Fixes fizzyedit/fizzy#289. Part of fizzyedit/fizzy#280 (step A4b). Needs fizzyedit/SDL#3, whose commit this pins. Builds on #1 (merged, fizzy = fizzy-1.0.3+3.4.16-6).

What changes

  • The sdl pin moves to fizzyedit/SDL wayland/xkb-mod-mask-optional @ 36dda37. That is fizzy-3.4 (fizzy-3.4.16-6) plus the FizzyXkb suite and patch 8, which makes xkb_keymap_mod_get_mask optional at runtime. It's a test pin until that commit is tagged.
  • build.zig: testautomation_fizzy_xkb.c joins the test-fizzy sources (one line).
  • CI: a new test-fizzy-xkb job, separate from A1's jobs. It runs in ubuntu:24.04 (libxkbcommon 1.6, so SDL's fallback runs) and in ubuntu:26.04 (1.13, so the 1.10 path runs). This package builds SDL against libxkbcommon 1.13's headers, which is what made the Wayland driver unloadable on 24.04.
    • Weston runs on its X11 backend inside Xvfb, not headless. The headless backend has no seat, so a client never gets a keyboard or keymap. The X11 backend has a keyboard whose keymap comes from the X server's layout.
    • setxkbmap -layout de gives the suite German levels (AltGr+Q = @ and so on), which SDL's built-in default keymap can't produce. Xvfb -noreset is needed: without it Xvfb resets the layout to us every time its last client disconnects, setxkbmap included.
    • It runs zig build test-fizzy -- --filter FizzyXkb with FIZZY_TEST_XKB_LAYOUT=de.

Red, then green

Those were workflow_dispatch runs on this branch, while it was stacked on the A1 branch. This PR's own checks run against fizzy.

Before merge

fizzyedit/SDL#3 goes onto fizzy-3.4 and gets a permanent tag (the maintainer names it; I created none). Then the pin here changes from the test pin to the tagged commit. After that, fizzy repins sdl_zig and docs/DEPENDENCIES.md gets SDL patch 8.

🤖 Generated with Claude Code

The `sdl` pin moves to fizzyedit/SDL `wayland/xkb-mod-mask-optional`:
the suite for the Wayland driver on an older libxkbcommon
(testautomation_fizzy_xkb.c, now built by test-fizzy) and the patch that
makes `xkb_keymap_mod_get_mask` optional at runtime. A test pin until that
commit is tagged.

CI gains a test-fizzy-xkb job in ubuntu:24.04 (libxkbcommon 1.6) and
ubuntu:26.04 (1.13) containers, so both SDL's fallback and its 1.10 path
run. Weston runs on its X11 backend inside Xvfb, not headless: the headless
backend has no seat, the X11 one has a keyboard with the X server's layout,
set to German (de) for the suite's level checks.

Fixes fizzyedit/fizzy#289. Part of fizzyedit/fizzy#280.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@foxnne
foxnne marked this pull request as ready for review October 9, 2026 18:48
@foxnne
foxnne merged commit 264af2a into fizzy Oct 9, 2026
10 of 13 checks passed
foxnne added a commit to fizzyedit/fizzy that referenced this pull request Oct 9, 2026
…294)

Fixes #289. Part of #280 (steps A1, A2 and A4b landed on the forks).

Moves fizzy's `.sdl` pin to sdl_zig `fizzy-1.0.3+3.4.16-8` (SDL
`fizzy-3.4.16-8`). That brings two things:

**1. The forks carry tests now.** fizzyedit/SDL has fizzy's own suites
on SDL's test harness, one per patch, each failing without its patch.
fizzyedit/sdl_zig runs them with `zig build test-fizzy` in CI: Linux on
lavapipe under Xvfb and headless weston, and the hosted macOS runners,
which have a Metal device.
- fizzyedit/SDL#1 → `fizzy-3.4.16-6` (`4839ede`): the runner, plus patch
1's suite (transparent window claimed on Metal and Vulkan).
- fizzyedit/sdl_zig#1 → `fizzy-1.0.3+3.4.16-6` (`0f6a2a8`): the
`test-fizzy` step.
- fizzyedit/SDL#2 → `fizzy-3.4.16-8` (`a518aaf`), fizzyedit/sdl_zig#2 →
`fizzy-1.0.3+3.4.16-8` (`a02dda8`): patch 6's suite, Wayland frame
insets.
- **How:** it reads libwayland's request trace under headless weston, at
scale 1 and 2.
- **Checks:** geometry, input region, min/max sizes and published insets
while floating; zero insets when maximized or fullscreen; popup
anchoring.
  - **Result:** passes on the fork, and fails on upstream 3.4.16.
  - **Problems it found in patch 6:** five, listed in #280 (C2b).

**2. SDL patch 8: Wayland loads where libxkbcommon is older than 1.10**
(#289).
- **The bug:** built against 1.10+ headers (sdl_zig uses 1.13), SDL
required `xkb_keymap_mod_get_mask()`. On Ubuntu 24.04 (1.6) or Debian 12
(1.5) the whole Wayland driver reported itself unavailable, and fizzy
fell back to X11. Upstream `main` has the same problem.
- **The fix:** the symbol is now optional at runtime, and the masks fall
back to `xkb_keymap_mod_get_index()`, the path SDL already takes when
built against older headers. For standard keymaps both paths give the
same masks.
- **The proof:**
- [red](https://github.com/fizzyedit/sdl_zig/actions/runs/37968707700)
on `ubuntu:24.04` without the patch ("wayland not available");
- [green](https://github.com/fizzyedit/sdl_zig/actions/runs/37971005996)
on 24.04 and 26.04 with it, where a German keymap's Shift, Caps Lock and
AltGr levels come out right.
- **The PRs:** fizzyedit/SDL#3 → `fizzy-3.4.16-7` (`36dda37`);
fizzyedit/sdl_zig#3 → `fizzy-1.0.3+3.4.16-7` (`264af2a`).

`docs/DEPENDENCIES.md` records patch 8, the three suites, sdl_zig's step
and CI jobs, all six tags, and each patch's check at a rebase.

## Verified

On macOS (arm64), in a fresh workspace on `main`:

| Gate | Result |
|---|---|
| `zig build` | 43/43 steps |
| `zig build test` | 75/75 steps |
| `zig build test-integration` | 33/33 steps, 347/347 tests |
| `zig build check-web` | 16/16 steps |
| `zig build test-sdk-version` | 12/12 steps |
| `zig build -Dtarget=x86_64-linux-gnu` | 54/54 steps (builds the
patched Wayland file) |

Not verified: a fizzy binary running on a real Ubuntu 24.04 Wayland
desktop. The evidence is the fork suite in CI containers, built from the
same sdl_zig. The SDK fingerprint doesn't move, since plugins never link
SDL.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant