name: cpplint_modified_files on: [push, pull_request] jobs: cpplint_modified_files: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 - run: python -m pip install cpplint - run: git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY - run: git diff origin/master --name-only > git_diff.txt - name: cpplint_modified_files shell: python run: | import os import subprocess import sys print("Python {}.{}.{}".format(*sys.version_info)) # legacy Python :-( with open("git_diff.txt") as in_file: modified_files = sorted(in_file.read().splitlines()) print("{} files were modified.".format(len(modified_files))) cpp_exts = tuple(".c .c++ .cc .cpp .cu .cuh .cxx .h .h++ .hh .hpp .hxx".split()) cpp_files = [file for file in modified_files if file.lower().endswith(cpp_exts)] print("{} C++ files were modified.".format(len(cpp_files))) if not cpp_files: sys.exit(0) print("cpplint:") print(subprocess.check_output(["cpplint"] + cpp_files).decode("utf-8")) upper_files = [file for file in cpp_files if os.path.basename(file) != os.path.basename(file).lower()] if upper_files: print("{} files contain uppercase characters:".format(len(upper_files))) print("\n".join(upper_files) + "\n") space_files = [file for file in cpp_files if " " in os.path.basename(file) or "-" in file] if space_files: print("{} files contain space or dash characters:".format(len(space_files))) print("\n".join(space_files) + "\n") nodir_files = [file for file in cpp_files if os.sep not in file] if nodir_files: print("{} files are not in a directory:".format(len(nodir_files))) print("\n".join(nodir_files) + "\n") bad_files = len(upper_files + space_files + nodir_files) if bad_files: sys.exit(bad_files)