diff --git a/.github/workflows/CheckScripts.yml b/.github/workflows/CheckScripts.yml new file mode 100644 index 00000000000..e1b3b24d205 --- /dev/null +++ b/.github/workflows/CheckScripts.yml @@ -0,0 +1,74 @@ +name: CheckScripts + +# spell-checker:ignore ludeeus mfinelli + +env: + SCRIPT_DIR: 'util' + +on: + push: + branches: + - main + paths: + - 'util/**/*.sh' + pull_request: + branches: + - main + paths: + - 'util/**/*.sh' + +# End the current execution if there is a new changeset in the PR. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + shell_check: + name: ShellScript/Check + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v3 + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@master + env: + SHELLCHECK_OPTS: -s bash + with: + severity: warning + scandir: ${{ env.SCRIPT_DIR }} + format: tty + + shell_fmt: + name: ShellScript/Format + # no need to run in pr events + # shfmt will be performed on main branch when the PR is merged + if: github.event_name != 'pull_request' + runs-on: ubuntu-latest + needs: [ shell_check ] + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v3 + - name: Setup shfmt + uses: mfinelli/setup-shfmt@v2 + - name: Run shfmt + shell: bash + run: | + # show differs first for every files that need to be formatted + # fmt options: bash syntax, 4 spaces indent, indent for switch-case + echo "## show the differences between formatted and original scripts..." + find ${{ env.SCRIPT_DIR }} -name "*.sh" -print0 | xargs -0 shfmt -ln=bash -i 4 -ci -d || true + # perform a shell format + echo "## perform a shell format..." + # ignore the error code because `-d` will always return false when the file has difference + find ${{ env.SCRIPT_DIR }} -name "*.sh" -print0 | xargs -0 shfmt -ln=bash -i 4 -ci -w + - name: Commit any changes + uses: EndBug/add-and-commit@v9 + with: + default_author: github_actions + message: "style: auto format by CI (shfmt)" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +