Add CLRF workflow
This commit is contained in:
parent
eab78769f4
commit
78c1e11bef
|
|
@ -0,0 +1,15 @@
|
|||
name: CRLF Check
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [ opened, reopened, synchronize, ready_for_review ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: CRLF Check
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3.6.0
|
||||
- name: Check for CRLF
|
||||
run: Tools/check_crlf.py
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
from typing import Iterable
|
||||
|
||||
def main() -> int:
|
||||
any_failed = False
|
||||
for file_name in get_text_files():
|
||||
if is_file_crlf(file_name):
|
||||
print(f"::error file={file_name},title=File contains CRLF line endings::The file '{file_name}' was committed with CRLF new lines. Please make sure your git client is configured correctly and you are not uploading files directly to GitHub via the web interface.")
|
||||
any_failed = True
|
||||
|
||||
return 1 if any_failed else 0
|
||||
|
||||
|
||||
def get_text_files() -> Iterable[str]:
|
||||
# https://stackoverflow.com/a/24350112/4678631
|
||||
process = subprocess.run(
|
||||
["git", "grep", "--cached", "-Il", ""],
|
||||
check=True,
|
||||
encoding="utf-8",
|
||||
stdout=subprocess.PIPE)
|
||||
|
||||
for x in process.stdout.splitlines():
|
||||
yield x.strip()
|
||||
|
||||
def is_file_crlf(path: str) -> bool:
|
||||
# https://stackoverflow.com/a/29697732/4678631
|
||||
with open(path, "rb") as f:
|
||||
for line in f:
|
||||
if line.endswith(b"\r\n"):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
exit(main())
|
||||
Loading…
Reference in New Issue