Browse Source

Partially reinstate CI formatting process (#15155)

* Partially reinstate CI formatting process

* Fix exit code on clean run

* Fix exit code on clean run
pull/15172/head
Joel Challis 2 years ago
committed by GitHub
parent
commit
ec0bb791f8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 24 deletions
  1. +14
    -7
      .github/workflows/format.yaml
  2. +47
    -17
      lib/python/qmk/cli/format/text.py

+ 14
- 7
.github/workflows/format.yaml View File

@ -19,7 +19,9 @@ jobs:
container: qmkfm/qmk_cli container: qmkfm/qmk_cli
steps: steps:
- uses: rlespinasse/github-slug-action@v3.x
- name: Install dependencies
run: |
apt-get update && apt-get install -y dos2unix
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
@ -31,12 +33,17 @@ jobs:
output: ' ' output: ' '
fileOutput: ' ' fileOutput: ' '
- name: Run qmk format-c and qmk format-python
- name: Run qmk formatters
shell: 'bash {0}' shell: 'bash {0}'
run: | run: |
qmk format-c --core-only -n $(< ~/files.txt)
format_c_exit=$?
qmk format-python -n
format_python_exit=$?
qmk format-c --core-only $(< ~/files.txt)
qmk format-python
qmk format-text $(< ~/files.txt)
git diff
exit $((format_c_exit + format_python_exit))
- name: Fail when formatting required
run: |
for file in $(git diff --name-only); do
echo "::error file=${file}::::File Requires Formatting"
done
test -z "$(git diff --name-only)"

+ 47
- 17
lib/python/qmk/cli/format/text.py View File

@ -1,27 +1,57 @@
"""Ensure text files have the proper line endings. """Ensure text files have the proper line endings.
""" """
from subprocess import CalledProcessError
from itertools import islice
from subprocess import DEVNULL
from milc import cli from milc import cli
from qmk.path import normpath
def _get_chunks(it, size):
"""Break down a collection into smaller parts
"""
it = iter(it)
return iter(lambda: tuple(islice(it, size)), ())
def dos2unix_run(files):
"""Spawn multiple dos2unix subprocess avoiding too long commands on formatting everything
"""
for chunk in _get_chunks(files, 10):
dos2unix = cli.run(['dos2unix', *chunk])
if dos2unix.returncode:
return False
@cli.argument('-b', '--base-branch', default='origin/master', help='Branch to compare to diffs to.')
@cli.argument('-a', '--all-files', arg_only=True, action='store_true', help='Format all files.')
@cli.argument('files', nargs='*', arg_only=True, type=normpath, help='Filename(s) to format.')
@cli.subcommand("Ensure text files have the proper line endings.", hidden=True) @cli.subcommand("Ensure text files have the proper line endings.", hidden=True)
def format_text(cli): def format_text(cli):
"""Ensure text files have the proper line endings. """Ensure text files have the proper line endings.
""" """
try:
file_list_cmd = cli.run(['git', 'ls-files', '-z'], check=True)
except CalledProcessError as e:
cli.log.error('Could not get file list: %s', e)
exit(1)
except Exception as e:
cli.log.error('Unhandled exception: %s: %s', e.__class__.__name__, e)
cli.log.exception(e)
exit(1)
dos2unix = cli.run(['xargs', '-0', 'dos2unix'], stdin=None, input=file_list_cmd.stdout)
if dos2unix.returncode != 0:
print(dos2unix.stderr)
return dos2unix.returncode
# Find the list of files to format
if cli.args.files:
files = list(cli.args.files)
if cli.args.all_files:
cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(map(str, files)))
elif cli.args.all_files:
git_ls_cmd = ['git', 'ls-files']
git_ls = cli.run(git_ls_cmd, stdin=DEVNULL)
files = list(filter(None, git_ls.stdout.split('\n')))
else:
git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch]
git_diff = cli.run(git_diff_cmd, stdin=DEVNULL)
files = list(filter(None, git_diff.stdout.split('\n')))
# Sanity check
if not files:
cli.log.error('No changed files detected. Use "qmk format-text -a" to format all files')
return False
return dos2unix_run(files)

Loading…
Cancel
Save