fix(flatpak): the WSI layer module builds again — vkroots was declared twice #65

Open
enricobuehler wants to merge 1 commits from worktree-flatpak-vkroots into main
Owner

The flatpak has not built since 35ba64ca. Every push to main dies at "Build the flatpak", before a single build command runs:

cp: cannot overwrite non-directory
  '.../build/gamescope-wsi-layer-1/subprojects/vkroots/.git'
  with directory '.../git/https_github.com_Joshua-Ashton_vkroots.git'
Error: module gamescope-wsi-layer: Child process exited with code 1

Validated green on a Linux runner

flatpak.yml dispatched on this branch — run 15780all 14 steps succeeded, including:

  • step 10 Build the flatpak — the exact step that fails on main;
  • steps 11–13 Export single-file bundle, Publish to the Gitea generic registry, Sign + deploy the OSTree repo to flatpak.unom.io — all previously skipped by the failure.

Step 14 (attach to the Gitea release) correctly skipped: stable tags only, and this was a branch dispatch.

What happened

vkroots was declared twice. flatpak-builder clones git sources with submodules by default, and subprojects/vkroots is a real gamescope submodule. Confirmed against the upstream tree at the pinned rev:

$ git ls-tree 8c676c39 subprojects/
100644 blob ...	subprojects/glm.wrap
100644 blob ...	subprojects/stb.wrap
160000 commit 5106d8a0df95de66cc58dc1ea37e69c99afc9540	subprojects/vkroots

Mode 160000 — a submodule, already at 5106d8a0, which is byte-for-byte the commit the explicit source pinned. The submodule checkout had already produced the correct tree and left subprojects/vkroots/.git as a gitlink file; the second, redundant source then tried to copy the bare mirror onto that path as a directory, and cp refused.

Removing the redundant source is therefore a no-op on the resulting tree — the submodule supplies that exact rev, so the build is identical to the one verified on the Deck OLED.

glm and stb are a different case and their explicit sources must stay: as the ls-tree above shows, they are plain .wrap blobs, not submodules, so nothing else populates them. That asymmetry is the entire trap, and it is now documented in the manifest beside the sources, together with the disable-submodules: true escape hatch for anyone who later needs to pin a subproject away from the gamescope rev.

Ruled out: buildsystem: simple is already set and the glm/stb patch_directory copies are already hand-applied — extraction dies long before either is reached, so neither was at fault.

Why it reached main

flatpak.yml has no pull_request: trigger — only push on main with path filters, tags: ['v*'], and workflow_dispatch. PR #64's checks were green because the flatpak was never built on the PR; run 15775 was the first time this module had ever been built in CI. This is why the PR checks below prove nothing about the manifest — the green run linked above is the real evidence. Adding a PR trigger or a manifest lint is the durable follow-up, deliberately not bundled here.

This blocks the release

flatpak.yml runs on tags: ['v*'], and the failing step gates everything downstream: the bundle export, the generic-registry publish, the OSTree push to flatpak.unom.io, and the release-asset attach all stay skipped. A v0.25.0 tag cut without this would ship with no Linux/Steam Deck flatpak at all — on the release whose headline Linux change is Deck HDR working out of the box. See #56.

