name: Check clang-tidy

on:
  push:
    branches-ignore:
      - gh-readonly-queue/**
      - master
  pull_request:
  merge_group:

jobs:
  check-clang-tidy:
    runs-on: ubuntu-latest
    env:
      CARGO_HTTP_MULTIPLEXING: false
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        submodules: recursive

    - name: Prepare Linux
      run: |
        sudo apt-get update -y
        sudo apt-get install pkg-config cmake ninja-build libfreetype6-dev libnotify-dev libsdl2-dev libsqlite3-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libx264-dev libvulkan-dev glslang-tools spirv-tools libglew-dev -y

    - name: Cache Rust dependencies
      uses: Swatinem/rust-cache@v2

    - name: Install Clang 20
      run: |
        sudo apt-get update
        sudo apt-get install -y wget gnupg lsb-release
        wget https://apt.llvm.org/llvm.sh
        chmod +x llvm.sh
        sudo ./llvm.sh 20 all

    - name: Build with clang-tidy
      run: |
        mkdir clang-tidy
        cd clang-tidy
        cmake -G Ninja \
          -DCMAKE_CXX_COMPILER=clang++-20 \
          -DCMAKE_C_COMPILER=clang-20 \
          -DCMAKE_CXX_CLANG_TIDY="clang-tidy-20;-warnings-as-errors=*" \
          -DCMAKE_C_CLANG_TIDY="clang-tidy-20;-warnings-as-errors=*" \
          -DCMAKE_BUILD_TYPE=Debug \
          -Werror=dev ..
        cmake --build . --config Debug --target everything -- -k 0
