From f59672c04c0d7297494997b2779cecfb3c0caa7f Mon Sep 17 00:00:00 2001 From: Rohit Kumar Date: Sun, 26 Jul 2026 12:24:48 +0530 Subject: [PATCH] ci: make source-@master legs non-blocking, label failure origin The source-2.5.x / source-3.x legs build CUPS and libcupsfilters from OpenPrinting @master, an unpinned moving target; a transient breakage there reddens the leg with no libppd fault. Mark those legs continue-on-error so they no longer block PRs, while the distro system-2x leg stays required. ci-setup.sh now annotates each failure as UPSTREAM-DEP-FAILED or LIBPPD-FAILED so a real libppd regression on the non-blocking legs is still visible. --- .github/workflows/build.yml | 8 ++++++++ ci/ci-setup.sh | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a27cc137..b888029d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,14 @@ jobs: build-matrix: name: Build & Test (${{ matrix.arch }}, ${{ matrix.cups }}) runs-on: ${{ matrix.runs-on }} + # The source-* legs build their CUPS / libcupsfilters from OpenPrinting + # @master, an unpinned moving target: a transient breakage there (e.g. + # libcups master failing its own `make install`) reddens the leg through no + # fault of libppd. Keep the distro system-2x leg required (blocking), but + # let the source-@master legs report without blocking the PR. ci-setup.sh + # annotates each failure as UPSTREAM-DEP-FAILED vs LIBPPD-FAILED so a real + # libppd regression on these legs is still visible even while non-blocking. + continue-on-error: ${{ matrix.cups != 'system-2x' }} # Building CUPS / libcupsfilters from source under QEMU is slow; allow plenty. timeout-minutes: 360 diff --git a/ci/ci-setup.sh b/ci/ci-setup.sh index 296077b6..c09ab5d6 100755 --- a/ci/ci-setup.sh +++ b/ci/ci-setup.sh @@ -34,6 +34,28 @@ # runners; it detects which automatically. set -eu +# Classify a failure so CI (and humans) can tell an upstream-dependency +# breakage apart from a real libppd failure. Each invocation of this script +# handles exactly one subcommand, so $1 identifies which side failed: +# providing the CUPS / libcupsfilters stack (built from @master on the +# source-* legs, an unpinned moving target) vs building/testing libppd itself. +# The source-* matrix legs are non-blocking precisely because of the former +# class of transient upstream breakage; this label makes the distinction +# explicit on both native and emulated legs (they run the same script). +_subcmd="${1:-}" +_classify_failure() { + rc=$? + [ "$rc" -eq 0 ] && exit 0 + case "$_subcmd" in + cups|pdfio|libcupsfilters) + echo "::error::UPSTREAM-DEP-FAILED: '$_subcmd' failed while building the CUPS/libcupsfilters stack (from @master on the source-* legs). This is an upstream-dependency breakage, not a libppd bug." ;; + build-libppd) + echo "::error::LIBPPD-FAILED: libppd build/test failed." ;; + esac + exit "$rc" +} +trap _classify_failure EXIT + PDFIO_VER=1.6.4 LIBCUPSFILTERS_URL="${LIBCUPSFILTERS_URL:-https://github.com/OpenPrinting/libcupsfilters.git}" LIBCUPSFILTERS_REF="${LIBCUPSFILTERS_REF:-master}"