**The flatpak has not built since `35ba64ca`.** Every push to main dies at "Build the flatpak", before a single build command runs: ``` cp: cannot overwrite non-directory '.../build/gamescope-wsi-layer-1/subprojects/vkroots/.git' with directory '.../git/https_github.com_Joshua-Ashton_vkroots.git' Error: module gamescope-wsi-layer: Child process exited with code 1 ``` ## ✅ Validated green on a Linux runner `flatpak.yml` dispatched on this branch — [run 15780](https://git.unom.io/unom/punktfunk/actions/runs/15780) — **all 14 steps succeeded**, including: - step 10 **Build the flatpak** — the exact step that fails on main; - steps 11–13 **Export single-file bundle**, **Publish to the Gitea generic registry**, **Sign + deploy the OSTree repo to flatpak.unom.io** — all previously skipped by the failure. Step 14 (attach to the Gitea release) correctly skipped: stable tags only, and this was a branch dispatch. ## What happened `vkroots` was declared twice. flatpak-builder clones git sources **with submodules by default**, and `subprojects/vkroots` is a real gamescope submodule. Confirmed against the upstream tree at the pinned rev: ``` $ git ls-tree 8c676c39 subprojects/ 100644 blob ... subprojects/glm.wrap 100644 blob ... subprojects/stb.wrap 160000 commit 5106d8a0df95de66cc58dc1ea37e69c99afc9540 subprojects/vkroots ``` Mode `160000` — a submodule, already at `5106d8a0`, which is **byte-for-byte the commit the explicit source pinned**. The submodule checkout had already produced the correct tree and left `subprojects/vkroots/.git` as a gitlink *file*; the second, redundant source then tried to copy the bare mirror onto that path as a *directory*, and `cp` refused. Removing the redundant source is therefore a **no-op on the resulting tree** — the submodule supplies that exact rev, so the build is identical to the one verified on the Deck OLED. `glm` and `stb` are a different case and their explicit sources **must stay**: as the `ls-tree` above shows, they are plain `.wrap` blobs, not submodules, so nothing else populates them. That asymmetry is the entire trap, and it is now documented in the manifest beside the sources, together with the `disable-submodules: true` escape hatch for anyone who later needs to pin a subproject away from the gamescope rev. Ruled out: `buildsystem: simple` is already set and the glm/stb `patch_directory` copies are already hand-applied — extraction dies long before either is reached, so neither was at fault. ## Why it reached main `flatpak.yml` has **no `pull_request:` trigger** — only `push` on main with path filters, `tags: ['v*']`, and `workflow_dispatch`. PR #64's checks were green because the flatpak was never built on the PR; run 15775 was the first time this module had ever been built in CI. **This is why the PR checks below prove nothing about the manifest** — the green run linked above is the real evidence. Adding a PR trigger or a manifest lint is the durable follow-up, deliberately not bundled here. ## This blocks the release `flatpak.yml` runs on `tags: ['v*']`, and the failing step gates everything downstream: the bundle export, the generic-registry publish, the OSTree push to flatpak.unom.io, and the release-asset attach all stay skipped. **A v0.25.0 tag cut without this would ship with no Linux/Steam Deck flatpak at all** — on the release whose headline Linux change is Deck HDR working out of the box. See #56.
enricobuehler added 1 commit 2026-08-05 22:50:03 +00:00
fix(flatpak): the WSI layer module builds again — vkroots was declared twice
ci / web (pull_request) Successful in 57s
ci / docs-site (pull_request) Successful in 1m45s
ci / rust-arm64 (pull_request) Successful in 2m19s
ci / rust (pull_request) Successful in 6m22s
25b08916b6
The flatpak has not built since 35ba64ca. Every push to main fails at "Build the
flatpak", before a single build command runs:

  cp: cannot overwrite non-directory
    '.../build/gamescope-wsi-layer-1/subprojects/vkroots/.git'
    with directory '.../git/https_github.com_Joshua-Ashton_vkroots.git'
  Error: module gamescope-wsi-layer: Child process exited with code 1

vkroots was declared twice. flatpak-builder clones git sources WITH SUBMODULES by
default, and `subprojects/vkroots` is a real gamescope submodule — `git ls-tree
8c676c39 subprojects/` shows it as mode 160000 at 5106d8a0, which is byte-for-byte
the commit the explicit source pinned. So the submodule checkout already produced
the right tree and left `subprojects/vkroots/.git` as a gitlink FILE; the second,
redundant source then tried to copy the bare mirror onto that path as a DIRECTORY,
and cp refused. Source extraction died there — `buildsystem: simple` and the
hand-applied glm/stb patch_directory copies were never reached, so neither is at
fault.

Removing the redundant source is therefore a no-op on the resulting tree: the
submodule supplies that exact rev. glm and stb are NOT submodules — `subprojects/
glm.wrap` and `stb.wrap` are plain blobs at that rev — so nothing else populates
them and their explicit sources have to stay. That asymmetry is the whole trap,
and it is now written down in the manifest next to the sources, along with the
disable-submodules escape hatch for anyone who later needs to pin a subproject
away from the gamescope rev.

Why this reached main: flatpak.yml has no `pull_request:` trigger — only `push` on
main with path filters, `tags: ['v*']`, and workflow_dispatch. PR #64's checks were
green because the flatpak was never built on the PR; run 15775 was the first time
this module had ever been built in CI. Adding a PR trigger (or a manifest lint) is
the durable follow-up, deliberately not bundled here.

This blocks the release, not just main. flatpak.yml runs on `tags: ['v*']`, and the
failing step gates the bundle export, the generic-registry publish, the OSTree push
to flatpak.unom.io and the release-asset attach — all of which stay skipped. A
v0.25.0 tag cut today would ship with NO Linux/Steam Deck flatpak at all, on the
release whose headline Linux change is Deck HDR working out of the box.

NOT VALIDATED LOCALLY: this cannot be built on macOS. The reasoning is confirmed
against the upstream tree (the ls-tree above) but the green run is still owed —
dispatch flatpak.yml on this branch before merging.
All checks were successful
ci / web (pull_request) Successful in 57s
ci / docs-site (pull_request) Successful in 1m45s
ci / rust-arm64 (pull_request) Successful in 2m19s
ci / rust (pull_request) Successful in 6m22s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin worktree-flatpak-vkroots:worktree-flatpak-vkroots
git checkout worktree-flatpak-vkroots
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#65