파일 끝에 줄 바꿈이 없으면 화를 내는 GithubActions에서도 사용할 수있는 bash 스크립트

6099 단어 GitHubActionsBash
행의가 좋지 않은 에디터가 있는 것을 알았다.
내용이 있는데, 마지막 행이 개행으로 끝나주지 않는다.
조사하면 POSIX의 파일 사양을 위반하는 것 같지만 잘 모르겠습니다.
움직임은 하지만 매우 기분이 나쁘다.
그래서 리포지토리에 이러한 파일이 있으면 Github Actions에서 화내게 했다.

bash 스크립트


다음 bash 스크립트를 리포지토리에 넣습니다.
동작으로서는, find 로 대상 파일 일람을 만들어, 참고문헌의 괄호 좋은 방법으로 각 파일의 말미를 체크해 간다.
위반 파일이 있으면 파일 목록을 출력하고 오류를 종료합니다.
파일수는 대단한 일 없는 전제로 보기 쉬운 쓰기 방법으로 하고 있다. 대상 파일이 많은 경우에는 에러 파일을 모으지 않도록 루프하도록 재기록할 필요가 있다고 생각한다.

코드



./scripts/check_endoffile_with_newline.sh
#!/bin/bash

# 対象ファイルのリスト
#   一部パスを除外している
#   対象は拡張子で指定している
files=$(find . \
             -not -path "./node_modules/*" -not -path "./public/*" \
             -not -path "./vendor/*" \
             -type f -regex '.*\.\(rb\|erb\|css\|scss\|js\|yml\)')

error_files=""
for file in ${files}; do
    # 改行で終わってないファイルを探し記録する
    # 参考: https://qiita.com/BlackCat_617/items/c0d7f7378bc55b3e07d0
    if [ `tail --lines=1 ${file} | wc --lines` == 0 ]; then
        error_files="${error_files} ${file}"
    fi
done

if [ "${error_files}" == "" ]; then
    echo "Good."
    exit 0
else
    echo "[ERROR] There are some files without newline in end of file."
    for file in ${error_files}; do
        echo "  ${file}"
    done
    exit 1
fi

추기: git의 ls-files를 사용하면 Git 관리하의 파일을 대상으로 할 수 있다
files=$(git ls-files | \
            grep --invert-match '\.keep$' | \
            grep --invert-match '\.png$' | \
            grep --invert-match '\.ico$' | \
            grep --invert-match '\.yml\.enc$')

실행 예

$ ./scripts/check_endoffile_with_newline.sh
[ERROR] There are some files without newline in end of file.
  ./config/locales/models/ja.yml
  ./app/views/users/new.html.erb
  ./app/views/users/show.html.erb
  ./app/views/layouts/_footer.html.erb
  ./app/views/layouts/_header.html.erb
  ./app/views/shared/_error_messages.html.erb
  ./app/assets/stylesheets/header.scss
  ./app/assets/stylesheets/footer.scss

Github Actions 설정


아래와 같이 좋아하는 이름을 붙여 스크립트를 실행한다.

코드

# ~省略~
    - name: End of File with Newline
      run: ./scripts/check_endoffile_with_newline.sh
# ~省略~

실행 예



소감


  • 「사람이 코드의 지적을 한다」는 지적하는 쪽도 되는 쪽도 소모해 간다
  • 기회적인 지적이라면 지적 된 사람은 소모하기 어렵습니다
  • 코드 리뷰는 가능한 한 자동화하자

  • 참고


  • Qiita 기사 : ShellScript : 텍스트 파일의 끝이 줄 바꿈인지 확인합니다.
  • 좋은 웹페이지 즐겨찾기