Skip to content

fix(emulator): migrate to SDL3 and Linux graphics deps - #863

Merged
OGKevin merged 2 commits into
masterfrom
ogkevin/push/qpqoooqtrutk
Aug 17, 2026
Merged

OGKevin merged 2 commits into
masterfrom
ogkevin/push/qpqoooqtrutk

Conversation

@OGKevin

@OGKevin OGKevin commented Aug 15, 2026

Copy link
Copy Markdown
Owner

Fedora/non-NixOS devenv could not create an SDL renderer because pkgs.SDL2 was sdl2-compat without GL/Wayland/X11 libs (#855).

  • Replace sdl2 crate with sdl3 (default renderer, software fallback)
  • Ship pkgs.sdl3 plus Linux graphics packages in devenv
  • Update CI apt/brew and contributor docs

Closes: CAD-137

Change-Id: 9a9bbb96856f95728af6630851a39718
Change-Id-Short: qpqoooqtrutk

@OGKevin OGKevin added this to the 0.12.0 milestone Aug 15, 2026
@OGKevin OGKevin self-assigned this Aug 15, 2026
@github-project-automation github-project-automation Bot moved this to Backlog in Cadmus Aug 15, 2026
@OGKevin OGKevin linked an issue Aug 15, 2026 that may be closed by this pull request
Fedora/non-NixOS devenv could not create an SDL renderer because
pkgs.SDL2 was sdl2-compat without GL/Wayland/X11 libs (#855).

- Replace sdl2 crate with sdl3 (default renderer, software fallback)
- Ship pkgs.sdl3 plus Linux graphics packages in devenv
- Update CI apt/brew and contributor docs

Closes: CAD-137

Change-Id: 9a9bbb96856f95728af6630851a39718
Change-Id-Short: qpqoooqtrutk
@OGKevin
OGKevin force-pushed the ogkevin/push/qpqoooqtrutk branch from 446ab0f to 48741ac Compare August 15, 2026 16:19
@OGKevin
OGKevin temporarily deployed to cloudflare-pages-preview August 15, 2026 16:27 — with GitHub Actions Inactive
@OGKevin

OGKevin commented Aug 15, 2026

Copy link
Copy Markdown
Owner Author

@cursoragent can you have a look at the failing ci 🙏🏾

@cursor

cursor Bot commented Aug 15, 2026 •

Copy link
Copy Markdown
Contributor

I traced the Cargo failure and pushed a fix on ogkevin/push/qpqoooqtrutk (commit 74921e6b).

What failed

The required-cargo job is just a rollup — the real failure was cache-warmup → Warmup llvm-cov build:

rust-lld: error: unable to find library -lSDL3

The cache budget warnings are noise; they did not cause this failure.

Root cause

The PR switched apt from libsdl2-dev to libsdl3-dev, but Cargo CI still runs on ubuntu-latest (Ubuntu 24.04). libsdl3-dev does not exist on 24.04 (it landed in 25.10+).

The apt cache action requested libsdl3-dev, but the resolved install list had only 29 packages — SDL3 was silently skipped. That was enough for cargo check (no linking), but cargo llvm-cov nextest-archive links test binaries and failed on -lSDL3.

Fix pushed

  1. Run SDL3-native Linux jobs on ubuntu-26.04 (matches .cursor/Dockerfile):
    • cache-warmup, build-kobo, build-kobo-test
  2. Point the test/clippy Linux matrix at ubuntu-26.04 via CI_LINUX_OS in xtask
  3. Install apt packages in clippy jobs (they link too, but previously had no apt step)
  4. Bump apt cache version 1.1 → 1.2

All 16 matrix unit tests pass locally.

CI status

A new Cargo run is in progress: https://github.com/OGKevin/cadmus/actions/runs/31897736888

cache-warmup is running (it failed within ~16 minutes last time), which is a good early sign. Full Cargo still takes ~20 minutes — worth watching that the llvm-cov warmup step completes this time.

Open in Web Open in Cursor 

libsdl3-dev is unavailable on Ubuntu 24.04 (ubuntu-latest), so the apt
cache action silently skipped it and llvm-cov warmup failed to link -lSDL3.

Run cache-warmup, Kobo builds, and the test/clippy Linux matrix on
ubuntu-26.04 to match the Cursor Cloud Dockerfile, install apt packages
in clippy jobs, and bump the apt cache version.

Co-authored-by: Kevin <OGKevin@users.noreply.github.com>
permissions:
contents: read
runs-on: ubuntu-latest
runs-on: ubuntu-26.04

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [actionlint] reported by reviewdog 🐶
label "ubuntu-26.04" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2025-vs2026", "windows-2022", "windows-11-arm", "ubuntu-slim", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xlarge", "macos-latest-large", "macos-26-intel", "macos-26-xlarge", "macos-26-large", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xlarge", "macos-14-large", "macos-14", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file [runner-label]

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cursoragent can you explain this linter failure while the CI itself succeded. Is actionlint outdated?

@cursor cursor Bot Aug 15, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes — this is essentially actionlint being behind GitHub, not your workflow being wrong.

What’s happening

These are two different checks:

Check What it validates
Cargo CI GitHub actually runs the job on a real runner
actionlint Statically checks workflow YAML against a built-in list of known runs-on labels

You changed jobs to runs-on: ubuntu-26.04. GitHub added that runner in June 2026 (public preview), and your Cargo run proves it works: cache-warmup completed on ubuntu-26.04, and test/clippy matrix jobs are running on it too.

actionlint 1.7.12 (pinned in .github/workflows/actions-lint.yml) still has a hardcoded allowlist that includes things like ubuntu-24.04 and macos-26, but not ubuntu-26.04. So it reports:

label "ubuntu-26.04" is unknown

That’s a false positive relative to real GitHub behavior.

Is actionlint outdated?

Relative to GitHub: yes.
Relative to its own releases: it’s current — 1.7.12 is the latest released version, and upstream support for ubuntu-26.04 is still pending (rhysd/actionlint#682, PR #683).

So this isn’t “you’re using a deprecated runner”; it’s “the linter’s catalog hasn’t caught up with a new GitHub runner image yet.”

Why Cargo can pass while Actions lint fails

They’re separate required checks:

  • Cargo → compiles/links/tests on real infrastructure
  • Actions lint → runs actionlint on .github/workflows/** before anything executes

actionlint fails fast on the unknown label, which is why required-actions-lint fails even while Cargo is green/in progress.

How to silence it (when you want to)

Common options:

  1. Add .github/actionlint.yaml and whitelist the label:

    self-hosted-runner:
      labels:
        - ubuntu-26.04

    (Despite the name, this is the standard way to teach actionlint about labels GitHub supports but actionlint doesn’t know yet.)

  2. Ignore the specific error in .github/lint/actionlint-ignore.txt.

  3. Upgrade actionlint once a release includes ubuntu-26.04 (PR chore(deps): use matchDepNames for mupdf Renovate group #683 merged/released).

Bottom line: CI succeeding on ubuntu-26.04 is the ground truth. actionlint is flagging a label GitHub already accepts but its static list hasn’t been updated for yet.

Open in Web Open in Cursor 

Comment thread .github/workflows/cargo.yml
Comment thread .github/workflows/cargo.yml
@OGKevin
OGKevin marked this pull request as ready for review August 17, 2026 11:20
@OGKevin
OGKevin merged commit 9884029 into master Aug 17, 2026
84 of 90 checks passed
@OGKevin
OGKevin deleted the ogkevin/push/qpqoooqtrutk branch August 17, 2026 12:21

This branch was successfully deployed

1 active deployment
cloudflare-pages-preview — 74921e6b Deployed Aug 15, 2026 by cursor[bot] via deploy-cloudflare-preview #2167
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Failed to run emulator: invalid renderer

2 participants