aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2020-01-28 19:58:04 +0000
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-06-11 15:28:07 +0200
commit636bf915861b94a3353a5b9a770e235f0a3784a2 (patch)
tree1ce0894096ab400b7451fb624825736b986c9bef
parent25f2d8826e7c99d3e022e5774ff4530c2af5b0ba (diff)
downloadmeson-636bf915861b94a3353a5b9a770e235f0a3784a2.zip
meson-636bf915861b94a3353a5b9a770e235f0a3784a2.tar.gz
meson-636bf915861b94a3353a5b9a770e235f0a3784a2.tar.bz2
CI: Split out file format test as a separate GitHub workflow
Split out checking of file format as a separate GitHub workflow, rather than running it as part of the project tests for every platform and toolchain combination in CI, so that this test is not effected by the changed paths constraints which are applied to the project tests.
-rw-r--r--.github/workflows/file_format.yml13
-rw-r--r--run_format_tests.py82
-rwxr-xr-xrun_project_tests.py48
3 files changed, 95 insertions, 48 deletions
diff --git a/.github/workflows/file_format.yml b/.github/workflows/file_format.yml
new file mode 100644
index 0000000..a41c612
--- /dev/null
+++ b/.github/workflows/file_format.yml
@@ -0,0 +1,13 @@
+name: File format check
+
+on: [push, pull_request]
+
+jobs:
+ format:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: '3.x'
+ - run: python3 ./run_format_tests.py
diff --git a/run_format_tests.py b/run_format_tests.py
new file mode 100644
index 0000000..1f41f3d
--- /dev/null
+++ b/run_format_tests.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+
+# Copyright 2012-2019 The Meson development team
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# some simple checks on the file format of:
+# - python code
+# - code samples in tests
+# - markdown documentation
+#
+# checks are:
+# - no use of tabs
+# - no use of DOS line endings
+
+import os
+import re
+from pathlib import Path
+
+def check_file(file: Path) -> None:
+ lines = file.read_bytes().split(b'\n')
+ tabdetector = re.compile(br' *\t')
+ for i, line in enumerate(lines):
+ if re.match(tabdetector, line):
+ raise SystemExit("File {} contains a tab indent on line {:d}. Only spaces are permitted.".format(file, i + 1))
+ if line.endswith(b'\r'):
+ raise SystemExit("File {} contains DOS line ending on line {:d}. Only unix-style line endings are permitted.".format(file, i + 1))
+
+def check_format() -> None:
+ check_suffixes = {'.c',
+ '.cpp',
+ '.cxx',
+ '.cc',
+ '.rs',
+ '.f90',
+ '.vala',
+ '.d',
+ '.s',
+ '.m',
+ '.mm',
+ '.asm',
+ '.java',
+ '.txt',
+ '.py',
+ '.swift',
+ '.build',
+ '.md',
+ }
+ skip_dirs = {
+ '.dub', # external deps are here
+ '.pytest_cache',
+ 'meson-logs', 'meson-private',
+ 'work area',
+ '.eggs', '_cache', # e.g. .mypy_cache
+ 'venv', # virtualenvs have DOS line endings
+ }
+ for (root, _, filenames) in os.walk('.'):
+ if any([x in root for x in skip_dirs]):
+ continue
+ for fname in filenames:
+ file = Path(fname)
+ if file.suffix.lower() in check_suffixes:
+ if file.name in ('sitemap.txt', 'meson-test-run.txt'):
+ continue
+ check_file(root / file)
+
+
+if __name__ == '__main__':
+ script_dir = os.path.split(__file__)[0]
+ if script_dir != '':
+ os.chdir(script_dir)
+ check_format()
diff --git a/run_project_tests.py b/run_project_tests.py
index af04f0a..d6dc5e1 100755
--- a/run_project_tests.py
+++ b/run_project_tests.py
@@ -1330,53 +1330,6 @@ def _run_tests(all_tests: T.List[T.Tuple[str, T.List[TestDef], bool]],
ET.ElementTree(element=junit_root).write(xmlname, xml_declaration=True, encoding='UTF-8')
return passing_tests, failing_tests, skipped_tests
-def check_file(file: Path) -> None:
- lines = file.read_bytes().split(b'\n')
- tabdetector = re.compile(br' *\t')
- for i, line in enumerate(lines):
- if re.match(tabdetector, line):
- raise SystemExit("File {} contains a tab indent on line {:d}. Only spaces are permitted.".format(file, i + 1))
- if line.endswith(b'\r'):
- raise SystemExit("File {} contains DOS line ending on line {:d}. Only unix-style line endings are permitted.".format(file, i + 1))
-
-def check_format() -> None:
- check_suffixes = {'.c',
- '.cpp',
- '.cxx',
- '.cc',
- '.rs',
- '.f90',
- '.vala',
- '.d',
- '.s',
- '.m',
- '.mm',
- '.asm',
- '.java',
- '.txt',
- '.py',
- '.swift',
- '.build',
- '.md',
- }
- skip_dirs = {
- '.dub', # external deps are here
- '.pytest_cache',
- 'meson-logs', 'meson-private',
- 'work area',
- '.eggs', '_cache', # e.g. .mypy_cache
- 'venv', # virtualenvs have DOS line endings
- }
- for (root, _, filenames) in os.walk('.'):
- if any([x in root for x in skip_dirs]):
- continue
- for fname in filenames:
- file = Path(fname)
- if file.suffix.lower() in check_suffixes:
- if file.name in ('sitemap.txt', 'meson-test-run.txt'):
- continue
- check_file(root / file)
-
def check_meson_commands_work(use_tmpdir: bool, extra_args: T.List[str]) -> None:
global backend, compile_commands, test_commands, install_commands
testdir = PurePath('test cases', 'common', '1 trivial').as_posix()
@@ -1567,7 +1520,6 @@ if __name__ == '__main__':
script_dir = os.path.split(__file__)[0]
if script_dir != '':
os.chdir(script_dir)
- check_format()
check_meson_commands_work(options.use_tmpdir, options.extra_args)
only = collections.defaultdict(list)
for i in options.only: