Repository navigation
feat(chairlift): add wallpaper slideshow and video wallpaper brew bundles - #1185
Conversation
c47b3c2 to
dc19001
Compare
|
Rebased cleanly onto latest
|
…dles ChairLift's `applications_page.brew_bundles_group` scans immediate `*.Brewfile` children of `/usr/share/ublue-os/homebrew` and renders each as an installable bundle, so a file dropped in that directory reaches the Applications page with no further wiring. Add two opt-in bundles: - `wallpaper-slideshow.Brewfile` — `flatpak "app.drey.Damask"` - `video-wallpaper.Brewfile` — `flatpak "io.github.jeffshee.Hidamari"` Both are direct children of the scan root with the exact `.Brewfile` suffix, since ChairLift does not recurse and a misplaced file is silently absent from the UI. The bundle covers install only; uninstall stays with ChairLift's `flatpak_user_group` / `flatpak_system_group`, and no new group key was added because an unknown key fails ChairLift's strict schema validation and disables the whole application. `flatpak "..."` is a Bluefin convention that `validate-brewfiles.sh` and `brew bundle` both ignore, so `tests/test_chairlift_config.py` gains three tests pinning the app ids, the 0644 mode, and bundle-name uniqueness — the Brewfile validator alone would pass with zero package checks. The brew-lifecycle skill documents the second consumer of that directory and the non-recursive requirement; `docs/skills/index.*` is regenerated. Assisted-by: Claude via Claude Code Co-authored-by: Claude <noreply@anthropic.com> Hive-Run: projectbluefin#1159 Hive-Plan: projectbluefin#1159 implementation steps 1-3 Hive-Spec: projectbluefin#1159#testing-and-verification Signed-off-by: sramkrishna <sramkrishna@users.noreply.github.com>
dc19001 to
de7c2af
Compare
|
Rebased onto latest |
|
The two Brewfiles look right. 1. An existing test got deleted by accident. On main, 2. The docs say What is true is that our Two smaller things, not blockers:
|
hanthor
left a comment
There was a problem hiding this comment.
The bundles look reasonable, but there's a test regression to fix first:
tests/test_chairlift_config.py: the hunk replaces thedef test_help_links_point_at_bluefin():header with the new tests, so the old body (resources = _load_config()["help_page"]...) now runs as the tail oftest_bundle_names_do_not_collide_with_other_discovered_brewfiles. Please restore the original function header so that test runs on its own again.test_bundle_names_do_not_collide_with_other_discovered_brewfilescan't fail as written, because stems from a singleglobover one directory are always unique. I'd drop it, or make it compare against the other bundle directories.- Placement: the Brewfiles live in
shared/, so LTS and Dakota get them, while #1186 and #1187 configure Damask only underbluefin/. Please confirm that split is intended.
…docs - restore separate def test_help_links_point_at_bluefin() function header - clarify that CI's Brewfile validator skips flatpak lines (rather than brew bundle) - relax file mode check to assert world-readability without brittle umask dependence
|
@Danathar @hanthor Addressed both review comments in commit 4e616cc:
Awaiting re-review and secondary approval per the 2-reviewer requirement. |
hanthor
left a comment
There was a problem hiding this comment.
Thanks. test_help_links_point_at_bluefin is its own test again (tests/test_chairlift_config.py:595), and the permission and docs tweaks are fine. Two small items left:
tests/test_chairlift_config.py:589-592:test_bundle_names_do_not_collide_with_other_discovered_brewfilesstill can't fail, because stems from one glob in one directory are always unique. Please drop it or compare against the other bundle directories.- Placement: the Brewfiles are in
system_files/shared/, so LTS and Dakota get them, while #1186 and #1187 wire up Damask only underbluefin/. Please confirm that's intended, or move them tobluefin/.
…ctories Compare bundle stems across both system_files/shared and system_files/bluefin homebrew directories to ensure no duplicate stems exist.
|
@hanthor Addressed feedback in commit 1f0e229:
All 32 tests in |
hanthor
left a comment
There was a problem hiding this comment.
Thanks. test_bundle_names_do_not_collide_with_other_discovered_brewfiles now globs system_files/**/usr/share/ublue-os/homebrew/*.Brewfile, so it compares stems across shared/ and bluefin/ and can actually fail. Keeping the bundles in shared/ so LTS and Dakota get the opt-in bundles is fine with me. CI is green.
Closes #1159.
ChairLift's
applications_page.brew_bundles_groupin/usr/share/chairlift/config.ymlalready pointsbundles_pathsat/usr/share/ublue-os/homebrewand renders one installable bundle perimmediate
*.Brewfilechild, naming the bundle after the filename stem.So exposing the two wallpaper apps is a matter of placing files in that
directory — no
config.ymlchange, which is deliberate: ChairLift failsclosed on an unknown page, group, or field key and disables the whole
application, so no new group was invented.
Changes
system_files/shared/usr/share/ublue-os/homebrew/wallpaper-slideshow.Brewfileflatpak "app.drey.Damask"system_files/shared/usr/share/ublue-os/homebrew/video-wallpaper.Brewfileflatpak "io.github.jeffshee.Hidamari"tests/test_chairlift_config.pydocs/skills/brew-lifecycle/references/package-set.mddocs/skills/brew-lifecycle/SKILL.mdlast_updatedbumpeddocs/skills/index.json,docs/skills/index.mdscripts/generate_skill_index.py --writeBoth files live in
system_files/shared/(all variants — bluefin,bluefin-lts, dakota) and are mode
0644, matching every sibling Brewfile.Both are direct children of the scan root with the exact
.Brewfilesuffix:ChairLift does not recurse, so a file in a subdirectory would be silently
absent from the Applications page rather than an error.
Two deliberate constraints, both now documented in the skill:
flatpak_user_group/flatpak_system_group. A bundle has no uninstall action, and expressingone by inventing a group would trip the strict schema.
flatpak "..."is an opt-in Bluefin convention, not stock HomebrewBundle.
validate-brewfiles.shandbrew bundleboth ignore it, so aflatpak-only Brewfile passes the Brewfile gate with zero package checks.
Unit tests — not the validator — are what pin the app ids here.
Verification
Run locally in the worktree, all green:
python3 -m pytest tests/test_chairlift_config.py tests/test_skill_docs.py -q→ 42 passednpx --yes bats tests/test_native_recipes.bats→ all ok (through ok 22)npx --yes bats tests/test_validate_brewfiles.bats tests/test_suite_registration.bats→ all okPATH="$HOME/.local/bin:$PATH" pre-commit run --all-files→ all hooks passed, including "Validate docs/skills/index.json is up to date"python3 scripts/generate_skill_index.py --check→ up to datejust check→ exit 0Not run locally:
bash scripts/validate-brewfiles.sh. The script requiresa
brewbinary on PATH and exits 2 with "Homebrew is required to validateBrewfiles." in this environment. Its CI counterpart
(
.github/workflows/validate-brewfiles.yaml) triggers onsystem_files/shared/usr/share/ublue-os/homebrew/**and will run on this PR;given the files contain only comment lines and
flatpakdeclarations, itshould report zero package checks for both. Flagging this rather than
claiming it was run.
The three new tests in
tests/test_chairlift_config.pyassert thatbundles_pathsstill resolves to the directory the files live in, that eachexpected bundle is a 0644 regular file directly in that directory, that each
contains exactly its intended
flatpakdeclaration, and that the bundlenames are unique. No new test file was added —
tests/test_suite_registration.batsenforces that every suite in
tests/is registered in theJustfile, so newassertions belong in the existing file.
— hive: backend=litellm model=deepseek/deepseek-v4.1-flash
🐝 Hive Agent:
contributor| SHA:c47b3c2