diff --git a/.github/problem-matcher-gcc.json b/.github/problem-matcher-gcc.json new file mode 100644 index 0000000..cf58ce4 --- /dev/null +++ b/.github/problem-matcher-gcc.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "shellcheck-gcc", + "pattern": [ + { + "regexp": "^(.+):(\\d+):(\\d+):\\s(note|warning|error):\\s(.*)\\s\\[(SC\\d+)\\]$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5, + "code": 6 + } + ] + } + ] +} diff --git a/.github/problem-matcher.json b/.github/problem-matcher-tty.json similarity index 92% rename from .github/problem-matcher.json rename to .github/problem-matcher-tty.json index 361c3cd..2df145f 100644 --- a/.github/problem-matcher.json +++ b/.github/problem-matcher-tty.json @@ -1,7 +1,7 @@ { "problemMatcher": [ { - "owner": "shellcheck", + "owner": "shellcheck-tty", "pattern": [ { "regexp": "^In\\s(.+)\\sline\\s(\\d+):$", diff --git a/README.md b/README.md index 2209760..30628d1 100644 --- a/README.md +++ b/README.md @@ -131,3 +131,19 @@ by setting `disable_matcher` to `true`. with: disable_matcher: true ``` + +## Change output format + +Shellcheck can print output in these formats: `checkstyle`, `diff`, `gcc`, `json`, `json1`, `quiet`, `tty`. See some examples [here](https://github.com/koalaman/shellcheck/wiki/Integration#pick-the-output-format-that-makes-your-life-easier). +Only `tty` and `gcc` produce file annotations via problem matcher, default is `gcc`. + +- `tty` has multi-line log messages, but all annotations are reported as errors +- `gcc` has single-line log messages, so it's easier to parse with a problem matcher (including correct severity annotation) + +```yaml + ... + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@master + with: + format: tty +``` diff --git a/action.yaml b/action.yaml index 2bdcd67..d2aeee6 100644 --- a/action.yaml +++ b/action.yaml @@ -26,6 +26,10 @@ inputs: description: "Set to true to skip using problem-matcher" required: false default: "false" + format: + description: "Output format (checkstyle, diff, gcc, json, json1, quiet, tty)" + required: false + default: "gcc" outputs: files: description: A list of files with issues @@ -38,12 +42,13 @@ branding: color: "gray-dark" runs: using: "composite" - steps: + steps: - name: Enable problem-matcher shell: bash run: | - if [[ ${{ inputs.disable_matcher }} != "true" ]]; then - echo "::add-matcher::${{ github.action_path }}/.github/problem-matcher.json" + problem_matcher_file="${{ github.action_path }}/.github/problem-matcher-${{ inputs.format }}.json" + if [[ ${{ inputs.disable_matcher }} != "true" && -f "$problem_matcher_file" ]]; then + echo "::add-matcher::$problem_matcher_file" fi - name: Download shellcheck @@ -78,6 +83,7 @@ runs: if [[ -n "${{ inputs.severity }}" ]]; then options+=("-S ${{ inputs.severity }}") fi + options+=("--format=${{ inputs.format }}") echo "::set-output name=options::${options[@]}" - name: Gather excluded paths @@ -190,7 +196,7 @@ runs: "$file" || statuscode=$?; done fi - + echo "::set-output name=statuscode::$statuscode" - name: Print information