From 49d50162cc58b479ec8bdbe55e239ed8dd5def4b Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:49:41 +0100 Subject: [PATCH 1/2] ci(haskell): build every package detect counted, not just root Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012kgrMQRhSmZMBbF9Ui1zBw --- .github/workflows/ci-pipeline.yml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml index 237988754..0d78db868 100644 --- a/.github/workflows/ci-pipeline.yml +++ b/.github/workflows/ci-pipeline.yml @@ -873,12 +873,36 @@ jobs: # anywhere in the estate — an unpinned toolchain install is a worse # trade than a narrower gate. -Wall -Werror is the spec's "fail on # warnings" and is read-only with respect to tracked files. + # + # BUILD WHAT `detect` COUNTED. The probe counts `*.cabal` at ANY depth + # (a git pathspec `*` crosses `/`), so a repo whose only package is + # nested — standards' own sanctify-php satellite — turned this job on + # and then died in a root that holds no package. A guard that counts + # a different set than its consumer builds is the defect; narrowing + # the probe to the root would have hidden nested Haskell instead. + # A root `cabal.project` is the repo's own word and is used as-is; + # otherwise one is written (untracked) listing every package + # directory, from the SAME pathspec the probe uses. + if [ -f cabal.project ]; then + echo "Using the repository's own cabal.project." + source_note="root cabal.project" + else + mapfile -t pkg_dirs < <(git ls-files -- '*.cabal' | xargs -r -n1 dirname | sort -u) + if [ "${#pkg_dirs[@]}" -eq 0 ]; then + echo "::error::Haskell was detected (*.hs or stack.yaml) but no *.cabal package is tracked, so there is nothing cabal can build. Add a .cabal file (hpack users: commit the generated one) or a cabal.project." + exit 1 + fi + { echo "packages:"; printf ' %s/\n' "${pkg_dirs[@]}"; } > cabal.project + echo "No root cabal.project; generated one for ${#pkg_dirs[@]} package dir(s):" + cat cabal.project + source_note="generated cabal.project, ${#pkg_dirs[@]} package dir(s)" + fi cabal update cabal build all --ghc-options='-Wall -Werror' { echo "### Haskell" echo "" - echo "- \`cabal build all --ghc-options='-Wall -Werror'\`: pass" + echo "- \`cabal build all --ghc-options='-Wall -Werror'\` ($source_note): pass" echo "- note: format gate not run — no pinned fourmolu/hlint in the estate" echo "" } >> "$GITHUB_STEP_SUMMARY" From 8d65eb39242cc0297a43c47ccb28833233be9bde Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:52:09 +0100 Subject: [PATCH 2/2] fix(sanctify-php): SPDX LicenseRef form, matching upstream (#1161) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012kgrMQRhSmZMBbF9Ui1zBw --- .../satellites/cccp/satellites/sanctify-php/sanctify-php.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rhodium-standard-repositories/satellites/cccp/satellites/sanctify-php/sanctify-php.cabal b/rhodium-standard-repositories/satellites/cccp/satellites/sanctify-php/sanctify-php.cabal index 9668069af..2bf819345 100644 --- a/rhodium-standard-repositories/satellites/cccp/satellites/sanctify-php/sanctify-php.cabal +++ b/rhodium-standard-repositories/satellites/cccp/satellites/sanctify-php/sanctify-php.cabal @@ -11,7 +11,7 @@ description: * Enforces WordPress-specific constraints * Generates PHPStan annotations * Identifies OPcache optimization opportunities -license: PMPL-1.0-or-later +license: LicenseRef-PMPL-1.0-or-later license-file: LICENSE author: Jonathan D.A. Jewell maintainer: j.d.a.jewell@open.ac.uk