name: lint

on:
  push:
    branches:
    - develop
    - stable
    - 'GSOC**'
  pull_request:
    branches:
    - develop
    - stable
    - 'GSOC**'

jobs:
  flake8:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python 3.10
      uses: actions/setup-python@v5
      with:
        python-version: "3.10"
    - name: Lint with flake8
      run: |
        python -m pip install --upgrade pip
        pip install flake8 flake8-builtins
        flake8 --count --statistics mslib tests

  no-crlf-in-git:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v4
    - name: Check for CRLF in the repository
      run: |
        files_with_crlf="$(git ls-files --eol | awk '$1 ~ "crlf"')"
        echo "$files_with_crlf"
        [ "$files_with_crlf" == "" ] || exit 1

  no-whitespace-issues-in-git:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v4
    - name: Check for whitespace issues in the repository
      # The two example.txt files need to be excluded because whitespace at EOL is part
      # of their format and they fail to parse otherwise.
      # The leftover conflict marker warning is ignored for all rst files because
      # section headings consisting of 7 "=" characters are mistaken to be part of a
      # conflict marker.
      run: |
        issues="$(
          git diff --check $(git hash-object -t tree /dev/null) HEAD :^tests/data/example.txt :^docs/samples/flight-tracks/example.txt |
            { grep -v '^.*\.rst:.*leftover conflict marker$' || true; }
        )"
        echo "$issues"
        [ "$issues" == "" ] || exit 1