From d73d6be0b8b2381f19ce1ae66b0ae531fd77edca Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 19 Oct 2023 22:59:42 +0900 Subject: [PATCH] =?UTF-8?q?=E6=89=80=E5=B1=9E=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=81=AE=E6=8C=87=E5=AE=9A=E3=83=9F=E3=82=B9=E3=82=92=E6=A4=9C?= =?UTF-8?q?=E5=87=BA=E3=81=99=E3=82=8BCI=E3=82=BF=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20#1203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/meta_header_check.yml | 19 +++++++ .github/workflows/script/meta_header_check.py | 54 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 .github/workflows/meta_header_check.yml create mode 100644 .github/workflows/script/meta_header_check.py diff --git a/.github/workflows/meta_header_check.yml b/.github/workflows/meta_header_check.yml new file mode 100644 index 0000000000..dbbd8b1fe5 --- /dev/null +++ b/.github/workflows/meta_header_check.yml @@ -0,0 +1,19 @@ +name: meta header check + +on: [push, pull_request, workflow_dispatch] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + - uses: actions/checkout@v2 + - name: check + run: python3 .github/workflows/script/meta_header_check.py diff --git a/.github/workflows/script/meta_header_check.py b/.github/workflows/script/meta_header_check.py new file mode 100644 index 0000000000..cb9f746393 --- /dev/null +++ b/.github/workflows/script/meta_header_check.py @@ -0,0 +1,54 @@ +import glob +import os +import sys +import re + +def find_header_or_module(line: str) -> (re.Match, str): + m = re.fullmatch(r'[\*-] (.*?)\[meta header\]', line, re.MULTILINE) + if m: + return m, "header" + + m = re.fullmatch(r'[\*-] (.*?)\[meta module\]', line, re.MULTILINE) + if m: + return m, "module" + return None, "" + +def check_header(text: str, filename: str) -> bool: + found_error: bool = False + + for line in text.split("\n"): + m, header = find_header_or_module(line) + if m: + dirs = filename.split("/") + meta_header = m.group(1) + if len(dirs) < 2: + found_error = True + print("[{}] invalid directory: {}".format(filename, meta_header)) + elif len(dirs) == 2 and dirs[0] in ("reference", "module"): + own_filename = os.path.splitext(os.path.basename(filename))[0] + if meta_header != own_filename: + found_error = True + print("[{0}] invalid meta {1} \"{2}\". You should specify \"{3}\" as meta {1}".format( + filename, header, meta_header, own_filename)) + elif len(dirs) > 2 and dirs[0] in ("reference", "module"): + own_header = dirs[1] + if meta_header != own_header: + found_error = True + print("[{0}] invalid meta {1} \"{2}\". You should specify \"{3}\" as meta {1}".format( + filename, header, meta_header, own_header)) + + break + + return not found_error + +if __name__ == '__main__': + found_error = False + for p in sorted(list(glob.glob("**/*.md", recursive=True))): + with open(p) as f: + text = f.read() + + if not check_header(text, p): + found_error = True + + if found_error: + sys.exit(1)