A shared setup action across four repositories, with eleven inputs, of which one repository used a combination nobody had tested.
the inputs, and who used each:
php-version 4 repositories
run-integration 3
coverage 2
cache-key-suffix 1
skip-composer 1
extensions 1
ini-values 1
...
five of eleven inputs exist for one caller each, which
is five conditionals in a shared file to avoid five
lines of duplication.
A shared abstraction with per-caller escape hatches is a worse arrangement than duplication, because the duplication is at least readable. The version that worked was three inputs in the shared action and a separate, simpler workflow for the repository that was genuinely different — which nobody proposes, because it feels like giving up.