diff --git a/.github/workflows/whitespace.yml b/.github/workflows/whitespace.yml new file mode 100644 index 000000000..18d470887 --- /dev/null +++ b/.github/workflows/whitespace.yml @@ -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 diff --git a/test/presubmit_test.go b/test/presubmit_test.go index f2b4c8bea..5d519d759 100644 --- a/test/presubmit_test.go +++ b/test/presubmit_test.go @@ -3,7 +3,6 @@ package test // These tests check for meta level items, like trailing whitespace, correct file naming etc. import ( - "bufio" "fmt" "go/ast" "go/parser" @@ -16,67 +15,6 @@ import ( "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) { walker := hasHyphenWalker{} err := filepath.Walk("..", walker.walk)