mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-04 03:03:14 -05:00 
			
		
		
		
	Setup GitHub Actions for auto remove trailing whitespaces (#4269)
* Setup GitHub Actions for auto remove trailing whitespaces This PR setup GitHub Actions for auto remove trailing whitespaces, if any non-go files are touched (.git directory are ignored) Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Remove TestTrailingWhitespace in presubmit tests Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * paths and paths-ignore are mutually exlcusive so only keep paths-ignore Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Remove redundent bufio import Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
		
							
								
								
									
										36
									
								
								.github/workflows/whitespace.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/whitespace.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					name: Remove Trailing Whitespaces
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    branches:
 | 
				
			||||||
 | 
					      - 'master'
 | 
				
			||||||
 | 
					    paths-ignore:
 | 
				
			||||||
 | 
					      - '**.go'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  fix:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Remove Trailing Whitespaces
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          find . -not -path '*/\.git/*' -type f -not -name '*.go' -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} \+
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Set up Git
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          git config user.name "coredns-auto-trailing-whitespaces[bot]"
 | 
				
			||||||
 | 
					          git config user.email "coredns-auto-trailing-whitespaces[bot]@users.noreply.github.com"
 | 
				
			||||||
 | 
					          git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Commit and push changes
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          git add .
 | 
				
			||||||
 | 
					          if output=$(git status --porcelain) && [ ! -z "$output" ]; then
 | 
				
			||||||
 | 
					            git commit -m 'auto remove trailing whitespaces'
 | 
				
			||||||
 | 
					            git push
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
@@ -3,7 +3,6 @@ package test
 | 
				
			|||||||
// These tests check for meta level items, like trailing whitespace, correct file naming etc.
 | 
					// These tests check for meta level items, like trailing whitespace, correct file naming etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bufio"
 | 
					 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"go/ast"
 | 
						"go/ast"
 | 
				
			||||||
	"go/parser"
 | 
						"go/parser"
 | 
				
			||||||
@@ -16,67 +15,6 @@ import (
 | 
				
			|||||||
	"unicode"
 | 
						"unicode"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestTrailingWhitespace(t *testing.T) {
 | 
					 | 
				
			||||||
	walker := hasTrailingWhitespaceWalker{}
 | 
					 | 
				
			||||||
	err := filepath.Walk("..", walker.walk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(walker.Errors) > 0 {
 | 
					 | 
				
			||||||
		for _, err = range walker.Errors {
 | 
					 | 
				
			||||||
			t.Error(err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type hasTrailingWhitespaceWalker struct {
 | 
					 | 
				
			||||||
	Errors []error
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (w *hasTrailingWhitespaceWalker) walk(path string, info os.FileInfo, _ error) error {
 | 
					 | 
				
			||||||
	// Only handle regular files, skip files that are executable and skip file in the
 | 
					 | 
				
			||||||
	// root that start with a .
 | 
					 | 
				
			||||||
	if !info.Mode().IsRegular() {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if info.Mode().Perm()&0111 != 0 {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if strings.HasPrefix(path, "../.") {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if strings.Contains(path, "/vendor") {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	file, err := os.Open(path)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	defer file.Close()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	scanner := bufio.NewScanner(file)
 | 
					 | 
				
			||||||
	for i := 1; scanner.Scan(); i++ {
 | 
					 | 
				
			||||||
		text := scanner.Text()
 | 
					 | 
				
			||||||
		trimmed := strings.TrimRightFunc(text, unicode.IsSpace)
 | 
					 | 
				
			||||||
		if len(text) != len(trimmed) {
 | 
					 | 
				
			||||||
			absPath, _ := filepath.Abs(path)
 | 
					 | 
				
			||||||
			w.Errors = append(w.Errors, fmt.Errorf("file %q has trailing whitespace at line %d, text: %q", absPath, i, text))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = scanner.Err()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		absPath, _ := filepath.Abs(path)
 | 
					 | 
				
			||||||
		err = fmt.Errorf("file %q: %v", absPath, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFileNameHyphen(t *testing.T) {
 | 
					func TestFileNameHyphen(t *testing.T) {
 | 
				
			||||||
	walker := hasHyphenWalker{}
 | 
						walker := hasHyphenWalker{}
 | 
				
			||||||
	err := filepath.Walk("..", walker.walk)
 | 
						err := filepath.Walk("..", walker.walk)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user