name: Checks
on:
  pull_request:

jobs:
  cppcheck:
    name: Cppcheck
    runs-on: ubuntu-22.04
    timeout-minutes: 5

    steps:
      - name: Checkout sources
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          path: src/pg_stat_monitor

      - name: Checkout cppcheck sources
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          repository: "danmar/cppcheck"
          ref: "2.13.4"
          path: src/cppcheck

      - name: Build and install cppcheck
        working-directory: src/cppcheck
        run: |
          mkdir build
          cd build
          cmake ..
          cmake --build .
          sudo cmake --install .

      - name: Execute linter check with cppcheck
        working-directory: src/pg_stat_monitor
        run: |
          set -x
          cppcheck --enable=all --inline-suppr --template='{file}:{line},{severity},{id},{message}' --error-exitcode=1 --suppress=missingIncludeSystem --suppress=missingInclude --suppress=unmatchedSuppression:pg_stat_monitor.c --check-config .

  format:
    name: Format
    runs-on: ubuntu-22.04
    timeout-minutes: 5

    steps:
      - name: Clone postgres repository
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          repository: 'postgres/postgres'
          ref: 'REL_17_STABLE'

      - name: Checkout sources
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          path: 'contrib/pg_stat_monitor'

      - name: Configure postgres
        run: ./configure

      - name: Install perltidy
        run: sudo cpan -T SHANCOCK/Perl-Tidy-20230309.tar.gz

      - name: Install pg_bsd_indent
        working-directory: src/tools/pg_bsd_indent
        run: sudo make install

      - name: Add pg_bsd_indent and pgindent to path
        run: |
          echo "/usr/local/pgsql/bin" >> $GITHUB_PATH
          echo "${{ github.workspace }}/src/tools/pgindent" >> $GITHUB_PATH

      - name: Format sources
        working-directory: contrib/pg_stat_monitor
        run: |
          make update-typedefs
          make indent

      - name: Check files are formatted and no source code changes
        working-directory: contrib/pg_stat_monitor
        run: |
          git status
          git diff --exit-code

  license:
    name: License
    runs-on: ubuntu-22.04
    timeout-minutes: 5

    steps:
      - name: Checkout sources
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Check license headers
        uses: apache/skywalking-eyes/header@5c5b974209f0de5d905f37deb69369068ebfc15c # v0.7.0
        with:
          token: "" # Prevent comments
