graphql-engine/.github/workflows/hlint.yml
Antoine Leblanc 3f87d9e886 ci: hlint suggestions do not mark the check as failed
Instead of using hlint's return value to determine whether the check was successful, we parse the output to see if there was any error. In practice, that means that hlint suggestions, which are translated as warnings on a pr, will no longer mark the check as failed.

GitOrigin-RevId: dff2a50180de0c5f0702a9799b1f6359499da6a5
2021-01-20 17:50:50 +00:00

43 lines
1.9 KiB
YAML

name: server lint
on:
label:
pull_request:
paths:
- 'server/**'
jobs:
hlint:
runs-on: ubuntu-20.04
if: "!contains(github.event.pull_request.labels.*.name, 'ignore-server-hlint-checks') && github.event.label.name != 'ignore-server-hlint-checks'"
env:
working-directory: ./server
HLINT_BASE_URL: https://dl.haskellworks.io/binaries/hlint
HLINT_VERSION: 3.1.6
HLINT_ARCH: x86_64
HLINT_OS: linux
HLINT_URL: $HLINT_BASE_URL/hlint-${HLINT_VERSION}-${HLINT_ARCH}-${HLINT_OS}.tar.gz
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Download hlint
working-directory: ${{env.working-directory}}
run: |
echo "Downloading from ${{env.HLINT_URL}}"
curl "${{env.HLINT_URL}}" -o "./hlint-${{env.HLINT_VERSION}}-${{env.HLINT_ARCH}}-${{env.HLINT_OS}}.tar.gz"
tar -zxvf "./hlint-${{env.HLINT_VERSION}}-${{env.HLINT_ARCH}}-${{env.HLINT_OS}}.tar.gz" -C "."
- name: Run hlint
shell: bash
run: |
CHANGED_HS_FILES=$(git diff --name-only origin/${{github.base_ref}}...${{github.sha}} -- "${{env.working-directory}}/*.hs" | xargs -i -d '\n' sh -c 'ls -d {} 2>/dev/null || true')
echo "$CHANGED_HS_FILES"
JQ_SCRIPT='.[] | "::" + (if (.severity=="Warning" or .severity=="Error") then "error" else "warning" end) + " file=\(.file),line=\(.startLine),col=\(.startColumn)::\(.severity):" + " \(.hint)%0AFound:%0A \(.from | gsub("\n";"%0A "))%0A" + try ("Perhaps:%0A " + (.to | gsub("\n";"%0A "))) catch ""'
if [[ "$CHANGED_HS_FILES" ]]
then
OUT=$(mktemp)
echo "$CHANGED_HS_FILES" | xargs ${{env.working-directory}}/hlint --no-exit-code --json --hint=${{env.working-directory}}/.hlint.yaml | jq -r "$JQ_SCRIPT" | tee $OUT
test -z "$(grep -E '^::error' $OUT)"
fi