From ff24bce15de8c2b96d1d82b979dbeb5d92bd40b0 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Wed, 21 Sep 2022 21:49:41 +0200 Subject: [PATCH] CI: deviceinfo: add more strict linting (MR 3454) pmbootstrap and postmarketos-mkinitfs don't support multiple lines in these files, and the complexity is not worth implementing there. Let's keep the format dead-simple and enforce it across all files. While at it, enforce that comments stat with '# ' and make sure each line has quotations (we had some without). Related: discussion in postmarketos-mkinitfs MR 21 --- .ci/testcases/test_deviceinfo.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.ci/testcases/test_deviceinfo.py b/.ci/testcases/test_deviceinfo.py index 517836fa3..473e4dc6a 100644 --- a/.ci/testcases/test_deviceinfo.py +++ b/.ci/testcases/test_deviceinfo.py @@ -3,9 +3,10 @@ # SPDX-License-Identifier: GPL-3.0-or-later import glob -import pytest -import sys import os +import pytest +import re +import sys import add_pmbootstrap_to_import_path import pmb.parse @@ -31,6 +32,8 @@ def test_deviceinfo(args): # Iterate over all devices last_exception = None count = 0 + pattern = re.compile("^deviceinfo_[a-zA-Z0-9_]*=\".*\"$") + for folder in glob.glob(args.aports + "/device/*/device-*"): device = folder[len(args.aports):].split("-", 1)[1] @@ -39,11 +42,26 @@ def test_deviceinfo(args): f.close() try: - # variable can not be empty for line in lines: + # Require space after # for comments + if line.startswith("#") and not line.startswith("# "): + raise RuntimeError("Comment style: please change '#' to" + f" '# ': {line}") + + # Skip empty lines and comments + if not line or line.startswith("# "): + continue + + # Variable can not be empty if '=""' in line: raise RuntimeError("Please remove the empty variable: " + line) + # Check line against regex (can't use multiple lines etc.) + if not pattern.match(line) or line.endswith("\\\""): + raise RuntimeError("Line looks invalid, maybe missing" + " quotes/multi-line string/comment next" + f" to line instead of above? {line}") + # Successful deviceinfo parsing / obsolete options info = pmb.parse.deviceinfo(args, device) deviceinfo_obsolete(info)