name: cppcheck

on:
  push:
    paths-ignore:
      - 'docker-compose/**'
      - 'docs/**'
      - 'README.md'

  pull_request:

  schedule:
    - cron: '57 0 * * *'

jobs:
  cppcheck-ubuntu:

    timeout-minutes: 120
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        submodules: recursive

    - name: Checkout cppcheck
      uses: actions/checkout@v4
      with:
        repository: danmar/cppcheck
        path: cppcheck-main

    - name: Build cppcheck
      run: |
        cd cppcheck-main
        make -j$(nproc) cppcheck

    - name: cmake p2pool
      run: |
        mkdir build
        cd build
        cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSTATIC_LIBS=ON
        python ../cppcheck/remove_external.py compile_commands.json

    - name: Run cppcheck
      run: |
        cd cppcheck
        ./run.sh

    - name: Archive full error list
      uses: actions/upload-artifact@v4
      with:
        name: errors_full-linux
        path: cppcheck/errors_full.txt

    - name: Archive checkers report
      uses: actions/upload-artifact@v4
      with:
        name: checkers_report-linux
        path: cppcheck/checkers_report.txt

  cppcheck-windows:

    timeout-minutes: 60
    runs-on: windows-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        submodules: recursive

    - name: Checkout cppcheck
      uses: actions/checkout@v4
      with:
        repository: danmar/cppcheck
        path: cppcheck-main

    - name: Build cppcheck
      run: |
        cd cppcheck-main
        & "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Msbuild\\Current\\Bin\\amd64\\msbuild.exe" -v:m /m /p:Configuration=Release /p:Platform=x64

    - name: Setup cmake
      uses: lukka/get-cmake@latest

    - name: cmake p2pool
      run: |
        mkdir build
        cd build
        cmake .. -G "Visual Studio 17 2022" -DSTATIC_LIBS=ON

    - name: Run cppcheck
      run: |
        cd cppcheck
        ./run.cmd

    - name: Archive full error list
      uses: actions/upload-artifact@v4
      with:
        name: errors_full-windows
        path: cppcheck/errors_full.txt

    - name: Archive checkers report
      uses: actions/upload-artifact@v4
      with:
        name: checkers_report-windows
        path: cppcheck/checkers_report.txt