파일 끝에 줄 바꿈이 없으면 화를 내는 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
# ~省略~
실행 예
소감
#!/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
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
아래와 같이 좋아하는 이름을 붙여 스크립트를 실행한다.
코드
# ~省略~
- name: End of File with Newline
run: ./scripts/check_endoffile_with_newline.sh
# ~省略~
실행 예
소감
참고
Reference
이 문제에 관하여(파일 끝에 줄 바꿈이 없으면 화를 내는 GithubActions에서도 사용할 수있는 bash 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keita44_f4/items/564fceb62b7bdd3813a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)