Skip to content

ci: run the suite where a GNOME 50 desktop is, not where it isn't - #5

Merged
blyatiful1 merged 1 commit into
mainfrom
claude/ci-green-afsgdf
Aug 26, 2026
Merged

ci: run the suite where a GNOME 50 desktop is, not where it isn't#5
blyatiful1 merged 1 commit into
mainfrom
claude/ci-green-afsgdf

Conversation

@blyatiful1

Copy link
Copy Markdown
Owner

CI has been red on main since the v2 rebuild started — six runs, every one of them failing for the environment rather than for the code. This is what #4 stood down on, fixed properly.

What was wrong

The ubuntu job could not pass in any configuration. Three experiments, run against a matching ubuntu-24.04 box:

Configuration Result
As it stands (no gi in the venv) pytest aborts during collection — 2 errors
venv can see PyGObject 44 failed; 19 of them "your desktop session wasn't running"
…plus a private session bus 14 failed, all of them the runner being a 2024 desktop
  • The gi problem is the venv, not the apt line. python3-gi lands in /usr/lib/python3/dist-packages, for the runner's own python3; the venv is built from actions/setup-python, whose --system-site-packages points at the tool-cache tree instead. The 22 "skipped" in that same log line were the Gio-backed tests skipping for the same reason — the tier was proving much less than it looked.
  • No session bus means every settings write is skipped with your desktop session wasn't running, which is 19 failures that say nothing about the diff.
  • ubuntu-24.04 ships gsettings-desktop-schemas 46. No accent-color key, no org.gnome.shell, so every bundled Look plans zero add-ons: hyperclass declares 6 add-ons and plans 0.

The archlinux container already had the right userspace and the session bus (dbus-run-session). It was only missing packages — its own ten failures were Namespace GnomeDesktop not available, three schema '…' is not installed, and an empty wallpaper catalogue.

What changed

ci.yml — the split moves rather than gets patched:

  • tests (Arch container) runs the whole suite, -m "not sandbox", both tiers at once, under broadway + dbus-run-session. Package list gains gsettings-desktop-schemas, gnome-settings-daemon, mutter, gnome-shell (the schemas the pages read), gnome-desktop-4 (the GnomeDesktop-4.0 typelib the thumbnailer needs), gnome-backgrounds (the catalogue the Wallpaper page scans), and desktop-file-utils + appstream so the packaging tests don't skip themselves there.
  • lint-and-packaging (ubuntu) keeps only what genuinely needs no desktop: ruff, and the three packaging suites.
  • The header note now says why, so the next person doesn't re-split it the old way.

release.yml had the same broken pre-flight — a v2.0.0 tag would have failed before building anything. "Test before shipping" is now that same container job, and the wheel build needs: it.

tests/unit/test_applyrunner.py, tests/unit/test_window.py import gi at module scope under pytestmark = pytest.mark.gtk, but a marker deselects after collection, so -m "not gtk" never got the chance. They now carry the same pytest.importorskip("gi", …) guard the other gi-dependent modules already use.

Verification

Run on an ubuntu-24.04 box with the runner's own apt packages:

  • Collection abort reproduced without the guard (Interrupted: 2 errors during collection), clean with it (1340/1417 tests collected).
  • A venv built from the distro python with --system-site-packages does see gi — that's the mechanism the old job was missing.
  • The three-configuration table above is measured, not inferred: 44 → 14 failures purely from adding dbus-run-session.
  • The new ubuntu job passes as written: ruff clean, 31 passed, 1 skipped across the three packaging suites, with no PyGObject and no session.
  • python -m build --wheel still produces the wheel.

What I could not run here is the Arch container itself (no container runtime in this environment), so this PR's own CI is the first execution of the container job. If the remaining three widget failures (ActionRow has no set_value, and two reset-button assertions) turn out not to be schema-caused after all, they're real findings and I'll chase them here.

Checklist

  • python -m pytest -q passes — for the parts runnable without a GNOME 50 desktop; see Verification.
  • python -m gtheme validate all passes — not run: needs the desktop this environment does not have.
  • For theme PRs: no themes changed.

Generated by Claude Code

CI has been red on main since the v2 rebuild started — six runs, every one
of them for the environment rather than for the code.

The ubuntu job could not pass in any configuration, and it took three
separate experiments to establish that:

  * as it stands, `import gi` fails and pytest aborts during collection.
    apt puts PyGObject in /usr/lib/python3/dist-packages, for the runner's
    own python3; the venv is built from actions/setup-python, whose
    --system-site-packages points at the tool-cache tree instead. The 22
    "skipped" in that same line were the Gio-backed tests skipping for the
    same reason, so the tier was proving far less than the log suggested.
  * give the venv PyGObject and 44 tests fail: 19 of them are every
    settings write being skipped with "your desktop session wasn't
    running", because there is no session bus on a CI runner.
  * add a private session bus and 14 remain, all of them the runner being
    a 2024 desktop: ubuntu-24.04 ships gsettings-desktop-schemas 46, which
    has no `accent-color` key and no org.gnome.shell, so every bundled
    Look plans zero add-ons.

The archlinux container already had the right userspace and the session
bus; it was only missing packages. So the split moves: the container runs
the whole suite (`-m "not sandbox"`, both tiers), and ubuntu keeps the two
things that genuinely need no desktop — ruff and the packaging tests.

Also in the container's package list, which is what its own ten failures
were about: gsettings-desktop-schemas, gnome-settings-daemon, mutter and
gnome-shell for the schemas the pages read; gnome-desktop-4 for the
GnomeDesktop-4.0 typelib the thumbnailer needs; gnome-backgrounds for the
wallpaper catalogue the Wallpaper page scans; desktop-file-utils and
appstream so the packaging tests do not skip themselves there.

release.yml had the same broken pre-flight, so a v2.0.0 tag would have
failed before it built anything. Its "Test before shipping" step is now
the same container job, and the wheel build waits on it.

Two test modules import gi at module scope under `pytestmark =
pytest.mark.gtk`, but a marker deselects after collection, so -m "not gtk"
never got the chance. They now carry the importorskip guard the other
gi-dependent modules already use: on a machine with no PyGObject they
skip instead of aborting the run. Verified both ways — the abort
reproduces without the guard, collection is clean with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165p9a9fF1VfbWaQEGD7yYW
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 90ee588b-999d-4a9e-bfbb-fd26c5108fcf


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@blyatiful1
blyatiful1 merged commit ee19be2 into main Aug 26, 2026
1 of 3 checks passed
blyatiful1 pushed a commit that referenced this pull request Aug 26, 2026
Brings in the CI restructure from #5 so this PR's checks run against the
container job rather than the ubuntu one that could not pass.
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.

2 participants