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:
Yong Tang 2020-11-07 10:53:20 -08:00 committed by GitHub
parent 67f2048bb0
commit 263423edad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 62 deletions

36
.github/workflows/whitespace.yml vendored Normal file
View 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

View file

@ -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)