name: CI - 300-line rule description: Fail if any tracked *.php under the given paths exceeds 300 lines (estate hard rule). inputs: paths: required: false default: includes runs: using: composite steps: - name: Check for PHP files over 300 lines shell: bash env: PATHS: ${{ inputs.paths }} run: | set -e OFFENDERS="" for DIR in $PATHS; do if [ ! -e "$DIR" ]; then echo "Warning: path '$DIR' does not exist - skipping."; continue; fi while IFS= read -r FILE; do [ -z "$FILE" ] && continue LINES=$(wc -l < "$FILE") if [ "$LINES" -gt 300 ]; then OFFENDERS="${OFFENDERS}${LINES} lines: ${FILE}\n"; fi done < <(git ls-files -- "$DIR" | grep '\.php$' || true) done if [ -n "$OFFENDERS" ]; then echo "::error::Files exceeding 300-line limit (estate hard rule):" printf "%b" "$OFFENDERS" exit 1 fi echo "All tracked PHP files under '$PATHS' are within the 300-line limit."