v0.26.0 promised a Fedora and an apt gamescope that were never built — and a warning is why nobody noticed #135

Merged
enricobuehler merged 1 commits from worktree-gamescope-rpm-deb-builddeps into main 2026-08-09 07:23:01 +00:00
Owner

The v0.26.0 release notes and the docs-site both say the patched gamescope is now installable on Fedora and on Debian/Ubuntu. Neither package exists on the release. Both builds failed inside best-effort steps that emit ::warning:: and return 0, so every job stayed green. Arch built fine — which is why it is the only gamescope package attached, and why nothing looked wrong.

Caught while verifying the release before announcing, by checking that the packages existed rather than trusting the board.

Two missing deps, one root cause

dnf builddep gamescope / apt-get build-dep gamescope resolve the distro's older packaged gamescope, which does not need what the pinned master tree needs.

Fedora — both f43 and f44:

/usr/sbin/ld: cannot find -lstdc++: No such file or directory
/usr/sbin/ld: have you installed the static version of the stdc++ library ?
ERROR: Compiler sccache c++ cannot compile programs.

build-punktfunk-gamescope.sh appends -static-libstdc++ -static-libgcc to LDFLAGS deliberately — that is what lets the binary start on SteamOS's older libstdc++ (GLIBCXX_3.4.35 not found, documented in the script). Without libstdc++-static it trips meson's first sanity check, so nothing builds at all.

Debian/Ubuntu noble:

protocol/meson.build:7:17: ERROR: Neither a subproject directory nor a wayland-protocols.wrap file was found.

The tree carries no wrap fallback for wayland-protocols.

The fix

Both proven deps install without || true, so a rename is loud rather than another silent skip. The remaining Arch makedepends the older packaged gamescope may not pull (glm, cmake, libXcursor, wayland-protocols-devel) stay best-effort — meson finds fallbacks, and a name that moves between releases should not fail the job.

The part that actually matters

On refs/tags/v*, a missing gamescope is now an error. A release must not be able to make a claim its own CI silently dropped — the deps are today's instance, the silence is the defect.

Gated in two places per platform:

  • the build step, and
  • the packaging step, which is authoritative and covers the cache path — the build step is if: cache-hit != 'true', so a stale or empty cache would otherwise sail past it and skip in silence on a release.

Canary keeps the old best-effort behaviour; nothing changes for main pushes.

Deliberately not gated: the sysext leg. The notes make no claim about gamescope inside the sysext, and with the build fixed gs-cache is populated so it gets the binary anyway. Gating it would add release-blocking risk with no matching promise.

⚠ Verification

Both YAML files parse, and every gamescope-touching run: block is bash -n clean with the matrix placeholders substituted (7 blocks checked).

The dep names cannot be proven from macOS. The rpm and deb legs on the next tag are the proof — and they are now hard-gated, so a wrong name fails loudly instead of shipping another empty promise.

Sequencing

Do not merge-and-forget: v0.26.0 is tagged, published and unannounced, pending this. It gets re-pointed onto a main tip that carries this plus one other fix still landing, then the rpm/deb legs re-run, then the packages get verified to exist, then the announce goes out.

