diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f2268259f..aa5550cd6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,9 +49,9 @@ jobs: sudo apt update sudo apt remove -y clang-6.0 libclang-common-6.0-dev libclang1-6.0 libllvm6.0 sudo apt autoremove - sudo apt --no-install-recommends install -y clang-tools clang-format-6.0 - clang-format-6.0 --version + sudo apt --no-install-recommends install -y clang-tools clang-format-6.0 shellcheck python3 -m pip install yapf==0.29.0 + sudo snap install shfmt - name: Check run: | script/make-pretty check diff --git a/script/make-pretty b/script/make-pretty index c9ffae457..bb1c9179f 100755 --- a/script/make-pretty +++ b/script/make-pretty @@ -30,7 +30,7 @@ # # The script to check or format source code of OpenThread. # -# Format c/c++, markdown, and python: +# Format c/c++, markdown, python, and shell: # # script/make-pretty # @@ -46,11 +46,16 @@ # # script/make-pretty python # +# Format shell only: +# +# script/make-pretty shell +# # Check only: # # script/make-pretty check clang # script/make-pretty check markdown # script/make-pretty check python +# script/make-pretty check shell # set -euo pipefail @@ -62,102 +67,121 @@ readonly OT_CLANG_SOURCES=('*.c' '*.cc' '*.cpp' '*.h' '*.hpp') readonly OT_MARKDOWN_SOURCES=('*.md') readonly OT_PYTHON_SOURCES=('*.py') -do_clang_format() -{ +do_clang_format() { echo -e '=====================' echo -e ' format c/c++' echo -e '=====================' - git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n3 -P"${OT_BUILD_JOBS}" script/clang-format -style=file -i -verbose + git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format -style=file -i -verbose } -do_clang_check() -{ +do_clang_check() { echo -e '=====================' echo -e ' check c/c++' echo -e '=====================' - git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n3 -P"${OT_BUILD_JOBS}" script/clang-format-check + git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format-check } -do_markdown_format() -{ +do_markdown_format() { echo -e '======================' echo -e ' format markdown' echo -e '======================' - git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n10 -P"${OT_BUILD_JOBS}" npx prettier@2.0.4 --write + git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --write } -do_markdown_check() -{ +do_markdown_check() { echo -e '======================' echo -e ' check markdown' echo -e '======================' - git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n10 -P"${OT_BUILD_JOBS}" npx prettier@2.0.4 --check + git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --check } -do_python_format() -{ +do_python_format() { echo -e '======================' echo -e ' format python' echo -e '======================' - git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n10 -P"${OT_BUILD_JOBS}" python3 -m yapf --verbose --style google -ipr + git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style google -ipr } -do_python_check() -{ +do_python_check() { echo -e '=====================' echo -e ' check python' echo -e '=====================' - git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \ - | xargs -n10 -P"${OT_BUILD_JOBS}" python3 -m yapf --verbose --style google -dpr + git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style google -dpr } -do_check() -{ +do_shell_format() { + echo -e '=====================' + echo -e ' format shell' + echo -e '=====================' + + shfmt -f . | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -w +} + +do_shell_check() { + echo -e '=====================' + echo -e ' check shell' + echo -e '=====================' + + shfmt -f . | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -d + + shfmt -f . | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" | + xargs -n10 -P"$OT_BUILD_JOBS" shellcheck +} + +do_check() { if [ $# == 0 ]; then do_clang_check do_markdown_check do_python_check + do_shell_check elif [ "$1" == 'clang' ]; then do_clang_check elif [ "$1" == 'markdown' ]; then do_markdown_check elif [ "$1" == 'python' ]; then do_python_check + elif [ "$1" == 'shell' ]; then + do_shell_check else - >&2 echo "Unsupported check: $1. Supported: clang, markdown, python" + echo >&2 "Unsupported check: $1. Supported: clang, markdown, python, shell" # 128 for Invalid arguments exit 128 fi } -main() -{ +main() { if [ $# == 0 ]; then do_clang_format do_markdown_format do_python_format + do_shell_format elif [ "$1" == 'clang' ]; then do_clang_format elif [ "$1" == 'markdown' ]; then do_markdown_format elif [ "$1" == 'python' ]; then do_python_format + elif [ "$1" == 'shell' ]; then + do_shell_format elif [ "$1" == 'check' ]; then shift do_check "$@" else - >&2 echo "Unsupported action: $1. Supported: clang, markdown, python" + echo >&2 "Unsupported action: $1. Supported: clang, markdown, python, shell" # 128 for Invalid arguments exit 128 fi