diff --git a/.gitea/workflows/deb.yml b/.gitea/workflows/deb.yml index 2e95f73c..ea349dff 100644 --- a/.gitea/workflows/deb.yml +++ b/.gitea/workflows/deb.yml @@ -344,10 +344,31 @@ jobs: apt-get update apt-get install -y --no-install-recommends meson ninja-build glslc git || true apt-get build-dep -y gamescope || true + # NOT best-effort. `build-dep gamescope` resolves the distro's much older packaged + # gamescope — where noble has one at all — so it misses what the master tree needs, and + # wayland-protocols is the gap that actually stops the build: meson dies in + # protocol/meson.build with "Neither a subproject directory nor a wayland-protocols.wrap + # file was found", because the tree has no wrap fallback for it. That is what happened on + # the v0.26.0 tag: the step warned and skipped, the job stayed green, and the release + # shipped with no gamescope .deb while the notes said it had one. + apt-get install -y --no-install-recommends wayland-protocols + # The remaining Arch makedepends the older packaged gamescope does not necessarily pull. + # Best-effort: meson falls back or does without, and a name that moves between Ubuntu + # releases should not fail the job. (No libstdc++ static package is needed here — g++ + # ships libstdc++.a, which is why only Fedora tripped the sanity check.) + apt-get install -y --no-install-recommends libglm-dev cmake libxcursor-dev || true if bash packaging/gamescope/build-punktfunk-gamescope.sh \ --destdir "$PWD/gs-stage" --prefix /usr --jobs "$(nproc)"; then install -Dm0755 gs-stage/usr/bin/punktfunk-gamescope gs-cache/punktfunk-gamescope else + # Best-effort on canary, HARD on a stable tag — same reasoning as rpm.yml. A warning + # here is what let v0.26.0 promise an apt-installable gamescope that was never built. + case "$GITHUB_REF" in + refs/tags/v*) + echo "::error::punktfunk-gamescope failed to build on noble — a stable tag must not ship without it (the release notes and docs-site say it is installable)" + exit 1 + ;; + esac echo "::warning::punktfunk-gamescope failed to build on noble — no .deb this run (gamescope sessions stay SDR)" fi @@ -357,6 +378,13 @@ jobs: if [ -x gs-cache/punktfunk-gamescope ] && gs-cache/punktfunk-gamescope --version >/dev/null 2>&1; then bash packaging/debian/build-gamescope-deb.sh --binary gs-cache/punktfunk-gamescope else + # Authoritative, and covers the cache path the build step skips — same as rpm.yml. + case "$GITHUB_REF" in + refs/tags/v*) + echo "::error::no usable punktfunk-gamescope — a stable tag must not ship without its .deb" + exit 1 + ;; + esac echo "::warning::no usable punktfunk-gamescope — skipping its .deb" fi diff --git a/.gitea/workflows/rpm.yml b/.gitea/workflows/rpm.yml index 675395c6..507bcab0 100644 --- a/.gitea/workflows/rpm.yml +++ b/.gitea/workflows/rpm.yml @@ -206,10 +206,33 @@ jobs: dnf -y install dnf-plugins-core meson ninja-build glslc || true dnf builddep -y gamescope || true dnf -y install xorg-x11-server-Xwayland-devel || true + # NOT best-effort: build-punktfunk-gamescope.sh appends `-static-libstdc++` to LDFLAGS + # (so the binary still starts on SteamOS's older libstdc++ — see its comment), and + # without the static library meson's very FIRST sanity check dies with + # "cannot find -lstdc++ / have you installed the static version", so nothing builds at + # all. That is what happened on the v0.26.0 tag: both Fedora bases warned and skipped, + # the job stayed green, and the release shipped with no gamescope RPM while the notes + # said it had one. A rename here must be LOUD, hence no `|| true`. + dnf -y install libstdc++-static + # The rest of the Arch package's makedepends that Fedora's older packaged gamescope does + # not necessarily pull. Best-effort: unlike the static runtime, meson finds fallbacks or + # does without, and a name that moves between Fedora releases should not fail the job. + dnf -y install wayland-protocols-devel glm-devel cmake libXcursor-devel || true if bash packaging/gamescope/build-punktfunk-gamescope.sh \ --destdir "$PWD/gs-stage" --prefix /usr --jobs "$(nproc)"; then install -Dm0755 gs-stage/usr/bin/punktfunk-gamescope gs-cache/punktfunk-gamescope else + # Best-effort on canary, HARD on a stable tag. A `::warning::` here is what let + # v0.26.0 publish release notes promising a Fedora gamescope package that did not + # exist: the step "succeeded", the job was green, and the only evidence was a warning + # nobody reads. A release must not be able to make a claim its own CI silently + # dropped, so on `refs/tags/v*` this is an error. + case "$GITHUB_REF" in + refs/tags/v*) + echo "::error::punktfunk-gamescope failed to build for f${{ matrix.fedver }} — a stable tag must not ship without it (the release notes and docs-site say it is installable)" + exit 1 + ;; + esac echo "::warning::punktfunk-gamescope failed to build for f${{ matrix.fedver }} — the sysext ships without it (gamescope sessions stay SDR)" fi @@ -227,6 +250,15 @@ jobs: --binary gs-cache/punktfunk-gamescope \ --release "$PF_RELEASE" else + # The authoritative "does this package exist" decision, and the one that also covers + # the cache path — the build step above is skipped entirely on a cache hit, so a stale + # or empty cache would otherwise reach here and skip in silence on a release. + case "$GITHUB_REF" in + refs/tags/v*) + echo "::error::no usable punktfunk-gamescope for f${{ matrix.fedver }} — a stable tag must not ship without its RPM" + exit 1 + ;; + esac echo "::warning::no usable punktfunk-gamescope for f${{ matrix.fedver }} — skipping its RPM" fi