forked from mirrors/qmk_userspace
		
	Partially reinstate CI formatting process (#15155)
* Partially reinstate CI formatting process * Fix exit code on clean run * Fix exit code on clean run
This commit is contained in:
		
					parent
					
						
							
								b785305080
							
						
					
				
			
			
				commit
				
					
						ec0bb791f8
					
				
			
		
					 2 changed files with 58 additions and 21 deletions
				
			
		
							
								
								
									
										21
									
								
								.github/workflows/format.yaml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.github/workflows/format.yaml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -19,7 +19,9 @@ jobs:
 | 
			
		|||
    container: qmkfm/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: rlespinasse/github-slug-action@v3.x
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: |
 | 
			
		||||
        apt-get update && apt-get install -y dos2unix
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
      with:
 | 
			
		||||
| 
						 | 
				
			
			@ -31,12 +33,17 @@ jobs:
 | 
			
		|||
        output: ' '
 | 
			
		||||
        fileOutput: ' '
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk format-c and qmk format-python
 | 
			
		||||
    - name: Run qmk formatters
 | 
			
		||||
      shell: 'bash {0}'
 | 
			
		||||
      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)"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,27 +1,57 @@
 | 
			
		|||
"""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 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)
 | 
			
		||||
def format_text(cli):
 | 
			
		||||
    """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)
 | 
			
		||||
    # Find the list of files to format
 | 
			
		||||
    if cli.args.files:
 | 
			
		||||
        files = list(cli.args.files)
 | 
			
		||||
 | 
			
		||||
    dos2unix = cli.run(['xargs', '-0', 'dos2unix'], stdin=None, input=file_list_cmd.stdout)
 | 
			
		||||
        if cli.args.all_files:
 | 
			
		||||
            cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(map(str, files)))
 | 
			
		||||
 | 
			
		||||
    if dos2unix.returncode != 0:
 | 
			
		||||
        print(dos2unix.stderr)
 | 
			
		||||
    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')))
 | 
			
		||||
 | 
			
		||||
    return dos2unix.returncode
 | 
			
		||||
    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…
	
	Add table
		Add a link
		
	
		Reference in a new issue