Skip to content
Closed
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
82 changes: 82 additions & 0 deletions .github/workflows/trailing-whitespace-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Trailing Whitespace Check

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
check-trailing-whitespace:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check for trailing whitespace
run: |
echo "Checking for trailing whitespace in changed files..."

# Get the base branch
BASE_SHA="${{ github.event.pull_request.base.sha }}"
HEAD_SHA="${{ github.event.pull_request.head.sha }}"

# Get list of changed files (excluding deleted files)
CHANGED_FILES=$(git diff --name-only --diff-filter=d "$BASE_SHA" "$HEAD_SHA")

if [ -z "$CHANGED_FILES" ]; then
echo "No files to check."
exit 0
fi

# File patterns to check (text files)
PATTERNS="\.cs$|\.csproj$|\.sln$|\.ts$|\.html$|\.css$|\.scss$"

# Directories and file patterns to exclude
EXCLUDE_PATTERNS="(^|\/)(\.|node_modules|bin|obj|artifacts|packages|\.vs|\.nuke\/temp)($|\/)"

ERRORS_FOUND=0
TEMP_FILE=$(mktemp)

while IFS= read -r file; do
# Skip if file doesn't exist (shouldn't happen with --diff-filter=d, but just in case)
if [ ! -f "$file" ]; then
continue
fi

# Check if file matches patterns to check
if ! echo "$file" | grep -qE "$PATTERNS"; then
continue
fi

# Check if file should be excluded
if echo "$file" | grep -qE "$EXCLUDE_PATTERNS"; then
continue
fi

# Check for trailing whitespace
if grep -n '[[:space:]]$' "$file" > /dev/null 2>&1; then
echo "❌ Trailing whitespace found in: $file"
grep -n '[[:space:]]$' "$file" | head -10
if [ $(grep -c '[[:space:]]$' "$file") -gt 10 ]; then
echo " ... and $(($(grep -c '[[:space:]]$' "$file") - 10)) more lines"
Comment on lines +64 to +65
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The head -10 command limits the display to 10 lines but doesn't affect the count in line 64. This means if there are exactly 10 lines with trailing whitespace, line 64 will calculate (10 - 10) = 0 and display "... and 0 more lines", which is confusing.

Consider changing the condition to check if the count is greater than 10:

if [ $(grep -c '[[:space:]]$' "$file") -gt 10 ]; then
  EXTRA=$(($(grep -c '[[:space:]]$' "$file") - 10))
  echo "   ... and $EXTRA more lines"
fi

Or simplify by checking if EXTRA is greater than 0.

Suggested change
if [ $(grep -c '[[:space:]]$' "$file") -gt 10 ]; then
echo " ... and $(($(grep -c '[[:space:]]$' "$file") - 10)) more lines"
EXTRA=$(($(grep -c '[[:space:]]$' "$file") - 10))
if [ "$EXTRA" -gt 0 ]; then
echo " ... and $EXTRA more lines"

Copilot uses AI. Check for mistakes.
Comment on lines +62 to +65
Copy link

Copilot AI Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The grep command on line 64 is executed multiple times within the same if block, which is inefficient. Consider storing the count in a variable first:

TRAILING_COUNT=$(grep -c '[[:space:]]$' "$file")
echo "❌ Trailing whitespace found in: $file"
grep -n '[[:space:]]$' "$file" | head -10
if [ "$TRAILING_COUNT" -gt 10 ]; then
  echo "   ... and $(($TRAILING_COUNT - 10)) more lines"
fi

This avoids running grep multiple times on the same file.

Suggested change
echo "❌ Trailing whitespace found in: $file"
grep -n '[[:space:]]$' "$file" | head -10
if [ $(grep -c '[[:space:]]$' "$file") -gt 10 ]; then
echo " ... and $(($(grep -c '[[:space:]]$' "$file") - 10)) more lines"
TRAILING_COUNT=$(grep -c '[[:space:]]$' "$file")
echo "❌ Trailing whitespace found in: $file"
grep -n '[[:space:]]$' "$file" | head -10
if [ "$TRAILING_COUNT" -gt 10 ]; then
echo " ... and $(($TRAILING_COUNT - 10)) more lines"

Copilot uses AI. Check for mistakes.
fi
echo "1" >> "$TEMP_FILE"
fi
done <<< "$CHANGED_FILES"

ERRORS_FOUND=$(wc -l < "$TEMP_FILE" 2>/dev/null || echo "0")
rm -f "$TEMP_FILE"

if [ "$ERRORS_FOUND" -gt 0 ]; then
echo ""
echo "❌ Found trailing whitespace in $ERRORS_FOUND file(s)."
echo "Please remove trailing whitespace from the files listed above."
exit 1
else
echo "✅ No trailing whitespace found in changed files."
exit 0
fi
Loading