The v0.26.0 release notes and the docs-site both say the patched gamescope is now installable on Fedora and on Debian/Ubuntu. **Neither package exists on the release.** Both builds failed inside best-effort steps that emit `::warning::` and return 0, so every job stayed green. Arch built fine — which is why it is the only gamescope package attached, and why nothing looked wrong. Caught while verifying the release before announcing, by checking that the *packages* existed rather than trusting the board. ## Two missing deps, one root cause `dnf builddep gamescope` / `apt-get build-dep gamescope` resolve the **distro's older packaged** gamescope, which does not need what the pinned master tree needs. **Fedora — both f43 and f44:** ``` /usr/sbin/ld: cannot find -lstdc++: No such file or directory /usr/sbin/ld: have you installed the static version of the stdc++ library ? ERROR: Compiler sccache c++ cannot compile programs. ``` `build-punktfunk-gamescope.sh` appends `-static-libstdc++ -static-libgcc` to `LDFLAGS` **deliberately** — that is what lets the binary start on SteamOS's older libstdc++ (`GLIBCXX_3.4.35 not found`, documented in the script). Without `libstdc++-static` it trips meson's **first sanity check**, so nothing builds at all. **Debian/Ubuntu noble:** ``` protocol/meson.build:7:17: ERROR: Neither a subproject directory nor a wayland-protocols.wrap file was found. ``` The tree carries no wrap fallback for `wayland-protocols`. ## The fix Both proven deps install **without `|| true`**, so a rename is loud rather than another silent skip. The remaining Arch `makedepends` the older packaged gamescope may not pull (`glm`, `cmake`, `libXcursor`, `wayland-protocols-devel`) stay best-effort — meson finds fallbacks, and a name that moves between releases should not fail the job. ## The part that actually matters **On `refs/tags/v*`, a missing gamescope is now an error.** A release must not be able to make a claim its own CI silently dropped — the deps are today's instance, the silence is the defect. Gated in **two** places per platform: - the **build** step, and - the **packaging** step, which is authoritative *and* covers the cache path — the build step is `if: cache-hit != 'true'`, so a stale or empty cache would otherwise sail past it and skip in silence on a release. Canary keeps the old best-effort behaviour; nothing changes for main pushes. **Deliberately not gated:** the sysext leg. The notes make no claim about gamescope inside the sysext, and with the build fixed `gs-cache` is populated so it gets the binary anyway. Gating it would add release-blocking risk with no matching promise. ## ⚠ Verification Both YAML files parse, and **every** gamescope-touching `run:` block is `bash -n` clean with the matrix placeholders substituted (7 blocks checked). The dep *names* cannot be proven from macOS. The rpm and deb legs on the next tag are the proof — and they are now hard-gated, so a wrong name fails loudly instead of shipping another empty promise. ## Sequencing **Do not merge-and-forget:** `v0.26.0` is tagged, published and **unannounced**, pending this. It gets re-pointed onto a main tip that carries this plus one other fix still landing, then the rpm/deb legs re-run, then the packages get verified to exist, then the announce goes out.
enricobuehler added 1 commit 2026-08-09 07:22:50 +00:00
fix(ci): the gamescope RPM and .deb never built, and a warning let the tag ship anyway
ci / bun-nix (pull_request) Successful in 23s
ci / docs-site (pull_request) Successful in 1m18s
ci / web (pull_request) Successful in 1m32s
ci / rust-arm64 (pull_request) Successful in 3m22s
ci / rust (pull_request) Successful in 11m20s
39869031be
v0.26.0's notes and docs-site say the patched gamescope is now installable on
Fedora and on Debian/Ubuntu. Neither package exists on the release. Both builds
failed inside best-effort steps that emit `::warning::` and return 0, so every
job stayed green and the only evidence was a warning nobody reads. Arch built
fine, which is why it is the sole gamescope package attached.

Two distinct missing build deps, same root cause: `dnf builddep gamescope` /
`apt-get build-dep gamescope` resolve the DISTRO'S OLDER PACKAGED gamescope,
which does not need what the pinned master tree needs.

  Fedora (f43 AND f44)
    /usr/sbin/ld: cannot find -lstdc++
    have you installed the static version of the stdc++ library ?
    ERROR: Compiler sccache c++ cannot compile programs.

  build-punktfunk-gamescope.sh appends `-static-libstdc++ -static-libgcc` to
  LDFLAGS deliberately, so the binary still starts on SteamOS's older libstdc++.
  Without libstdc++-static that trips meson's very FIRST sanity check, so
  nothing builds at all.

  Debian/Ubuntu noble
    protocol/meson.build:7:17: ERROR: Neither a subproject directory nor a
    wayland-protocols.wrap file was found.

  The tree carries no wrap fallback for wayland-protocols.

Both proven deps are installed WITHOUT `|| true` so a rename is loud. The
remaining Arch makedepends the older packaged gamescope may not pull (glm,
cmake, libXcursor, wayland-protocols-devel on Fedora) stay best-effort, since
meson finds fallbacks and a name that moves between releases should not fail
the job.

And the part that actually matters: on `refs/tags/v*` a missing gamescope is
now an ERROR, not a warning. A release must not be able to make a claim its own
CI silently dropped. Gated in two places per platform — the build step, and the
packaging step that is authoritative and also covers the cache path (the build
step is skipped entirely on a cache hit, so a stale cache would otherwise reach
packaging and skip in silence). Canary keeps the old best-effort behaviour.

Deliberately NOT gated: the sysext leg. The notes make no claim about gamescope
inside the sysext, and with the build fixed gs-cache is populated so it gets the
binary anyway — gating it would add release-blocking risk with no matching
promise.

⚠ Verification is CI itself: both YAML files parse, and every gamescope-touching
`run:` block is `bash -n` clean with the matrix placeholders substituted. The
dep names cannot be proven from macOS; the rpm and deb legs on the next tag are
the proof, and they are now hard-gated, so a wrong name fails loudly instead of
shipping another empty promise.
enricobuehler merged commit 08eaf337e8 into main 2026-08-09 07:23:01 +00:00
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#135