-
Notifications
You must be signed in to change notification settings - Fork 1
Add GitHub Action to check trailing whitespace on PRs #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
4ed2f8c
6766ff1
3090f44
6f4e1f0
5d5bda0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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$|\.json$|\.yml$|\.yaml$|\.md$|\.sh$|\.ps1$|\.cmd$|\.txt$|\.xml$|\.config$|\.props$|\.targets$|\.js$|\.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
|
||||||||||||||||||||||||||||||
| 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
AI
Nov 14, 2025
There was a problem hiding this comment.
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"
fiThis avoids running grep multiple times on the same file.
| 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" |
Uh oh!
There was an error while loading. Please reload this page.