Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 30 additions & 3 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2345,9 +2345,36 @@ jobs:
echo "Checking out $repo ($name) at $ref..."
git clone --depth 1 --branch "$ref" "https://github.com/$repo.git" "server/apps/$name"
if [ -f "server/apps/$name/composer.json" ]; then
cd "server/apps/$name"
composer install --no-progress --prefer-dist --optimize-autoloader --no-dev 2>/dev/null || true
cd -
echo "Installing composer dependencies for $name..."
# ⚠️ This install used to end in `2>/dev/null || true` β€” stderr
# discarded AND the exit status thrown away. It was the ONLY
# `composer install` of the 20+ in this workflow to do either,
# and the `git clone` immediately above it has always failed
# loudly, so the asymmetry was not a deliberate policy.
#
# A sibling app whose dependencies did not install is not a
# neutral condition. The suite then runs against a HALF-INSTALLED
# app, and its missing classes surface as failures of the
# CONSUMING repository β€” a red cell pointing at the wrong repo.
#
# Measured on decidesk#517 (2026-08-17), a diff of exactly one
# `.ts` file and zero PHP: ALL SIX PHPUnit cells hit a transient
# HTTP 504 while installing openregister's dependencies, and all
# six reported this step as SUCCESSFUL. Three then went red with
# 87 errors β€” the first being
# Class "Twig\Extension\AbstractExtension" not found
# in server/apps/openregister/lib/Twig/MappingExtension.php
# β€” while three went green. The only difference was WHICH package
# the 504 happened to remove; the green cells were exactly as
# half-installed as the red ones.
#
# So: keep stderr, and fail the step naming the app and its ref.
# Retrying is an operator's decision to take knowingly, not a
# silent default.
if ! ( cd "server/apps/$name" && composer install --no-progress --prefer-dist --optimize-autoloader --no-dev ); then
echo "::error::Dependency install FAILED for sibling app '$name' ($repo@$ref). Refusing to continue: the suite would otherwise run against a half-installed app and report its missing classes as this repository's failures."
exit 1
fi
fi
done

Expand Down
Loading