name: Linux build

on:
  pull_request:

# Cancel previous runs if a more recent commit is pushed.
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref }}
  cancel-in-progress: true

permissions: read-all

jobs:
  linux-build:
    name: Build and run tests on Linux using CMake
    runs-on: ubuntu-latest
    strategy:
      matrix:
        asan: ["ON", "OFF"]

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: '0'
      - name: Clone submodules
        run: git submodule update --init --recursive
      - name: Build
        run: |
          mkdir build
          cd build
          cmake .. -DCMAKE_BUILD_TYPE=Release -DSPIRV_REFLECT_BUILD_TESTS=ON -DSPIRV_REFLECT_ENABLE_ASAN=${{matrix.asan}}
          make -j $(nproc)
      - name: Run unit tests
        run: |
          cd build
          ./test-spirv-reflect
      - name: Clone SPIRV-Database
        run: |
          git clone https://github.com/LunarG/SPIRV-Database.git build/SPIRV-Database
      - name: Test - SaschaWillemsVulkan
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/SaschaWillemsVulkan/
      - name: Test - clspv
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/clspv/
      - name: Test - dawn
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/dawn/
      - name: Test - gl_cts
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/gl_cts/
      - name: Test - naga
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/naga/remaps/
      - name: Test - tint
        run: |
          python tests/ci_database.py --dir build/SPIRV-Database/vulkan/tint/
